Performance Schema 为准备好的语句提供检测,有两个协议:
二进制协议。这是通过 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
Performance Schema 准备好的语句检测涵盖了这两种协议。以下讨论涉及服务器命令而不是 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 |
Performance Schema 管理
prepared_statements_instances
表的内容如下:
报表准备
COM_STMT_PREPARE
或 命令 在SQLCOM_PREPARE
服务器中创建准备好的语句。如果该语句成功检测,则会向prepared_statements_instances
表中添加一个新行。如果无法检测该语句,Performance_schema_prepared_statements_lost
则递增状态变量。准备好的语句执行
为经过检测的准备好的语句实例执行
COM_STMT_EXECUTE
orSQLCOM_PREPARE
命令会更新相应的prepared_statements_instances
表行。准备好的语句释放
对经过检测的准备好的语句实例执行
COM_STMT_CLOSE
orSQLCOM_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;
TIMER_PREPARE
执行语句准备本身所花费的时间。
COUNT_REPREPARE
语句在内部重新准备的次数(请参阅第 8.10.4 节,“准备好的语句和存储程序的缓存”)。重新准备的计时统计信息不可用,因为它被计为语句执行的一部分,而不是单独的操作。
COUNT_EXECUTE
,SUM_TIMER_EXECUTE
,MIN_TIMER_EXECUTE
,AVG_TIMER_EXECUTE
,MAX_TIMER_EXECUTE
执行准备好的语句的汇总统计信息。
SUM_
xxx
其余 列与语句汇总表相同(请参阅 第 25.12.15.3 节,“语句汇总表”)。
SUM_
xxx