性能改善に役立ったパラメータのメモです。
1.table_open_cache
一度開いたファイルのファイルポインタを格納しておくキャッシュを設定します
デフォルトは2000でautosizedとなっているため、上限を決めると性能が上がる可能性があります。
2.table_open_cache_instances
table_open_cacheの分割数を設定します。
分割することでDDL文以外の並列性が向上します。
推奨値がないため、最初はCPUの数を設定してあげて、その近辺から最も性能が上がる数を探しています。
デフォルトは1です。
3.innodb_buffer_pool_size
InnoDBのデータやインデックスなどのキャッシュ領域を指定します。
システムに見合った適切な値を設定してあげてください。
デフォルトは134217728byteです。
4.innodb_autoextend_increment
ibdataの自動拡張時の拡張サイズを設定します。
デフォルトは8MBなのでバッチで大量のデータをinsertするようなシステムでは、この値は広く取らないと領域拡張の嵐で性能が劣化します。
5.binlog_cache_size
1トランザクションでバイナリログ出力するbinlogをキャッシュしておくサイズを指定します。
1トランザクション中に発行するクエリの総量がこの値を超えると性能が劣化します。
デフォルトは32768byteです。
6.innodb_sync_array_size
待機中スレッドについての同時実行性を高めるために、内部データ構造をいくつに分割するかを指定します。
(mutex/rw_lockのイベント待ち処理の並列性に影響。)
何の設定かがいまいち分からないですが、内部データ構造を分割することでデータの書き込み領域を排他している?のかなと。
CPU * 2くらいの値を設定するのが推奨で、設定すると確かに速くなります。(なぜ速くなるのかが、説明できませんが・・・)