文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (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_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;
  • 查询执行引擎。该值为 PRIMARYSECONDARY。对于 HeatWave 服务和 HeatWave,PRIMARY 引擎为 InnoDBSECONDARY 引擎为 HeatWave (RAPID)。对于 MySQL Community Edition Server、MySQL Enterprise Edition Server(本地)和没有 HeatWave 的 HeatWave 服务,该值始终为 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_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 表的统计列。