25.12.6.4 prepare_statements_instancestable

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

C API 函数 对应的服务器命令
mysql_stmt_prepare() COM_STMT_PREPARE
mysql_stmt_execute() COM_STMT_EXECUTE
mysql_stmt_close() COM_STMT_CLOSE
SQL Statement 对应的服务器命令
PREPARE SQLCOM_PREPARE
EXECUTE SQLCOM_EXECUTE
DEALLOCATE PREPARE, DROP PREPARE SQLCOM_DEALLOCATE PREPARE

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

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

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

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

性能架构按以下方式 Managementprepared_statements_instancestable 的内容:

COM_STMT_PREPARESQLCOM_PREPARE命令在服务器中创建一个准备好的语句。如果该语句已成功插入,则将新行添加到prepared_statements_instancestable。如果无法执行该语句,则Performance_schema_prepared_statements_lost status 变量增加。

对有条件的准备好的语句实例执行COM_STMT_EXECUTESQLCOM_PREPARE命令会更新相应的prepared_statements_instancestable 行。

对已检测的准备好的语句实例执行COM_STMT_CLOSESQLCOM_DEALLOCATE_PREPARE命令会删除相应的prepared_statements_instancestable 行。为了避免资源泄漏,即使禁用了前面描述的准备好的语句工具,也会进行删除。

prepared_statements_instancestable 具有以下列:

已准备好的准备好的语句在内存中的地址。

服务器分配的内部语句 ID。文本协议和二进制协议都使用语句 ID。

对于二进制协议,此列为NULL。对于文本协议,此列是用户分配的外部语句名称。例如,对于以下 SQL 语句,准备好的语句的名称为stmt

PREPARE stmt FROM 'SELECT 1';

准备的语句文本,带有?个占位符标记。

这些列指示创建准备好的语句的事件。

对于由 Client 机会话创建的准备好的语句,这些列为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;

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

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

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

其余的SUM_xxx列与语句摘要 table 相同(请参见第 25.12.15.3 节,“语句摘要 table”)。

TRUNCATE TABLE重置prepared_statements_instancestable 的统计信息列。

首页