Mysql性能分析ツールSHOW PROFILE、SHOW STATUS

4684 ワード


前言
実際の応用では,SHOW STATUS,SHOW PROFILE,遅いクエリログのエントリをチェックする3つの方法で単一のクエリを解析する.
 
SHOW PROFILE
Mysql5.バージョン1以降で、デフォルト機能は無効になり、SET profiling=1コマンドでオンになります.
≪機能|Feature|emdw≫:サーバ上で実行されるすべての文で、消費時間と実行ステータスの変更に関するデータが測定されます.クエリーがサーバにコミットされると、このツールはプロファイル情報を一時テーブルに記録し、このテーブルには1から始まる自己増加idがあります.注意:show profileなどの文はprofilingされません.つまり、自分でProfilingは生成されません.
コマンド:show profileを開くかどうかをクエリーし、デフォルトで閉じる
SHOW VARIABLES LIKE 'profiling';

show profileを閉じる
  :SET profiling = 1;
  :SET profiling = 0;

注意:profileを停止し、profilingパラメータを設定するか、sessionが終了するとprofilingが自動的に閉じます.
クエリー構文:show profile[パラメータ[,パラメータ...]]for query [Query_ID]
すべてのメジャーのクエリープロファイル情報をクエリー
SHOW PROFILE;

クエリーIDのクエリープロファイル情報の指定
SHOW PROFILE FOR QUERY id;

クエリidのクエリを指定するcpuとblockプロファイル情報
SHOW PROFILE cpu, block io FOR QUERY id;

クエリidは2のクエリプロファイリング情報であり、最大消費時間の逆順序で並べ替えられる
set @query_id=2; 
SELECT STATE, SUM(DURATION) AS Total_R, 
-> ROUND( 
-> 100 * SUM(DURATION) / 
-> (SELECT SUM(DURATION) 
-> FROM INFORMATION_SCHEMA.PROFILING 
-> WHERE QUERY_ID = @query_id 
-> ), 2) AS Pct_R, 
-> COUNT(*) AS Calls, 
-> SUM(DURATION) / COUNT(*) AS "R/Call" 
-> FROM INFORMATION_SCHEMA.PROFILING 
-> WHERE QUERY_ID = @query_id 
-> GROUP BY STATE 
-> ORDER BY Total_R DESC; 

パラメータ情報
  • ALL:すべてのオーバーヘッド情報を表示する
  • BLOCK IO:表示ブロックIO関連オーバーヘッド
  • CONTEXT SWITSCHS:コンテキスト切替関連オーバーヘッド
  • CPU:cpu関連オーバーヘッド
  • を表示する
  • IPC:送受信関連オーバーヘッド
  • を表示する.
  • MEMORY:メモリ関連オーバーヘッドを表示
  • PAGE FAULTS:ページエラー関連オーバーヘッド情報
  • を表示する.
  • SOURCE:表示とSource_function ,Source_file,Source_line関連オーバーヘッド情報
  • SWAPS:交換回数に関するオーバーヘッド情報
  • を表示する.
  • Status:sql文実行のステータス
  • Duration:sql実行中の各ステップの所要時間
  • CPU_user:現在のユーザが占有するcpu
  • CPU_System:システム占有cpu
  • Block_ops_in:I/O入力
  • Block_ops_out:I/O出力
  • 表のStatus列で次の4つの状況が発生した場合、最適化が必要です.
  • converting HEAP to MySIAMデータが大きすぎMyISAMメモリが入らず、
  • をディスクに搬送する
  • Creating tmp tableテンポラリ・テーブル作成
  • Copy to tmp table on diskディスク
  • へのテンポラリ・テーブルのコピー
  • lockedロック、ブロック
  • SHOW STATUS
    SHOW STATUSコマンドは、いくつかのカウンタを返し、セッションレベル、サーバレベルのカウンタを返し、クエリーの回数を統計します.
    SHOW GLOBAL STATUSサーバー起動から計算開始までの問合せ回数統計を表示する
    注意:1.カウンタによって可視範囲が異なり、グローバルなカウンタもSHOW STATUSの結果に表示されます.2.SHOW STATUS自体もテンポラリテーブルを作成します.3.SHOW STATUS自体もカウンタに集計されます.これらのカウンタは、どの操作コストが高いか、または消費時間が多いかを推測することができます.最も有用なカウンタには、ハンドルカウンタ(handler counter)、ゼロタイムファイル、テーブルカウンタが含まれます.
    常用命令リセットカウンターFLUSH STATUS;
    クエリの表示時間がlong_を超えましたquery_time秒のクエリの数.show status like 'slow_queries';
    slowを超える作成時間の表示launch_time秒のスレッド数.show status like 'slow_launch_threads';
    すぐに取得できないテーブルのロックの回数を表示します.この値が高く、パフォーマンスに問題がある場合は、まずクエリーを最適化し、テーブルを分割するか、レプリケーションを使用します.show status like 'table_locks_waited';
    すぐに取得したテーブルのロックの回数を表示します.show status like 'table_locks_immediate';
    アクティブな(非スリープ状態)スレッドの数を表示します.show status like 'threads_running';
    接続を処理するために作成されたスレッドの数を表示します.もしThreads_createdは大きく、threadを増やすかもしれません.cache_size値.show status like 'threads_created';
    現在開いている接続の数を表示します.show status like 'threads_connected';
    スレッドキャッシュ内のスレッドの数を表示します.show status like 'threads_cached';
    MySQLに接続しようとする接続数show status like'connectionsを確認します.
    delete文の実行数show[global]status like'com_を表示delete';
    update文の実行数の表示
    show [global] status like 'com_update';
    Insert文の実行数の表示
    show [global] status like 'com_insert';
    select文の実行数の表示
    show [global] status like 'com_select';
    --MySQLの今回の起動後の実行時間(単位:秒)を表示
    show status like 'uptime';
    詳細パラメータ:MySQL運転状態show status中国語詳細