WordPressで使用するMysqlのチューニング

Mysqlの速さは基本的に

・クエリの負荷

・ディスクの速さ(SSD)

が大きな要因となります。

MySQLの主なストレージエンジンといえばMyISAMとInnoDBだが、データやインデックスのキャッシュの仕組みには、

  • InnoDB :
    インデックス、データともMySQLがキャッシュ管理
    (innodb_buffer_pool_sizeで設定)
  • MyISAM : インデックスはMySQLがキャッシュ管理
    (key_buffer_sizeで大きさを設定)。
    データはOSのキャッシュ機構におまかせ

InnoDB の場合は大きな innodb_buffer_pool_size を設定してやれば、インデックスかデータかに関わらずメモリ上にキャッシュされて高速化が図れます。

innodb_buffer_pool_size
専用サーバの場合物理メモリの80%も可能といわれています。

MySQL 5.1 リファレンスマニュアル 13.5.4. InnoDB 起動オプションとシステム変数

MyISAMの場合、key_buffer_size を大きくしてもインデックスしかキャッシュされない。OSがデータ部分をキャッシュするメモリ(つまりMySQLに割り当ててないメモリ)もある程度確保が必要です。

一般的には、マシンのメモリ使用率 25 % の値であることが好ましいといわれています。

MySQL 5.1 リファレンスマニュアル 4.2.3. システム変数

スポンサーリンク

Mysqlの設定項目

Key Buffer

Key bufferはテーブルのインデックスを保持します。経験則としてシステムメモリの1/4を割り当てるのが良いとされています。検索につかわれるものです。

Query Cache

後から書き込みなどによって無効になるまでクエリの結果をメモリに保持することによって劇的にパフォーマンスを向上させるのです。

query_cache_limit

1回のクエリについてキャッシュすることが出来る最大値を指定します。この値を大きくし過ぎると小さいクエリをキャッシュし難くなります。

小さくし過ぎると大きなクエリは全くキャッシュされなくなり、小さなクエリでキャッシュが一杯になるでしょう。

【一般的な値】
使用するSQLクエリやヒット率によって性能はかわります。
※最低40kBは設定する
※デフォルトは0であり、0はクエリキャッシュを無効化する。

max_allowed_packet
入力データ保持のための最大バッファサイズです。
画像など、大きなデータ挿入に使用します。
max_allowed_packet=100M

table_cache(table_open_cache)
データのキャッシュサイズです。
値を大きくすることでディスクのI/Oが減りパフォーマンスが向上します。
table_cache=222

また、table_open_cacheはバージョン5.0までtable_cacheという名前でした。バージョンによって名称が異なります。

【一般的な値】
同時接続数×N
N:結合に使用するテーブル数の最大値

sort_buffer
ソートを使用する場合のバッファサイズです。
ORDER BYやGROUP BYをクエリーに用いた場合のパフォーマンスが向上します。
sort_buffer=102M

join_buffer
多くのjoin が発行される場合はjoin_bufferを増やします。
join_buffer_size = 2621

record_buffer
値を大きくすることでインデックスを含まないクエリーの実行速度が向上。
record_buffer=10M

long_query_time
mysqladmin statusコマンドで表示されるSlow queriesにカウントされる場合のしきい値(単位は秒)を指定。
long_query_time=4

スポンサーリンク

Leave a Reply