2009年8月9日日曜日

InnoDBの性能改善版

しばらく間があいてしまいました。

今回は、地味な話で少し遅れてしまった話題ですが、InnoDBの性能改善についてです。2009.4のMySQL UCの時点では「MySQL5.4よりも遅いんじゃないか?」と言われていた、XtraDB、5.0-highperf ですが、色々世界の皆様のパッチを参考に(いいとこ取り)して、且つ自分のパッチ(split_buf_pool_mutex)はXtraDBベースのlatching orderでちゃんと行儀良く(デバッグモードもちゃんと動作させる)書き直してデバッグして、環境(とチューニング[大事])によっては5.4よりも多少良い性能が出るようになっているはずです。(例 Performance improvements in Percona 5.0.83 and XtraDB : CPUコア数、RAIDの並列性能、データ量、処理内容、チューニング等々で性能差は全く変わるとは思います。)

さて、一部の方から「某Googleのv4パッチは移植しないのか?」の質問を偶にいただくのですが、個人的にはGoogleパッチはInnoDBを書き換え過ぎと思っています。また多分同じ目的で違うアプローチのもっと単純なパッチはある程度含めているのでv4まで見る必要はないかなと思っています。(v3以前からは、IOスレッドのハンドリングと、log_sys->mutex競合対策は採用させていただいています。)先日、初めて(!)googleパッチをビルドして動かしてみたのですが、そのままではビルドできないし、パラメータも外から変えられない(他にもパッチが必要なのか?)し、新オプションを有効にしたらかえって重くなるしで、かなり疑問を感じています。。。一般的にベンチマークの結果は実施法やデータ整理の仕方、見せ方で人によって大きく結果が違ってしまいます。難しいモノですね。。。というわけで、当面はv4パッチの変更点(多分ibufのcontractやmodified blockのflush周り)については採用する予定は個人的にはありません。納得のいかない方は「v4パッチのどの部分のInnoDBのどんな部分に対する何の変更はどう?」という形でご意見をいただけると幸いです。:-)

さて、試していただくには勿論最新のバイナリを利用していただいてもいいのですが(XtraDB 1.0.3-65.0.83-percona)、常にバグフィクスをしている(つもり)ので、できればソースからビルドしてもらえれば多分間違いは少ないかと思います。また今、ごく一部で話題のクラッシュリカバリが速くなるオプション(近日日本語で詳細に紹介(英語は不得意なので。。))も今時点でのバイナリには入っていません。
最新のソースを得るためにはBazaarが必要です。(本家MySQLでも利用しているので説明は省略(!))

(XtraDB)
> bzr branch lp:~percona-dev/percona-xtradb/extensions-1.0

(5.0.84-percona)
> bzr branch lp:~percona-dev/percona-patches/5.0.84

とすれば最新のパッチファイルが得られます。新しい本家バージョンに対するbranchがある場合は古い方のメンテナンスは止まっているので注意してください。

パッチの適用の仕方ですが、それぞれのディレクトリ直下には「series」というファイルがあってパッチの適用する順番が書かれています。([!]:XtraDBのseriesファイルの最後に「xtradb-dir.patch」という行がありますがこのパッチはビルトインのInnoDBとXtraDBを共存させようとするモノですが、まだ怪しい(し、私はまだ関知していないパッチ)のでこの行は削除してください

パッチは手で1個1個適用しても良いのですが、seriesファイルを利用して

(XtraDB)
innodb_plugin-1.0.3の場所で> (cd パッチの場所/extensions-1.0; cat `cat series`) | patch -p1
("xtradb-dir.patch" は series ファイルから削除しておくこと)

(5.0.84-percona)
mysql-5.0.84の場所で> (cd パッチの場所/5.0.84; cat `cat series`) | patch -p1


とすれば簡単かと。(MySQL-5.0のビルドの説明は省略。innodb-pluginのビルドの説明は、、、この辺でお願いします。。。)

では、この辺(XtraDBで追加されるオプション)を見て興味のあるところを試してみてください。サーバーにCPUが16個以上ある人やRAIDに数百万以上かけている方にはきっと特にご満足頂けると思います。。。

これら追加パラメータのチューニングについて一回全部「日本語で」触れた方がいいかも知れないですね。(いつか。。)