Tuning (frozen)

クエリが効率的でない例:
  • データベース設計(スキーマ)が悪い
  • 問合せのしかたが悪い
  • インデックスが効いていない
  • 最適な実行計画が選択されていない
  • ロックの競合
リレーショナルモデルの流儀に従っていない。

スロークエリのログについては RDS の方にも書いた。コマンドでは、mysqldumpslow で解析。

オープンソース - [MySQLウォッチ]第8回 MySQLチューニングのテクニック:ITpro: スロークエリログの内容。Rows_examined が多く、Rows_sent が少ないと、インデックスが適切でなく、シーケンシャルぎみに読んでいるかも知れない。

EXPLAIN (EXPLAIN EXTENDED) の詳細については以下のような:
MySQL の EXPLAIN 出力はテーブルに着目していて、フラット。ツリー状ではなく、順序は見ていない。 「type」で、テーブルをどう見ていて、「rows」で、統計情報上はどれくらい無駄なく見られているかを確認できれば、とりあえず OK か。

じゃ、どうすれば?:
  • サブクエリを JOIN に
  • インデックスを追加
  • ヒント指示
  • テーブル設計変更
  • テンポラリテーブルでのクエリ分割・シンプルに
  • BLOB/TEXT → VARCHAR の検討
スケールアップも、ボトルネックを突き止めてから。
  • 実測値に基づく検討
  • 過去観測値との比較

Comments