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