2010年12月9日木曜日

XtraDB 5.5版 性能調整中 (続報)

SSD 更新系処理の性能が明らかに上がったようなので、続報。

SSD で更新系が多い処理で高性能を出すコツ(追加分)

7.innodb_log_block_size (今日作った) をデバイスのブロックサイズに合わせて拡大する。

ご存知とは思いますが(?) InnoDB のトランザクションログの書き込みは 512 バイト単位で行われます。しかし、最近の記録デバイスはそれより大きい記録単位を持っていることが多くなってきました(1K〜4Kバイトくらい)。この時デフォルトの512バイトでは書き込みIOの効率が悪くなっていたようです。
例えば、4Kバイト 単位のデバイスに 512 バイトの書き込みをする場合、他の部分の内容を保持するために、4Kバイト の読み込みの後に 該当個所 512バイト 上書きして、4Kバイト書き込むという動作が必要になります。たとえ、アプリケーションの側からは見えなくても、ドライバやハードウェアの階層でこのような処理が必要となります。4Kバイト 単位IOのデバイスには log_block_size も4KBにするのが最適です。単純に 4KB の読み込みが減るのでトランザクションログ書き込みの効率が上がります。(特に innodb_flush_log_at_trx_commit = 1 の場合は各トランザクションが書き込みを待つため性能が顕著に違うようです。)


このオプションも5.5ベースのXtraDBには実装する予定です。
「もう待てない。是非試したい!」という諸兄は、
bzr branch lp:~percona-dev/percona-server/5.5.7
で開発中バージョン(まだ私の持ち分のパッチだけ(XtraDB + α))が取得できるので、ビルドして試してみてください。


<追記:12月13日>
innodb_adaptive_checkpoint=keep_average と innodb_log_block_size を 5.1系にバックポートしました。次のリリースで多分使えるはずです。

しかし、、、動作確認がてら、BP十分更新系 の負荷をかけたら 5.1 の方が 5.5 よりも 3%くらい速いような。 5.5 はノーマルでは 5.1 より良いのかも知れないが、潜在能力は下がっている。。。ということかも知れない。

2 件のコメント:

  1. 5.5版では謎の新オプションが増えていますが、必要も無いのにむやみに触らない方がいいと思います。用途が解る人のみ、必要になったときにだけ、使うようにしましょう。(謎)

    返信削除
  2. この7.については、SSDに依ってしまう模様。
    「F」は効果があったが、「V」には効果無し(というか=1でも元々=2と同じくらい速い)、「S」とかにはどうだろう。

    返信削除