SQLクエリーの最適化

1285 ワード

パフォーマンスに問題のあるSQLの入手方法
  • パフォーマンスに問題があるSQL
  • をユーザフィードバックで取得
  • パフォーマンスに問題があるSQL
  • をスロー・ログで取得
  • パフォーマンスに問題があるSQL
  • をリアルタイムで取得
    スロー・クエリー・ログ
    mysqldumpslowスロークエリーログ分析mysqldumpslow -s r -t 10 slow-mysql.log
  • -s order(c t l r at al ar)c総回数t総時間lロック時間r総データラインバンドaは平均数
  • を表す.
  • -tは、終了出力
  • として上位を指定する.
    pt-query-digestスロークエリーログ分析
    パフォーマンスの問題をリアルタイムで取得するSQL
    infomation_scheme -> processlist
    MySqlクエリープロセスの理解
  • クライアントは、SQL要求をサーバ
  • に送信する
  • サーバクエリキャッシュでSQL
  • にヒットできるかどうかを確認します.
  • サーバ側はSQL解析、前処理を行い、さらにオプティマイザによって対応する実行計画
  • を生成する.
  • 実行計画に従って、ストレージエンジンAPIを呼び出してデータ
  • を照会する
  • は、結果をクライアント
  • に返す.
    頻繁に読み書きされるSQLはクエリキャッシュquery_を使用しませんcache_typeクエリーキャッシュが使用可能かどうかを設定query_cache_sizeクエリーキャッシュメモリサイズの設定
    query_cache_limitキャッシュに格納可能な最大値の設定
    クエリキャッシュを使用しないクエリ文にSQL_を追加NO_CACHE
    大きなテーブルのデータ修正はバッチ処理が望ましい
    大きなテーブル構造の変更
    表の列のフィールドタイプまたは長さを変更します.
  • プライマリスレーブサーバサーバサーバがサーバから変更されてプライマリサーバ
  • に再同期する.
  • メインサーバに新しいテーブルの古いテーブルにトリガを追加し、最後に排他ロックを追加し、最後に古いテーブル
  • を削除します.
  • pt-online-schema-changeを使用して大きなテーブルのテーブル構造を変更する
  • pt-online-schema-change \
    --alter="MODIFY c VARCHAR(150) NOT NULL DEFAULT ''"\
    --USER=ROOT --password=PassWord D=database, t=sbtest4\
    --charset=utf8 --execute