Documentation Home

27.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_PREPARE或 命令 在SQLCOM_PREPARE服务器中创建准备好的语句。如果该语句成功检测,则会向 prepared_statements_instances 表中添加一个新行。如果无法检测该语句, Performance_schema_prepared_statements_lost 则递增状态变量。

  • 准备好的语句执行

    为经过检测的准备好的语句实例执行COM_STMT_EXECUTEor SQLCOM_PREPARE命令会更新相应的 prepared_statements_instances 表行。

  • 准备好的语句释放

    对经过检测的准备好的语句实例执行COM_STMT_CLOSEor 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;
  • 查询执行引擎。值为 PRIMARYSECONDARY。与 MySQL 数据库服务和 HeatWave 一起使用,其中引擎 PRIMARY为 HeatWave ( )。对于没有 HeatWave 的 MySQL Community Edition Server、MySQL Enterprise Edition Server(内部部署)和 MySQL Database Service,值始终为。此列是在 MySQL 8.0.29 中添加的。 InnoDBSECONDARYRAPIDPRIMARY

  • TIMER_PREPARE

    执行语句准备本身所花费的时间。

  • COUNT_REPREPARE

    语句在内部重新准备的次数(请参阅第 8.10.3 节,“准备好的语句和存储程序的缓存”)。重新准备的计时统计信息不可用,因为它被计为语句执行的一部分,而不是单独的操作。

  • COUNT_EXECUTE, SUM_TIMER_EXECUTE, MIN_TIMER_EXECUTE, AVG_TIMER_EXECUTE, MAX_TIMER_EXECUTE

    执行准备好的语句的汇总统计信息。

  • SUM_xxx

    其余 列与语句汇总表相同(请参阅 第 27.12.20.3 节,“语句汇总表”)。 SUM_xxx

  • MAX_CONTROLLED_MEMORY

    报告执行期间准备好的语句使用的最大受控内存量。

    此列是在 MySQL 8.0.31 中添加的。

  • MAX_TOTAL_MEMORY

    报告执行期间准备好的语句使用的最大内存量。

    此列是在 MySQL 8.0.31 中添加的。

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