Blogs

innodb_thread_concurrencyとか 計測してみました

innodb_thread_concurrencyとかでこんなことを書きました。

・innodb_thread_concurrency InnoDB の処理を同時に実行できるスレッド数の上限値
・MySQL 5.0.8 以降にデフォルト値が 8 から 20 に変更され、無制限を意味する値が 500 から 20 に変更されている
(つまり、デフォルトは制限なし)。
・最大スレッド数を無制限にすることで 10% 程度性能を上げることができた。

※自分で調べたのではなく、OSDL DBT-1 (ODBC版) による MySQL 5.0 性能測定 CPU 構成の差異による特性の分析と考察 Intel Xeon デュアルコア編 からの引用でした。

気になったので自分で計測してみました。

測定環境についてはこちらを参照して下さい。

・データ件数は100万件
こちらの構造のテーブルをInnoDBとMyISAMで作成して処理速度を比較

で、innodb_thread_concurrency を2,4,8,20(無制限を意味する)と変えながら計測してみました。

スレッド数 2 4 8 20

PrimaryKeyによるランダムアクセスの計測結果(innodb_thread_concurrency=2,4,8,20)


微妙ですね。

同時スレッド2,4,8だけでグラフにするとこんな感じです。

PrimaryKeyによるランダムアクセスの計測結果(innodb_thread_concurrency=2,4,8,20) 同時スレッド2,4,8だけ


innodb_thread_concurrency=2の場合
同時スレッド2と4が性能が良い、同時スレッドを上げると急激に性能低下

innodb_thread_concurrency=4の場合
同時スレッド2と4が性能が良い、同時スレッドを上げると時の落ち方がinnodb_thread_concurrency=2の場合より少し緩やか

innodb_thread_concurrency=8の場合
同時スレッド4が他より性能が良い、同時スレッドを上げると時の落ち方がinnodb_thread_concurrency=2の場合より少し緩やか

innodb_thread_concurrency=20(無制限を意味する)の場合
同時スレッド8に比べてピーク性能が落ちる 同時スレッドを上げると時の落ち方が他と比べて緩やか

といったところが特徴でしょう。

OSDL DBT-1 (ODBC版) による MySQL 5.0 性能測定 CPU 構成の差異による特性の分析と考察 Intel Xeon デュアルコア編 で、「最大スレッド数を無制限にすることで 10% 程度性能を上げることができた」のは、マシンスペックの問題でしょう。
あちらは

CPU: AMD Opteron 254 x 2 (2.8GHz, AMD64, L2 1MB)
Memory: 8GB (DDR/400, ECC)
Storage: 73GB (RAID1, 73GB x 2, SAS, 10000rpm, 2.5inch)
特徴:
シングルコア Opteron の最上位版 (2006年3月現在)
AMD64 (x86-64) 対応
SAS (Serial Attached SCSI) 接続で2.5インチのハードディスク

ですから、同時処理性能が高いためだと思います。

innodb_thread_concurrencyについてまとめると

・同時処理性能に影響はある
・CPUのコア数とディスク性能によって、設定値を決めるべき
・一般的なサーバ機(今時の1CPUデュアルコア以上+RAID)で、MySQL 5.0.8 以上ならば初期値の20でほぼ問題ないと思われる
・レベルの低いサーバの場合は、より少ない値に設定したほうがよい
・その場合は、CPUのコア数×2か3 くらいが目安になると思われる

ということになると思います。

kajiwarainnodb_thread_concurrencyとか 計測してみました