スロクエリログは,実行に要した時間がlong_query_time
秒を超え,少なくともmin_examined_row_limit
行を検査する必要があったSQLステトメントで構成されます。long_query_time
の最小値およびデフォルト値は,それぞれ0および10です。値はマ邮箱クロ秒の精度まで指定できます。ファereplicationルへのロギングの場合,時間はマereplicationクロ秒の部分も含めて書き込まれます。テブルへのロギングの場合,時間の整数部のみ書き込まれ,マ。
デフォルトでは,管理ステートメントはログに記録されず,参照にインデックスを使用しないクエリーも記録されません。あとで説明するように,この動作はlog_slow_admin_statements
およびlog_queries_not_using_indexes
を使用して変更することができます。
初期ロックを取得する時間は実行時間として計算されません。mysqldがスロークエリーログにステートメントを書き込むのは,ステートメントが実行されて,すべてのロックが解放されたあとであるため,ログの順序が実行順と異なる場合があります。
デフォルトでは,スロクエリログは無効になっています。初期のスロクエリログ状態を明示的に指定するには,——slow_query_log [= {0 | 1}]
を使用します。引数を指定しないか,引数が1の場合,——slow_query_log
によってログが有効になります。引数が0の場合,このオプションによってログが無効になります。ログファル名を指定するには,——slow_query_log_file =
を使用します。ログの出力先を指定するには,(セクション5.2.1 "一般クエリログおよびスロクエリログの出力先の選択"で説明されている)file_name
——日志输出
を使用します。
スロクエリログファルの名前を指定しない場合,デフォルト名は
です。サーバーは,別のディレクトリを指定する絶対パス名が指定されないかぎり,データディレクトリ内にファイルを作成します。host_name
-slow.log
実行時にスロークエリーログを無効化または有効化したり,ログファイル名を変更したりするには,グローバルなslow_query_log
およびslow_query_log_file
システム変数を使用します。slow_query_log
を0(または从
)にすると,ログが無効化し,1(または在
で有効化します。ログファルの名前を指定するには,slow_query_log_file
を指定します。ログファereplicationルがすでに開いている場合,ログファereplicationルが閉じて新しいファereplicationルが開きます。
スロクエリログが有効な場合,サバは——日志输出
オプションまたはlog_output
システム変数によって指定されたあらゆる出力先に出力を書き込みます。ログを有効にすると,サ。ただし,文件
ログの出力先が選択されないかぎり、ファ。出力先が没有一个
の場合,スロクエリ。ログ出力先の値に文件
が含まれていない場合、ログファ以及ル名を設定してもロギングへの影響はありません。
——log-short-format
オプションを使用する場合,サーバーによってスロークエリーログ(およびバイナリログ)に書き込まれる情報が少なくなります。
スロクエリログに書き込まれるステトメントに低速の管理ステトメントを含めるには,log_slow_admin_statements
システム変数を使用します。管理ステトメントには,ALTER TABLE
、分析表
、检查表
、创建索引
、指数下降
、优化表
,および修理表
が含まれます。
スロークエリーログに書き込まれるステートメントに,行参照についてインデックスを使用しないクエリーを含めるには,log_queries_not_using_indexes
システム変数を有効にします。そのようなクエリがログに記録されると,スロログが急速に増大することがあります。log_throttle_queries_not_using_indexes
システム変数を設定することによって,これらのクエリに速度制限を課すことが可能です。デフォルトでは,この変数は0で,制限がないことを意味します。正の値を指定すると、ンデックスを使用しないクエリ。そのような最初のクエリーによって60秒間のウィンドウが開き,その期間内でサーバーはクエリーを所定の制限までログに記録し,そのあと,追加のクエリーを抑制します。ウィンドウが終了したときに抑制されたクエリーが存在する場合,サーバーはクエリーが存在した数と,それらに要した集計時間とを示すサマリーをログに記録します。インデックスを使用しない次のクエリーをサーバーがログに記録するとき,別の60秒間のウィンドウが開始されます。
サーバーは,スロークエリーログにクエリーを書き込むかどうかを判断するために,制御パラメータを次の順序で使用します。
クエリは管理ステトメントでないか,
log_slow_admin_statements
が有効になっている必要がある。クエリに少なくとも
long_query_time
秒かかっているか,log_queries_not_using_indexes
が有効であって,クエリンデックスを使用していない。クエリは少なくとも
min_examined_row_limit
行を検査している必要がある。クエリは,
log_throttle_queries_not_using_indexes
設定によって抑制されていてはならない。
サーバーは,クエリーキャッシュによって処理されるクエリーをスロークエリーログに書き込まず,テーブルに0行または1行しかないことからインデックスがあることのメリットがないようなクエリーもスロークエリーログに書き込みません。
デフォルトでは,レプリケーションスレーブはレプリケーションされたクエリーをスロークエリーログに書き込みません。これを変更するには,log_slow_slave_statements
システム変数を使用します。
MySQL 5.6.3以降では,スロークエリーログに書き込まれるステートメントのパスワードはサーバーによって書き換えられ,文字どおりに平文で表示されることはありません。MySQL 5.6.3より前では,ステートメント内のパスワードは書き換えされないため,スロークエリーログを保護するようにしてください。セクション6.1.2.3 "パスワドおよびロギング"を参照してください。
スロークエリーログは,実行に長い時間がかかっているため最適化の候補となるクエリーを見つけるために使用できます。ただし,長いスロクエリ,ログを調査することは,難しいタスクになる場合があります。これを簡単にするために,mysqldumpslowコマンドを使用してスロークエリーログファイルを処理し,ログに表示されるクエリーを要約することができます。セクション4.6.9 "mysqldumpslow—スロクエリログファルの要約”を参照してください。