Advanced InnoDB Performance Tuning

by Peter Zaitsev, Tobias Asplund

MySQLパフォーマンスチームによるInnoDBチューニング講座:

  • InnoDB概要を振り返り:トランザクション機能,リカバリ機能,Clusterd Index
  • MyISAMとの対比少々:(省略)
  • 短い主キー向け:INTの方がchar/varcharより速い,ユニークキーが無い場合はauto_incrementを使え
  • 主キーで走査しろ
  • 長い行の場合,オーバーヘッドの影響が減る
  • Manual partitioning still make sense
  • Loading dataはMyISAMよりも遅い
  • Loading dataの順番は主キーでソートされていないと大変(100倍くらいの差がでる)
  • innodb_buffer_pool_size up to 90% of memory
  • innodb_log_file_size to innodb_buffer_pool_size
  • Transactionサイズ大きすぎても小さすぎても遅くなる
  • SELECT GET_LOCK("mycomplexquery01");
  • innodb_thread_concurrency:
-try setting to (num_cpus+num_disks)*(2..4)
-try setting to 1000 disable and see if OS does the job
  • よくアクセスするデータは別テーブルに切り出すとCacheの効率が上がって良い.例えばnewsテーブルからtopnewsテーブルを切り出す等.
  • repeatable-readは十分速い.
  • lock in share modeをつけると遅くなる(重要)
  • innodb_buffer_pool_awe_mem_mb:Windows Only?
  • innodb_data_file_pathで分ける
  • innodb_flush_log_at_trx_commit
  • innodb_flush_method:fsync, O_SYNC, O_DIRECT
  • innodb_log_buffer_sizeを大きくしすぎると(Max64MB)遅くなる.通常は8MBで十分.
  • innodb_log_file_size:大きくすると速くなる.リカバリ時に代わりに遅くなる(問題無し)思いっきり大きくするとよい.
  • innodb_max_dirty_pages_pct
  • RAIDはRAID10がベストRAID5は*遅い*
  • RAIDのストライピングのサイズは大きく:256KB-1MB
  • 64bit CPUがやっぱり速い.メモリを大量に使える.
  • OSについて:reliable synchronous disk I/O is needed (fsync()), good thread library is critical, DIRECT I/O support is needed
  • See "DIKU Research": コペンハーゲン大学にていろいろ調査している
  • CPU Scale up:CPU1 -> CPU2 (1.77) -> CPU4 (2.96) といった感じ
  • 1m行, 10m行くらいまでは変わらない,100m行でパフォーマンス急激に低下
  • ベンチマークツール:SysBench

感想.参加者150名くらい?満席に近い状況.ほとんど知っている内容.今日最後のセッション.1日で1万字程度のレポートをセッション受講中に書いたらしい.もうヘトヘト.