SQLクエリーの最適化
1285 ワード
パフォーマンスに問題のあるSQLの入手方法パフォーマンスに問題があるSQL をユーザフィードバックで取得パフォーマンスに問題があるSQL をスロー・ログで取得パフォーマンスに問題があるSQL をリアルタイムで取得
スロー・クエリー・ログ
mysqldumpslowスロークエリーログ分析-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を使用して大きなテーブルのテーブル構造を変更する
スロー・クエリー・ログ
mysqldumpslowスロークエリーログ分析
mysqldumpslow -s r -t 10 slow-mysql.log
pt-query-digestスロークエリーログ分析
パフォーマンスの問題をリアルタイムで取得するSQL
infomation_scheme -> processlist
MySqlクエリープロセスの理解
頻繁に読み書きされるSQLはクエリキャッシュquery_を使用しませんcache_typeクエリーキャッシュが使用可能かどうかを設定query_cache_sizeクエリーキャッシュメモリサイズの設定
query_cache_limitキャッシュに格納可能な最大値の設定
クエリキャッシュを使用しないクエリ文にSQL_を追加NO_CACHE
大きなテーブルのデータ修正はバッチ処理が望ましい
大きなテーブル構造の変更
表の列のフィールドタイプまたは長さを変更します.
pt-online-schema-change \
--alter="MODIFY c VARCHAR(150) NOT NULL DEFAULT ''"\
--USER=ROOT --password=PassWord D=database, t=sbtest4\
--charset=utf8 --execute