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语句 对应的服务器命令 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
表。
仪器 | 服务器命令 |
---|---|
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_PREPARE
或者SQLCOM_PREPARE
命令在服务器一份准备好的声明。如果该语句已成功插入,则将新行添加到prepared_statements_instances
表中。如果无法执行该语句,则Performance_schema_prepared_statements_lost
状态变量将增加。准备好的语句执行
对已检测的准备好的语句实例执行
COM_STMT_EXECUTE
or或SQLCOM_PREPARE
命令将更新相应的prepared_statements_instances
表行。准备好的语句释放
对已准备好的已准备好的语句实例执行
COM_STMT_CLOSE
或SQLCOM_DEALLOCATE_PREPARE
命令会删除相应的prepared_statements_instances
表行。为了避免资源泄漏,即使禁用了前面描述的准备好的语句工具,也会进行删除。
该prepared_statements_instances
表包含以下列:
OBJECT_INSTANCE_BEGIN
已准备好的准备好的语句在内存中的地址。
STATEMENT_ID
服务器分配的内部语句ID。文本协议和二进制协议都使用语句ID。
STATEMENT_NAME
对于二进制协议,此列为
NULL
。对于文本协议,此列是用户分配的外部语句名称。例如,对于以下SQL语句,准备好的语句的名称为stmt
:PREPARE stmtFROM '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_TEXTFROM performance_schema.prepared_statements_instancesWHERE OWNER_OBJECT_TYPE IS NOT NULL;TIMER_PREPARE
执行语句准备本身所花费的时间。
COUNT_REPREPARE
内部重新准备语句的次数(请参见“缓冲和缓存”)。用于重新准备的时序统计信息不可用,因为它被计为语句执行的一部分,而不是单独的操作。
COUNT_EXECUTE
,SUM_TIMER_EXECUTE
,MIN_TIMER_EXECUTE
,AVG_TIMER_EXECUTE
,MAX_TIMER_EXECUTE
用于执行准备好的语句的汇总统计信息。
SUM_xxx
其余列与语句摘要表相同(请参见“语句摘要表”)。
SUM_xxx
该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
表的统计信息列。