このページは機械翻訳したものです。
パフォーマンススキーマはプリペアドステートメントのインストゥルメンテーションを提供しますが、次の 2 つのプロトコルがあります:
-
バイナリプロトコル。 これには MySQL C API を介してアクセスし、次のテーブルに示すように基礎となるサーバーコマンドにマップします。
C API 関数 対応するサーバーコマンド mysql_stmt_prepare()COM_STMT_PREPAREmysql_stmt_execute()COM_STMT_EXECUTEmysql_stmt_close()COM_STMT_CLOSE -
テキストプロトコル。 これには SQL ステートメントを使用してアクセスし、次のテーブルに示すように基礎となるサーバーコマンドにマップします。
SQL ステートメント 対応するサーバーコマンド PREPARESQLCOM_PREPAREEXECUTESQLCOM_EXECUTEDEALLOCATE PREPARE,DROP PREPARESQLCOM_DEALLOCATE PREPARE
パフォーマンススキーマプリペアドステートメントインストゥルメンテーションは、両方のプロトコルに対応しています。 次の説明では、C API 関数または SQL ステートメントではなくサーバーコマンドについて説明します。
プリペアドステートメントに関する情報は、prepared_statements_instances テーブルにあります。 このテーブルは、サーバーで使用されるプリペアドステートメントの検査を有効にし、それらに関する集計された統計を提供します。 このテーブルのサイズを制御するには、サーバーの起動時に performance_schema_max_prepared_statements_instances システム変数を設定します。
プリペアドステートメント情報の収集は、次のテーブルに示すステートメントインストゥルメントによって異なります。 これらのインストゥルメントはデフォルトで有効になっています。 これらを変更するには、setup_instruments テーブルを更新します。
| 金融商品 | サーバーコマンド |
|---|---|
statement/com/Prepare |
COM_STMT_PREPARE |
statement/com/Execute |
COM_STMT_EXECUTE |
statement/sql/prepare_sql |
SQLCOM_PREPARE |
statement/sql/execute_sql |
SQLCOM_EXECUTE |
パフォーマンススキーマは、prepared_statements_instances テーブルの内容を次のように管理します:
-
ステートメントの準備
COM_STMT_PREPAREまたはSQLCOM_PREPAREコマンドは、サーバーにプリペアドステートメントを作成します。 ステートメントが正常にインスツルメント処理されると、新しい行がprepared_statements_instancesテーブルに追加されます。 ステートメントを計測できない場合は、Performance_schema_prepared_statements_lostステータス変数が増分されます。 -
プリペアドステートメントの実行
インスツルメント処理されたプリペアドステートメントインスタンスに対して
COM_STMT_EXECUTEまたはSQLCOM_PREPAREコマンドを実行すると、対応するprepared_statements_instancesテーブルの行が更新されます。 -
プリペアドステートメントの割当て解除
インスツルメント処理されたプリペアドステートメントインスタンスに対して
COM_STMT_CLOSEまたはSQLCOM_DEALLOCATE_PREPAREコマンドを実行すると、対応するprepared_statements_instancesテーブルの行が削除されます。 リソースリークを回避するために、前述のプリペアドステートメントインストゥルメントが無効になっていても、削除が行われます。
prepared_statements_instances テーブルには、次のカラムがあります:
-
OBJECT_INSTANCE_BEGINインストゥルメントされたプリペアドステートメントのメモリー内のアドレス。
-
STATEMENT_IDサーバーによって割り当てられた内部ステートメント ID。 テキストプロトコルとバイナリプロトコルはどちらもステートメント ID を使用します。
-
STATEMENT_NAMEバイナリプロトコルの場合、このカラムは
NULLです。 テキストプロトコルの場合、このカラムはユーザーによって割り当てられた外部ステートメントの名前です。 たとえば、次の SQL ステートメントの場合、プリペアドステートメントの名前はstmtです:PREPARE stmt FROM 'SELECT 1'; -
SQL_TEXT?プレースホルダマーカーを使用したプリペアドステートメントのテキスト。 -
OWNER_THREAD_ID,OWNER_EVENT_IDこれらのカラムは、プリペアドステートメントを作成したイベントを示します。
-
OWNER_OBJECT_TYPE,OWNER_OBJECT_SCHEMA,OWNER_OBJECT_NAMEクライアントセッションによって作成されたプリペアドステートメントの場合、これらのカラムは
NULLです。 ストアドプログラムによって作成されたプリペアドステートメントの場合、これらのカラムはストアドプログラムを指します。 一般的なユーザーエラーは、プリペアドステートメントの割当て解除を忘れたことです。 これらのカラムを使用すると、プリペアドステートメントをリークするストアドプログラムを見つけることができます:SELECT OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME, STATEMENT_NAME, SQL_TEXT FROM performance_schema.prepared_statements_instances WHERE OWNER_OBJECT_TYPE IS NOT NULL; -
TIMER_PREPAREステートメントの準備自体の実行に要した時間。
-
COUNT_REPREPAREステートメントが内部的に再準備された回数 (セクション8.10.3「プリペアドステートメントおよびストアドプログラムのキャッシュ」 を参照)。 再準備のタイミング統計は、個別の操作としてではなくステートメントの実行の一部としてカウントされるため、使用できません。
-
COUNT_EXECUTE,SUM_TIMER_EXECUTE,MIN_TIMER_EXECUTE,AVG_TIMER_EXECUTE,MAX_TIMER_EXECUTEプリペアドステートメントの実行の集計統計。
-
SUM_xxx残りの
SUM_カラムは、ステートメントサマリーテーブルと同じです (セクション27.12.18.3「ステートメントサマリーテーブル」 を参照)。xxx
prepared_statements_instances テーブルには次のインデックスがあります:
主キー (
OBJECT_INSTANCE_BEGIN)(
STATEMENT_ID) のインデックス(
STATEMENT_NAME) のインデックス(
OWNER_THREAD_ID、OWNER_EVENT_ID) のインデックス(
OWNER_OBJECT_TYPE,OWNER_OBJECT_SCHEMA,OWNER_OBJECT_NAME) のインデックス
TRUNCATE TABLE により、prepared_statements_instances テーブルの統計カラムがリセットされます。