文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
手冊頁 (TGZ) - 258.5Kb
手冊頁 (Zip) - 365.5Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


29.12.6.4 prepared_statements_instances 表格

Performance Schema 提供預存陳述式的檢測,其中有兩種協定

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_PREPARESQLCOM_PREPARE 命令會在伺服器中建立預存陳述式。如果成功檢測陳述式,則會將新列新增至 prepared_statements_instances 表格。如果無法檢測陳述式,則會遞增 Performance_schema_prepared_statements_lost 狀態變數。

  • 預存陳述式執行

    針對已檢測的預存陳述式執行個體執行 COM_STMT_EXECUTESQLCOM_PREPARE 命令,會更新對應的 prepared_statements_instances 表格列。

  • 預存陳述式取消配置

    針對已檢測的預存陳述式執行個體執行 COM_STMT_CLOSESQLCOM_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_IDOWNER_EVENT_ID

    這些欄位指示建立預備陳述式的事件。

  • OWNER_OBJECT_TYPEOWNER_OBJECT_SCHEMAOWNER_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;
  • 查詢執行引擎。值為 PRIMARYSECONDARY。用於 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_EXECUTESUM_TIMER_EXECUTEMIN_TIMER_EXECUTEAVG_TIMER_EXECUTEMAX_TIMER_EXECUTE

    預備陳述式執行的彙總統計資訊。

  • SUM_xxx

    剩餘的 SUM_xxx 欄位與陳述式摘要表格相同(請參閱章節 29.12.20.3,「陳述式摘要表格」)。

  • 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 表格的統計資訊欄位。