InnoDB: Designing and Configuring for Best Performance

気になったところをメモ。

  • SHOW INNODB STATUS\G
  • ディスクアクセスを減らすために
    • innodb_log_file_sizeはinnodb_buffer_pool_sizeの25%ぐらいにする
    • これは、以下を前提としてのお話
      • innodb_log_file_in_group = 2
      • innodb_log_file_size × innodb_log_file_in_group が4GB以下
  • テーブルの大きさを小さくしよう
    • 小さくすればバッファに乗りやすい→ディスクI/Oが減る
      • 5.0からCREATE TABLE ... ROW_FORMAT=COMPACTがデフォルトになったよ
      • 4.1以前の古い形式はROW_FORMAT=REDUNDANTね
      • 最大20%ぐらい小さくなるよ
    • PRIMARY KEYは短くしようね
      • 全てのセカンダリインデックスのレコードにも、プライマリキーが保存されているから
  • コミットんときのディスクI/Oを減らす
    • commitしたときにディスクフラッシュしないようにする
    • innodb_flush_log_at_trx_commit=2
    • クラッシュリカバリにも関わるパラメータなのでよく考えてね
  • OSとInnoDBの両方でバッファリングしてるのって無駄だよね
    • Linuxの場合、innodb_flush_method=O_DIRECTにするとInnoDBのファイルについて、OSがバッファリングしないようになるよ
  • 遅いOSのファイルフラッシュを排除する
    • Linuxの場合、データをディスクにフラッシュするのにfsync()を使う
    • fsync()は実装によってはすんごい遅いの
    • そんときはinnodb_flush_method=O_DSYNCにするといいかもよ