LinodeでInnoDBチューニング(2)

概要

前回、innodb_buffer_pool_sizeをちょっと大きくしたら性能がだいぶ変わったのでmysqldの使用メモリを全体の80%になるまで、少しずつあげてみたという記事です。

試したinnodb_buffer_pool_sizeの値

240MB, 300MB, 360MBを試しました。

mysqldのプロセスは順番に約56%、約68%、約82%まで大きくなりました。
メモリサイズを大きくすると単純に高速になると思ったのですが、300MBのほうが360MBよりも速かったという結果になりました。

どうしても納得できなかったので360MBでのベンチを2回とったところ、2回目のほうが高速でした、がそれでも300MBのほうが高速でした。

以下、比較表です。専用サーバーにしない場合は160MBぐらいがいい感じかもしれません。

MySQL Benchmark Suite実行結果

Generating random keys
innodb_buffer_pool_size Time for insert (300000)
4M 126 wallclock secs ( 0.70 usr 15.02 sys + 0.00 cusr 0.00 csys = 15.72 CPU)
80M 113 wallclock secs ( 6.50 usr 9.75 sys + 0.00 cusr 0.00 csys = 16.25 CPU)
160M 115 wallclock secs ( 0.69 usr 15.01 sys + 0.00 cusr 0.00 csys = 15.70 CPU)
240M 111 wallclock secs ( 0.78 usr 15.00 sys + 0.00 cusr 0.00 csys = 15.78 CPU)
300M 106 wallclock secs ( 0.78 usr 14.79 sys + 0.00 cusr 0.00 csys = 15.57 CPU)
360M 107 wallclock secs ( 0.75 usr 15.04 sys + 0.00 cusr 0.00 csys = 15.79 CPU)
Testing insert of duplicates
innodb_buffer_pool_size Time for insert_duplicates (100000)
4M 20 wallclock secs ( 3.68 usr 1.95 sys + 0.00 cusr 0.00 csys = 5.63 CPU)
80M 16 wallclock secs ( 2.30 usr 3.38 sys + 0.00 cusr 0.00 csys = 5.68 CPU)
160M 16 wallclock secs ( 3.22 usr 2.12 sys + 0.00 cusr 0.00 csys = 5.34 CPU)
240M 15 wallclock secs ( 3.45 usr 2.07 sys + 0.00 cusr 0.00 csys = 5.52 CPU)
300M 15 wallclock secs ( 3.56 usr 1.73 sys + 0.00 cusr 0.00 csys = 5.29 CPU)
360M 15 wallclock secs ( 3.55 usr 1.75 sys + 0.00 cusr 0.00 csys = 5.30 CPU)
Test of prepared+execute/once prepared many execute selects
innodb_buffer_pool_size Time for prepared_select (100000)
4M 35 wallclock secs (11.74 usr 1.79 sys + 0.00 cusr 0.00 csys = 13.53 CPU)
80M 32 wallclock secs ( 9.81 usr 3.57 sys + 0.00 cusr 0.00 csys = 13.38 CPU)
160M 31 wallclock secs (11.23 usr 1.74 sys + 0.00 cusr 0.00 csys = 12.97 CPU)
240M 33 wallclock secs (12.09 usr 1.62 sys + 0.00 cusr 0.00 csys = 13.71 CPU)
300M 31 wallclock secs (11.72 usr 1.10 sys + 0.00 cusr 0.00 csys = 12.82 CPU)
360M 29 wallclock secs (11.47 usr 1.20 sys + 0.00 cusr 0.00 csys = 12.67 CPU)
innodb_buffer_pool_size Time for once_prepared_select (100000)
4M 31 wallclock secs ( 5.56 usr 3.25 sys + 0.00 cusr 0.00 csys = 8.81 CPU)
80M 26 wallclock secs ( 5.00 usr 3.49 sys + 0.00 cusr 0.00 csys = 8.49 CPU)
160M 26 wallclock secs ( 5.36 usr 3.25 sys + 0.00 cusr 0.00 csys = 8.61 CPU)
240M 26 wallclock secs ( 5.41 usr 3.27 sys + 0.00 cusr 0.00 csys = 8.68 CPU)
300M 25 wallclock secs ( 5.22 usr 3.09 sys + 0.00 cusr 0.00 csys = 8.31 CPU)
360M 26 wallclock secs ( 5.15 usr 3.18 sys + 0.00 cusr 0.00 csys = 8.33 CPU)
360M 26 wallclock secs ( 5.15 usr 3.18 sys + 0.00 cusr 0.00 csys = 8.33 CPU)
Retrieving data from the table
innodb_buffer_pool_size Time for select_big (10:3000000)
4M 12 wallclock secs (10.97 usr 0.00 sys + 0.00 cusr 0.00 csys = 10.97 CPU)
80M 12 wallclock secs (10.18 usr 0.25 sys + 0.00 cusr 0.00 csys = 10.43 CPU)
160M 11 wallclock secs (10.69 usr 0.00 sys + 0.00 cusr 0.00 csys = 10.69 CPU)
240M 12 wallclock secs (10.70 usr 0.00 sys + 0.00 cusr 0.00 csys = 10.70 CPU)
300M 11 wallclock secs (10.32 usr 0.00 sys + 0.00 cusr 0.00 csys = 10.32 CPU)
360M 10 wallclock secs ( 9.94 usr 0.00 sys + 0.00 cusr 0.00 csys = 9.94 CPU)
innodb_buffer_pool_size Time for order_by_big_key (10:3000000)
4M 13 wallclock secs (10.84 usr 0.00 sys + 0.00 cusr 0.00 csys = 10.84 CPU)
80M 12 wallclock secs (10.14 usr 0.28 sys + 0.00 cusr 0.00 csys = 10.42 CPU)
160M 12 wallclock secs (10.48 usr 0.00 sys + 0.00 cusr 0.00 csys = 10.48 CPU)
240M 13 wallclock secs (11.22 usr 0.00 sys + 0.00 cusr 0.00 csys = 11.22 CPU)
300M 12 wallclock secs (10.40 usr 0.00 sys + 0.00 cusr 0.00 csys = 10.40 CPU)
360M 12 wallclock secs (10.20 usr 0.00 sys + 0.00 cusr 0.00 csys = 10.20 CPU)

