Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

29.12.6.4 预备语句实例表

性能模式提供了预备语句的仪表盘,共有两个协议:

性能模式的预备语句仪表盘涵盖了这两个协议。以下讨论将引用服务器命令,而不是 C API 函数或 SQL 语句。

关于预备语句的信息可以在 prepared_statements_instances 表中找到。该表使服务器中使用的预备语句可被检查,并提供了聚合统计信息。要控制该表的大小,请在服务器启动时设置 performance_schema_max_prepared_statements_instances 系统变量。

收集预备语句信息取决于以下表中的语句仪表。这些仪表默认情况下是启用的。要修改它们,请更新 setup_instruments 表。

Instrument Server Command
statement/com/Prepare COM_STMT_PREPARE
statement/com/Execute COM_STMT_EXECUTE
statement/sql/prepare_sql SQLCOM_PREPARE
statement/sql/execute_sql SQLCOM_EXECUTE

性能模式管理 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。对于 MySQL HeatWave 服务和 HeatWave, PRIMARY 引擎是 InnoDB,SECONDARY 引擎是 HeatWave (RAPID)。对于 MySQL Community Edition 服务器、MySQL Enterprise Edition 服务器(on-premise)和不带 HeatWave 的 MySQL HeatWave 服务,该值始终为 PRIMARY

  • TIMER_PREPARE

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

  • COUNT_REPREPARE

    语句内部重新准备的次数(参见 第 10.10.3 节,“Caching of Prepared Statements and Stored Programs”)。重新准备的时间统计信息不可用,因为它被计入语句执行,而不是单独的操作。

  • COUNT_EXECUTE, SUM_TIMER_EXECUTE, MIN_TIMER_EXECUTE, AVG_TIMER_EXECUTE, MAX_TIMER_EXECUTE

    准备语句的执行聚合统计信息。

  • SUM_xxx

    剩余的 SUM_xxx 列与语句摘要表相同(参见 第 29.12.20.3 节,“Statement Summary Tables”)。

  • 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 表的统计列。