mysql/チューニング
Last-modified: 2010-03-04 (木) 12:43:14 (6d)
パフォーマンスチューニングのメモ †
チューニング †
サーバーの詳細情報を表示 †
mysql> SHOW STATUS;
パラメータの表示 †
mysql> SHOW VARIABLES;
mysql設定ファイルの位置 †
- /etc/my.cnf
サーバーの文字コードの設定 †
my.cnfに下記のように設定 [mysqld] default-character-set=utf8
クライアント文字コードの設定 †
my.cnfに下記のように設定 クライアント側の設定に応じた値が使用される [mysqld] default-character-set=utf8 skip-character-set-client-handshake
テーブルのインデックス分布を解析する †
mysql> ANALYZE TABLE テーブル名 実行するとテーブルの統計情報が更新される。
パフォーマンスに関連する値 †
- max_connections
- mysqlサーバーに接続する最大接続数を設定
- thread_cache_size
- mysqlスレッドをどれだけキャッシュしておくか設定
- key_buffer_size
- インデックスをメモリ上に保持するためのメモリサイズ
- query_cache_size
- sqlクエリ結果を保持するキャッシュの数を設定。同じ参照が多い時、パフォーマンス向上が期待できる
- query_cache_type
- query_cacheの種類を設定する
- 0
- キャッシュを使用しない
- 1
- 問合せ内容はキャッシュしないが、問合せ結果はキャッシュする
- 2
- 問合せ内容だけをキャッシュする
ステータスを初期化する †
mysql> FLUSH STATUS;
実行中のスレッドを確認する †
mysql> SHOW PROCESSLIST;
SQLの注意点 †
- CURRENT_DATEとか現在日時を取得する関数は使わない。
CURRENT_DATEとかNOWとかその都度値が変わるようなものがクエリー内にあった場合、クエリーキャッシュに入らない。 なので、クエリ文生成側で準備したほうがいい。
- インデックスのkey_lenに注意。
速度を上げる為にインデックスを使っていても、key_lenが長いとやや遅くなるらしい。 インデックス対象のフィールドのデータ長は短く。
joinするテーブルのカラムの型を合わせる †
当たり前のことだが、重要。 型が違うと、結合の際に型のキャストが発生し、インデックスが利用されなくなる