StackOverflowでナイスな回答を見つけた。
以下、自分用メモとして要点をピックアップ。
http://dba.stackexchange.com/questions/27328/how-large-should-be-mysql-innodb-buffer-pool-size
InnoDBの最適なバッファプールサイズを予想するには、まずこのSQLを実行する。
SELECT Ceiling(total_innodb_bytes * 1.6 / Power(1024, 3)) RIBPS FROM (SELECT Sum(data_length + index_length) Total_InnoDB_Bytes FROM information_schema.tables WHERE engine = 'InnoDB') A;
これは、現時点でInnoDBが使っているメモリの総量を1.6倍した数値。(GB単位)
次に、しばらく経ってから以下のSQLを実行する。
SELECT ( pagesdata * pagesize ) / Power(1024, 3) DataGB FROM (SELECT variable_value PagesData FROM information_schema.global_status WHERE variable_name = 'Innodb_buffer_pool_pages_data') A, (SELECT variable_value PageSize FROM information_schema.global_status WHERE variable_name = 'Innodb_page_size') B;
これは、InnoDBのデータがどれだけバッファプールに乗っているかを計算した数値。(GB単位)
バッファプールを目一杯使っていなければメモリは足りていることになる。
微調整を繰り返したのち、最終的には、このSQLが示す推奨サイズを設定することでチューニングが完了する。
SELECT CONCAT(CEILING(RIBPS/POWER(1024,pw)),SUBSTR(' KMGT',pw+1,1)) Recommended_InnoDB_Buffer_Pool_Size FROM ( SELECT RIBPS,FLOOR(LOG(RIBPS)/LOG(1024)) pw FROM ( SELECT SUM(data_length+index_length)*1.1*growth RIBPS FROM information_schema.tables AAA, (SELECT 1.25 growth) BBB WHERE ENGINE='InnoDB' ) AA ) A;