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万字程度のレポートをセッション受講中に書いたらしい.もうヘトヘト.