文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美國信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


29.12.6.4 prepared_statements_instances 資料表

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 PREPAREDROP 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_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 社群版伺服器、MySQL 企業版伺服器(內部部署)和沒有 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_IDOWNER_EVENT_ID) 為索引

  • 以 (OWNER_OBJECT_TYPEOWNER_OBJECT_SCHEMAOWNER_OBJECT_NAME) 為索引

TRUNCATE TABLE 會重設 prepared_statements_instances 資料表的統計資料欄位。