MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
パフォーマンススキーマはプリペアドステートメントのインストゥルメンテーションを提供しますが、次の 2 つのプロトコルがあります:
バイナリプロトコル。 これには MySQL C API を介してアクセスし、次のテーブルに示すように基礎となるサーバーコマンドにマップします。
C API 関数 | 対応するサーバーコマンド |
---|---|
mysql_stmt_prepare() |
COM_STMT_PREPARE |
mysql_stmt_execute() |
COM_STMT_EXECUTE |
mysql_stmt_close() |
COM_STMT_CLOSE |
テキストプロトコル。 これには SQL ステートメントを使用してアクセスし、次のテーブルに示すように基礎となるサーバーコマンドにマップします。
SQL ステートメント | 対応するサーバーコマンド |
---|---|
PREPARE |
SQLCOM_PREPARE |
EXECUTE |
SQLCOM_EXECUTE |
DEALLOCATE PREPARE , DROP PREPARE |
SQLCOM_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
テーブルの統計カラムがリセットされます。