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 テーブルの統計カラムがリセットされます。