このエントリーは MySQL Advent Calendar 2020 の 12/7 のエントリーです。 照合順序(COLLATION)とは 照合順序は文字列の比較やソート順のルールのことです。各キャラクタセットごとに照合順序が定義されています。 -- SHOW COLLATIONS で一覧が見れる mys…
MySQL 8.0 でヒストグラム統計が追加されました。従来、MySQLはデータが均等に分布していると仮定し、実行計画を組み立てていました。 ヒストグラムを使えば正確なデータの分布に基づいて、より最適な実行計画が選択されるようになります。 yakst.com ヒスト…
pt-stalk は、vmstat や psといったOSから見える情報や SHOW PROCESSLIST SHOW GLOBAL STATUSといったDBの情報など、MySQLのトラブルシュートに必要な情報をごっそり収集するツールです。 $ sudo ls -l /var/lib/pt-stalk total 1428 -rw-r--r--. 1 root roo…
MySQL では、パスワードのハッシュ値を指定してユーザを作ることが出来ます。 mysql> SELECT authentication_string FROM mysql.user WHERE User = 'usr'; +-------------------------------------------+ | authentication_string | +---------------------…
前回のエントリーでMySQL Shellのバグについて書きました。バグの原因を調査するために、MySQL Shellをビルドしたんですが、ビルドに苦労しました、、、 MySQL Shell をビルドするために乗り越えた障害と対応を方法をメモしておきます。 まず、MySQL Shell …
このバグは MySQL Shell 8.0.23 で修正済みです。 前回のエントリーで MySQL Shell の dumpInstance にはバグがあると書きました。 今回は、そのバグについてです。 どんなバグか バックアップの一貫性が失われるバグです。一貫性が失われるている状態とは、…
MySQL Release note でわいわい言う勉強会 8.0.22 でLTしてきました。 MySQL Shell の dumpInstance の仕組み MySQL Shell のバックアップ機能 dumpInstance がどのようにして、一貫性のあるバックアップを実現しているか説明しました。 8.0.21 までは FLUSH…
ALTER TABLE xxx MODIFY 〜 でキャラクタセットを変換するのと、ALTER TABLE xxx CONVERT TO〜 で変換するのは、どう違うんだっけ? ってなったので、おさらい。 データベースのデフォルトキャラクタセット MySQL はカラム単位でキャラクタセット(文字コー…
MySQL のマルチマスターのソリューションである、PXC と Group Replication の比較記事が続きます・・・ PXC では DDL は KILL できない Percona XtraDB Cluster (Galera) では DDL実行中は、すべてのノードで更新が止まると、以前のエントリーで書きました…
フルデータコピーが行われるタイミング PXC や MySQL Group Replication では、新規にノードを追加したタイミングや、障害発生後、既存ノードからデータをコピーし、復旧する機能があります。 データコピー中のDDLの挙動の比較 フルデータコピーには非常に時…
Gelera Cluster / Percona XtraDB Cluster Galera Cluster for MySQL は フィンランドの会社が開発している、MySQL の fork (派生製品)の1つです。wsrep API と呼ばれる独自のレプリケーション機構を使った、マルチマスター型のHA構成を組むことができま…
データベースのバージョンアップの際、アプリケーションの網羅的なテストが可能であれば良いのですが、どうしても難しいケースがあります。 そのような場合、リプレイツールで本番環境に流れているクエリを、試験環境でリプレイ(再現)し、動作確認を取る方…
日々、検証のためDBサーバを作っては捨て、作っては捨てる・・を繰り返しています。 そうすると、検証環境を作る手間を省きたくなってきます。 dbdeployer、docker-compose やchef など、いろいろなツールを試してきましたが、結局、白紙の仮装マシン(VM)…
日常的に、long_query_time をちょっと超えているクエリが流れていて、スロークエリログが多く出力されているDBってあったりしますよね? そんなログからノイズとなってしまっている、ちょっと遅いクエリは除いて、非常に重症のクエリのログだけに絞って見た…
MySQLの初期のALTER TABLEの実装は非常にシンプルな実装でした。 新しいテーブル定義で(内部的に)一時テーブルを作成し、そこに既存のデータをコピーして、コピーが終わったら入れ替えます。コピー中は更新をブロックします。 MySQL v5.6 で オンラインDDL …
Aurora MySQL v5.6 のサポート期限がいつかわからない 現在、Auroraでは、MySQL v5.6 (Engine 1.x) とv5.7互換 (Engine 2.x) のデータベースが利用できます。 Oracleが開発しているオリジナルのMySQL v5.6(以降 Vanilla MySQLと記載) は、2021/02 にサポート…
MySQL Sever Blog に MySQL Shell 8.0.21 の Dump / Import 機能についてエントリーが投稿されています。 並列化により非常に高速に Dump / Import 出来ることなどが示されてます。非常に強力なツールであることが感じられます。 MySQL Shell Dump & Load pa…
最近、ANDPADでデータベース周りの技術顧問をさせて頂いています。ANDPADのエンジニアの皆さんから「データベースのロックまわりを詳しく知りたい!」というお話を受けて、先日、ロック周りの社内勉強会を開催しました。 SQLでは一般的なプログラミング言語…
TL;DR PHP の mysqli.max_persistent で指定できるのは、HTTPワーカ プロセスあたり のコネクション数だった 「全部で何個まで」っていう制限値じゃなかった PHP mysqli.max_persistent 設定 Persistent Connections まわりのエントリーを先日書きました。 m…
コネクションプーリングのメリット コネクションプーリングは、一度確率したコネクションを使い回す仕組みです。TCP 3-way ハンドシェイクやDBの新規接続処理をスキップすることで、パフォーマンスを向上させる効果があります。 ただ、私の経験ではコネクシ…
Amazon Aurora のレプリカは Vanilla MySQL のレプリケーションとは違った仕組みで実現されている。 マスターとレプリカは同じディスクボリュームを参照しており、マスターでの更新はほぼ即時レプリカに反映される。 DB クラスターボリュームは DB クラスタ…
先日は、MySQLユーザ会会 2020年7月に参加しました。 今回はWebや雑誌で連載の著者の方々が、執筆に至った経緯や、執筆時に心がけていることを語る回でした。 @kk2170 さんが「過去の自分に向けて書く」とおっしゃっていたのが、(そういう視点は自分の中に…
MySQL 徹底入門 第4版が出ましたね! 著者の方々にサインをもらいたいところですが、Stay Homeな昨今なかなかチャンスがありそうにありません。 MySQL徹底入門 第4版 MySQL 8.0対応作者:yoku0825,坂井 恵,鶴長 鎮一,とみたまさひろ,深町 日出海,福山 裕大,…
MySQL 誕生25周年 らしいです。めでたい! 25年、1つのソフトウェアが継続しているってすごい! max_connections について データベースを使っている開発者から「最大までどれぐらいコネクション数を増やせるのか」という質問を良くもらいます。 最大コネク…
マスター・スレーブ構成ではマスター障害時、保持しているバイナリログが最も進んでいるスレーブから新マスターを選出する。 MySQLでは、どのスレーブが最新のログを持っているかはコントロールできない。 準同期レプリケーションを利用していたとしても、非…
MySQL 8.0で、「デュアルパスワード」がサポートされました。 1つのユーザに対して、新旧2つのパスワード(プライマリとセカンダリ)を設けることができます。 # どっちのパスワードでもログインできる $ mysql -uapp -h$HOSTNAME -pPassw0rd@init -e 'SEL…
TLDR; MySQL 8.0.20 から INNER JOIN だけじゃなくて、Semi joinや Left/Right outer join でも HASH JOIN が使えるようになったよ MySQL 8.0.20 では (EXPLAIN ANALYZEではなく)EXPLAIN でも、HASH JOINが使われているか、表示されるようになったよ MySQL …
ただのメモです。 pt-query-digest percona tookit に含まれるツールの1つ。 スロークエリログやtcpdump からクエリを抽出して、クエリを集計するツール。 負荷をかけているクエリを洗い出すのに便利なヤツ。 https://www.percona.com/doc/percona-toolkit/…
feature request MySQL のバグは bugs.mysql.com で管理されています。 このサイトにはバグだけでなく、機能改善(feature request) の要望も投稿できます。 bugs.mysql.com 眺めてみる 普段はバグ(不具合)に注目してみているのですが、今日は、FRをみてみ…
お題 不要そうなインデックスを削除して、どれぐらい容量が減るのか確認したい information_schema.tables の INDEX_LENGTH では合計容量しか見えない mysql> SELECT TABLE_NAME, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH FROM information_schema.tables WHE…