...(項目多すぎなので略)

Insert into table with 16 keys and with a primary key with 16 parts
innodb_buffer_pool_size Time for insert_key (100000)
4M 1410 wallclock secs ( 0.00 usr 7.80 sys + 0.00 cusr 0.00 csys = 7.80 CPU)
80M 517 wallclock secs ( 0.00 usr 7.24 sys + 0.00 cusr 0.00 csys = 7.24 CPU)
160M 357 wallclock secs ( 0.00 usr 6.81 sys + 0.00 cusr 0.00 csys = 6.81 CPU)
240M 295 wallclock secs ( 0.00 usr 6.92 sys + 0.00 cusr 0.00 csys = 6.92 CPU)
300M 273 wallclock secs ( 0.00 usr 6.75 sys + 0.00 cusr 0.00 csys = 6.75 CPU)
360M 335 wallclock secs ( 0.00 usr 6.85 sys + 0.00 cusr 0.00 csys = 6.85 CPU)
360M(2) 300 wallclock secs ( 0.00 usr 6.73 sys + 0.00 cusr 0.00 csys = 6.73 CPU)
Testing update of keys
innodb_buffer_pool_size Time for update_of_primary_key_many_keys (256)
4M 6541 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.02 CPU)
80M 2339 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.02 CPU)
160M 1179 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.02 CPU)
240M 923 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.02 CPU)
300M 861 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.02 CPU)
360M 1212 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.02 CPU)
360M(2) 937 wallclock secs ( 0.00 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.03 CPU)
Deleting everything from table
innodb_buffer_pool_size Time for delete_big_many_keys (128)
4M -
80M 1262 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.01 CPU)
160M 360 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.02 CPU)
240M 245 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.02 CPU)
300M 155 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.02 CPU)
360M 278 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.02 CPU)
360M(2) 166 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.01 CPU)
innodb_buffer_pool_size Time for delete_all_many_keys (1)
4M 4410 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.02 CPU)
80M 1262 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.01 CPU)
160M 361 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.02 CPU)
240M 246 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.02 CPU)
300M 156 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.02 CPU)
360M 279 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.02 CPU)
360M(2) 168 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.01 CPU)