Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


29.12.6.4 prepared_statements_instances 表

性能模式提供了用于预编译语句的监控功能,其中有两个协议:

  • 二进制协议。这通过MySQL C API访问,并映射到以下表格中显示的底层服务器命令。

    C API Function Corresponding Server Command
    mysql_stmt_prepare() COM_STMT_PREPARE
    mysql_stmt_execute() COM_STMT_EXECUTE
    mysql_stmt_close() COM_STMT_CLOSE
  • 文本协议。这通过SQL语句访问,并映射到以下表格中显示的底层服务器命令。

    SQL Statement Corresponding Server Command
    PREPARE SQLCOM_PREPARE
    EXECUTE SQLCOM_EXECUTE
    DEALLOCATE PREPARE, DROP PREPARE SQLCOM_DEALLOCATE PREPARE

性能模式的预编译语句监控涵盖了两个协议。以下讨论将指代服务器命令,而不是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表的内容如下:

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 Server、MySQL Enterprise Edition Server(本地部署)和MySQL 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 表格的统计列。