Performance Schema 提供預存陳述式的檢測,其中有兩種協定
二進位協定。這可透過 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
Performance Schema 預存陳述式檢測涵蓋兩種協定。以下討論指的是伺服器命令,而不是 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 |
Performance Schema 管理 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;
查詢執行引擎。值為
PRIMARY
或SECONDARY
。用於 HeatWave Service 和 HeatWave,其中PRIMARY
引擎為InnoDB
,而SECONDARY
引擎為 HeatWave (RAPID
)。對於 MySQL Community Edition Server、MySQL Enterprise Edition Server(內部部署)和沒有 HeatWave 的 HeatWave Service,值始終為PRIMARY
。TIMER_PREPARE
執行陳述式準備本身所花費的時間。
COUNT_REPREPARE
陳述式在內部重新準備的次數(請參閱章節 10.10.3,「預備陳述式和預存程式的快取」)。重新準備的計時統計資訊不可用,因為它被計為陳述式執行的一部分,而不是單獨的操作。
COUNT_EXECUTE
、SUM_TIMER_EXECUTE
、MIN_TIMER_EXECUTE
、AVG_TIMER_EXECUTE
、MAX_TIMER_EXECUTE
預備陳述式執行的彙總統計資訊。
SUM_
xxx
剩餘的
SUM_
欄位與陳述式摘要表格相同(請參閱章節 29.12.20.3,「陳述式摘要表格」)。xxx
MAX_CONTROLLED_MEMORY
報告預備陳述式在執行期間使用的最大受控記憶體量。
MAX_TOTAL_MEMORY
報告預備陳述式在執行期間使用的最大記憶體量。
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
表格的統計資訊欄位。