MySQL 5.6.3現在,パフォーマンススキーマはステートメント実行をインストゥルメントします。ステ。待機イベントはステージイベント内にネストし,ステージイベントはステートメントイベント内にネストします。
これらのテブルはステトメントベントを格納します。
events_statements_current
:現在のステトメントevents_statements_history
:各スレッドの最新のステトメントevents_statements_history_long
:全体の最新のステトメント
次のセクションでそれらのテブルにいて説明します。ステトメント。セクション22.9.9.3 "ステトメントサマリテブル"を参照してください。
ステトメント
ステ。
setup_instruments
テブルには,声明
で始まる名前を持ンストゥルメントが格納されます。これらの邮箱ンストゥルメントはデフォルトで有効にされています。
SELECT * FROM setup_instruments WHERE NAME LIKE 'statement/%';+---------------------------------------------+---------+-------+ | 名字| |定时启用 | +---------------------------------------------+---------+-------+ | 声明/ sql /选择|是的| | |声明/ sql / create_table |是的| | |声明/ sql / create_index |是的| |…| statement/sp/stmt | YES | YES | | statement/sp/set | YES | YES | | statement/sp/set_trigger_field | YES | YES | b| statement/scheduler/event | YES | YES | | statement/com/Sleep | YES | YES | | statement/com/Quit | YES | YES | | statement/com/Init DB | YES | YES |…|声明/文摘/查询|是的| | |声明/文摘/ new_packet |是的| | |声明/文摘/ relay_log | |是的 | +---------------------------------------------+---------+-------+
ステトメント启用
および时机
カラムを変更します。例:
mysql> UPDATE setup_instruments SET ENABLED = 'NO' -> WHERE NAME LIKE 'statement/com/%';
setup_consumers
テーブルには現在および最近のステートメントイベントテーブル名に対応する名前を持つコンシューマ値とステートメントダイジェストコンシューマが格納されます。これらのコンシューマはステートメントイベントのコレクションとステートメントダイジェストをフィルタ処理するために使用できます。events_statements_current
とstatements_digest
のみがデフォルトで有効にされています。
mysql> SELECT * FROM setup_consumers WHERE NAME LIKE '%statements%';+--------------------------------+---------+ | 启用名字| | +--------------------------------+---------+ | 没有events_statements_current |是| | events_statements_history | | | events_statements_history_long没有| | | statements_digest |是的 | +--------------------------------+---------+
すべてのステトメントコンシュマを有効にするには,次を実行します。
mysql> UPDATE setup_consumers SET ENABLED = 'YES' -> WHERE NAME LIKE '%statements%';
setup_timer
テブルには,ステ声明
の的名字
値のある行が格納されます。デフォルトの単位は纳秒
です。
SELECT * FROM setup_timers WHERE NAME = 'statement';+-----------+------------+ | 名字| TIMER_NAME | +-----------+------------+ | 声明|纳秒 | +-----------+------------+
タミングの単位を変更するには,TIMER_NAME
値を変更します。
mysql> UPDATE setup_timers SET TIMER_NAME = 'MICROSECOND' -> WHERE NAME = 'statement';
帐号ベント収集の構成に関する追加情報に帐号いては,セクション22.2 "パフォマンススキマ構成"を参照してください。
ステトメントモニタリング
ステートメントのモニタリングは,サーバーがスレッドに対してアクティビティーがリクエストされていることを確認した時点から,すべてのアクティビティーが終了した時点までに開始されます。一般に,これはサーバーがクライアントから最初のパケットを受け取ったときから,サーバーが応答の送信を終了したときまでを意味します。モニタリングは,トップレベルステトメントに対してのみ行われます。ストアドプログラムとサブクエリ内のステトメントは別々に見られません。
パフォーマンススキーマがリクエスト(サーバーコマンドまたはSQLステートメント)をインストゥルメントする場合,最終的なインストゥルメント名に到達するまで,より一般的(または「抽象的」)から,より具体的へと段階を追って進む电子书ンストゥルメント名を使用します。
最終SQLステ。
サバコマンドは
mysql_com.h
ヘッダファルに定義され,sql / sql_parse.cc
で処理されるCOM_
に対応します。例はxxx
代码COM_PING
とCOM_QUIT
です。コマンドのンストゥルメントは,声明/ com/Ping
や声明/ com/Quit
などの声明/ com
から始まる名前を持ます。SQLステトメントは
删除从t1
またはSELECT * FROM t2
などのテキストとして表されます。SQLステトメントのンストゥルメントは,声明/ sql /删除
や声明/ sql /选择
などの声明/ sql
から始まる名前を持ます。
いく。
声明/ com/Error
は帯域外のサバによって受信されたメッセジから構成されます。これはサバが理解しないクラアントによって送信されたコマンドを検出するために使用できます。これは,構成が誤っているか,サーバーよりも新しいMySQLのバージョンを使用しているクライアントや,サーバーへの攻撃を試みているクライアントの識別などの目的で役に立つことがあります。声明/ sql /错误
は解析に失敗したSQLステトメントから構成されます。これはクラ邮箱アントによって送信された不正な形式のクエリ邮箱を検出するために使用できます。解析に失敗するクエリは,解析するが,実行中のエラと異なります。たとえば,SELECT * FROM
は不正な形式で,声明/ sql /错误
ンストゥルメントが使用されます。対照的にSELECT *
は解析しますが,“表が指定されていません”
エラを伴って失敗します。この場合,声明/ sql /选择
が使用され,ステ。
リクエストはこれらの任意のソスから取得できます。
リクエストをパケットとして送信するクラ邮箱アントからのコマンドまたはステ邮箱トメントリクエストとして
レプリケーションスレーブ上のリレーログから読み取られたステートメント文字列として(MySQL 5.6.13以降)
リクエストの詳細は最初は不明で,パフォーマンススキーマはリクエストのソースに依存する順序で,抽象から特定のインストゥルメント名に進みます。
クラ邮箱アントから受信したリクエストの場合:
サバがソケットレベルで新しいパケットを検出すると,新しいステトメントが
声明/文摘/ new_packet
の抽象邮箱ンストゥルメント名で開始されます。サーバーはパケット番号を読み取ると,受信したリクエストの種類について詳しく知り,パフォーマンススキーマがインストゥルメント名を絞り込みます。たとえば,リクエストが
COM_PING
パケットの場合,ンストゥルメント名は声明/ com/Ping
になり,それが最終名になります。リクエストがCOM_QUERY
パケットの場合,それはSQLステートメントに対応するが,特定のステートメントの種類ではないことがわかります。この場合,ンストゥルメントはある抽象名から,やや具体的だが,まだ抽象名である声明/文摘/查询
に変更され,リクエストはさらに分類する必要があります。リクエストがステトメントである場合,ステトメントテキストが読み取られ,パに提供されます。解析後,正確なステトメントの種類が認識されます。リクエストがたとえば
插入
ステトメントの場合,パフォンストゥルメント名を声明/文摘/查询
から最終名である声明/ sql /插入
に絞り込みます。
レプリケションスレブ上のリレログからステトメントとして読み取られるリクエストの場合:
リレログ内のステトメントはテキストとして保存され,そのように読み取られます。ネットワクプロトコルはないため,
声明/文摘/ new_packet
ンストゥルメントは使用されません。代わりに、初期以及ンストゥルメントは声明/文摘/ relay_log
になります。ステトメントが解析されると,正確なステトメントの種類が認識されます。リクエストがたとえば
插入
ステトメントの場合,パフォンストゥルメント名を声明/文摘/查询
から最終名である声明/ sql /插入
に絞り込みます。
先述の説明はステトメントベスのレプリケションにのみ適用されます。行ベースのレプリケーションでは,行の変更を処理しながら,スレーブで実行されるテーブルI / Oをインストゥルメントできますが,リレーログ内の行イベントは,個別のステートメントとして表示されません。
ステトメントに対して収集される統計の場合,各ステトメントの種類に使用される最終声明/ sql / *
ンストゥルメントを有効にするだけでは十分ではありません。抽象声明抽象/ * /
ンストゥルメントも有効にする必要があります。すべてのステートメントインストゥルメントがデフォルトで有効にされるため,これは通常問題にならないはずです。ただし,ステートメントインストゥルメントを選択して有効または無効にするアプリケーションは,抽象インストゥルメントを無効にすると,個々のステートメントインストゥルメントの統計収集も無効になることを考慮する必要があります。たとえば,插入
ステトメントの統計を収集するには,声明/ sql /插入
を有効にする必要がありますが,声明/文摘/ new_packet
と声明/文摘/查询
も有効にする必要があります。同様に,レプリケ,トされたステ,トメントを,声明/文摘/ relay_log
が有効にされている必要があります。
ステトメントが最終ステトメント名として抽象ンストゥルメントに分類されることはないため,声明/文摘/查询
などの抽象邮箱ンストゥルメントに対して統計は集計されません。
先述の説明の抽象インストゥルメント名はMySQL 5.6.15現在です.5.6より前では,それらの名前が決定されるまでに,いくらかの名前の変更がありました。
MySQL 5.6.14では
声明/文摘/ new_packet
は声明/ com/
で,MySQL 5.6.13では声明/ com/new_packet
で,それ以前は声明/ com/
でした。MySQL 5.6.15より前では,
声明/文摘/查询
は声明/ com/Query
でした。MySQL 5.6.13から5.6.14では
声明/文摘/ relay_log
は声明/ rpl / relay_log
で,それより前は存在していませんでした。