前回からの続きで、InnoDBとMyISAMのパフォーマンス測定を続けています。
同一の環境で、同時スレッドを64,128,192,256,512と変えながら1秒間のクエリー処理数を計測しました。
初期化パラメータは前回と同様です。
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-lockingsort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 64
max_allowed_packet = 16M
key_buffer_size=1250M
innodb_buffer_pool_size=1250M
innodb_log_file_size=10M
innodb_thread_concurrency=8
max_connections=1500
table_cache=1024
net_read_timeout=30
net_write_timeout=30
back_log=128
| スレッド数 | MyISAM | InnoDB |
おかしいです。
MyISAMの性能限界が見えないような感じになってしまいました。
それはいくらなんでもあり得ないので、調べてみたら、計測ツール側でコネクションのエラーが発生していました。
コネクションのエラーの発生はthread_cache_sizeの値と関係するようです。
thread_cache_sizeを64,256,1024と変えて計測してみました。
| スレッド数 | 64 | 256 | 1024 |
thread_cache_sizeを大きくすると、破綻するポイントがずれていきますが、512同時スレッドあたりになると、やはり今回のサーバでは無理なようです。
128同時スレッドあたりまでは、なんとかいけそうなのでそこまでを対象にすることにします。
あらためてInnoDBとMyISAMを比較しました。
初期化パラメータは以下に変更しました。
thread_cache_size = 1024
innodb_thread_concurrency=8
※innodb_thread_concurrencyの設定値についてはこちら。
| スレッド数 | MyISAM | InnoDB |
同時スレッド4あたりのピーク部分ではInnoDBのほうが数%速いようです。
また、同時スレッドを上げていった時の性能下降の度合いは、MyISAMの方が低いようです。
ただし、このあたりはかなり微妙な違いなので、サーバのCPU性能・ディスク性能の状況によって違いが出てくると思います。
ということで、
PrimaryKeyによるランダムアクセスではInnoDBとMyISAMのパフォーマンスはほぼ同じ
というのがこの場合の結論になるかと思います。
ということで、次回から、いろいろなSQLパターンでの比較検証に入りたいと思います。
続きます。







