MySQL パフォーマンスチューニング on MySQL Weekly Seminor 2008/06/27
業務で参加ですが,ひとまずログ記録.こんかいから howm でもはてな記法で書いたのでコピペが楽です(ノ∀`).
パフォーマンスとは?
- パフォーマンスの指標
- スループット
- レスポンスタイム・レイテンシ
- スケーラビリティ
- 上記のコンビネーション
- CPU やサーバ環境によって変わるのか,など
- 指標は平均値だけでみるのではなく,ばらつきを調べるのも重要
- キューイング
- 実行時間 : Key to the hotspot
- 確認時間
- ネットワーク, CPU, I/O, ロック待ち, ....
- 原因を見極めないと,高速化に繋がらない可能性がある
- ネットワーク, CPU, I/O, ロック待ち, ....
- 計測方法は?
- 1ページあたりのクエリ実行時間の合計
- 確認時間
- ベンチマークテスト
- ビジネス面からの考慮
- コストパフォーマンスを調べる
- パフォーマンス・スケーラビリティ・信頼性は本当に必要か?
- 常に全体像を把握しておく.
- 部分的に改善しても,その他にボトルネックがある可能性がある.
- どのチューニングが効果的かを判断しながら
パフォーマンスチューニングTIPS
MySQLサーバの設定
- 様々なストレージエンジンの設定
- それ以前の処理は,どれも同じ
- サーバのコネクション&スレッド
- max_connections : default 100
- サーバが許容可能なコネクション
- 大きくしすぎるとメモリを使い切るかも
- thread_cache_size : default 8
- 一般的には max_connections / 3
- connectoin pool を使うのなら,多くなくても大丈夫
- 一般的には max_connections / 3
- 調べるには
- show status like 'Thr%'
- Thread_created が大きいと接続・切断を繰り返している
- thread_cache_size を大きくする
- max_connections : default 100
- コネクションスレッド毎のバッファ
- クエリキャッシュ
- SQl が厳密に同じであれば,キャッシュされる
- 完全に同じである必要がある
- SELECT の比率が高い環境で効果的
- 調べるには
- show status like 'Qc%'
- Qcache_hits : ヒット率をしらべて有効かどうか
- Qcache_lowmem_pruned : キャッシュが削除された回数なので,ここが大きければキャッシュサイズを増やす
- show status like 'Qc%'
- SQl が厳密に同じであれば,キャッシュされる
ストレージエンジンの選択&設定
スキーマ&クエリのチューニング
- スキーマのデザイン
- 正規化と非正規化
- JOIN はわりとコストが高い
- 適切なデータ型か
- ディスクの領域が小さいと,I/O が小さくなる
- JOIN する列は同じ型に
- でなければ型変換が実行されてしまう
- 可能なところは NOT NULL
- インデックスは適切にはられているか
- 正規化と非正規化
- インデックス
- 参照時は性能向上,更新時はオーバーヘッド
- 小さなインデックスが好ましい
- カラムの一部のみを使うのも可能
- 複合キーは,先の列のみ利用可能
- ばらつきの少ないものには使わない方が良い
- 更新時のオーバーヘッドにしかならない
- key(a, b) があるなら,key(a) は削除すべき
- 検索に必要なカラムがインデックスがあるものばかりだと,検索はかなり高速
チューニングに関するコマンド&SQL
- SQLオプティマイザの制御
- STRAIGHT_JOIN
- SQL に書かれた順にテーブルを処理する
- STRAIGHT_JOIN
- チューニングに関するSQL文
- EXPLAINで解析
- OPTIMIZER がどのように実行しようとしているかの結果
- Extra にある情報が重要
- 「実際にどのようにデータを取ってきたか」ではない
- sloq query log で確認
- 一般ログでクエリの重複を調べる
- show full processlist ( full をつけないと出力が 100 byte に制限される)
- Time でかかった時間が現れる
- show status はサーバ起動時からの蓄積結果
- flush status で削除して調べることも可能
- EXPLAINで解析
ハードウェア関連のチューニング
コンサルティングサービス
- エンジニア向けパフォーマンスチューニング研修も今後開催予定
- 有償で,4日で25万強
- 1日 52.5k なんだが,それってかなり高めかな?
- 有償で,4日で25万強
MySQL User Conference Japan 2008
- 2008/10/30 〜 2008/10/31 に東京ステーションコンファレンスにて開催
- ユーザ事例・技術系セッションを予定
- セミナー終了後には,MySQL の開発者との BOF を開催
- これには是非とも参加したい.