• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • prepare_statements_instances表

    性能架构为准备好的语句提供了工具,为此有两种协议:

    • 二进制协议。可以通过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语句对应的服务器命令
      PREPARESQLCOM_PREPARE
      EXECUTESQLCOM_EXECUTE
      DEALLOCATE PREPAREDROP PREPARESQLCOM_DEALLOCATE PREPARE

    性能模式准备的语句工具涵盖了这两个协议。以下讨论是针对服务器命令而不是C API函数或SQL语句。

    表中提供了有关准备好的语句的信息prepared_statements_instances。该表允许检查服务器中使用的准备好的语句,并提供有关这些语句的汇总统计信息。要控制此表的大小,请performance_schema_max_prepared_statements_instances在服务器启动时设置系统变量。

    准备的语句信息的收集取决于下表中显示的语句工具。这些工具默认情况下处于启用状态。要修改它们,请更新setup_instruments表。

    仪器服务器命令
    statement/com/PrepareCOM_STMT_PREPARE
    statement/com/ExecuteCOM_STMT_EXECUTE
    statement/sql/prepare_sqlSQLCOM_PREPARE
    statement/sql/execute_sqlSQLCOM_EXECUTE

    性能架构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_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;
      
    • TIMER_PREPARE

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

    • COUNT_REPREPARE

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

    • COUNT_EXECUTESUM_TIMER_EXECUTEMIN_TIMER_EXECUTEAVG_TIMER_EXECUTEMAX_TIMER_EXECUTE

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

    • SUM_xxx

      其余列与语句摘要表相同(请参见“语句摘要表”)。SUM_xxx

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