性能模式维护用于收集当前和最近语句事件的表,并在摘要表中汇总这些信息。 第 29.12.6 节“性能模式语句事件表” 描述了语句摘要所基于的事件。有关语句事件内容、当前和历史语句事件表以及如何控制语句事件收集(默认情况下部分禁用)的信息,请参阅该讨论。
语句事件摘要信息示例
mysql> SELECT *
FROM performance_schema.events_statements_summary_global_by_event_name\G
*************************** 1. row ***************************
EVENT_NAME: statement/sql/select
COUNT_STAR: 54
SUM_TIMER_WAIT: 38860400000
MIN_TIMER_WAIT: 52400000
AVG_TIMER_WAIT: 719600000
MAX_TIMER_WAIT: 12631800000
SUM_LOCK_TIME: 88000000
SUM_ERRORS: 0
SUM_WARNINGS: 0
SUM_ROWS_AFFECTED: 0
SUM_ROWS_SENT: 60
SUM_ROWS_EXAMINED: 120
SUM_CREATED_TMP_DISK_TABLES: 0
SUM_CREATED_TMP_TABLES: 21
SUM_SELECT_FULL_JOIN: 16
SUM_SELECT_FULL_RANGE_JOIN: 0
SUM_SELECT_RANGE: 0
SUM_SELECT_RANGE_CHECK: 0
SUM_SELECT_SCAN: 41
SUM_SORT_MERGE_PASSES: 0
SUM_SORT_RANGE: 0
SUM_SORT_ROWS: 0
SUM_SORT_SCAN: 0
SUM_NO_INDEX_USED: 22
SUM_NO_GOOD_INDEX_USED: 0
SUM_CPU_TIME: 0
MAX_CONTROLLED_MEMORY: 2028360
MAX_TOTAL_MEMORY: 2853429
COUNT_SECONDARY: 0
...
每个语句摘要表都有一个或多个分组列,用于指示表如何汇总事件。事件名称是指 setup_instruments
表中事件检测点的名称
events_statements_summary_by_account_by_event_name
具有EVENT_NAME
、USER
和HOST
列。每行汇总给定帐户(用户和主机组合)和事件名称的事件。events_statements_summary_by_digest
具有SCHEMA_NAME
和DIGEST
列。每行汇总每个模式和摘要值的事件。(DIGEST_TEXT
列包含相应的规范化语句摘要文本,但它既不是分组列也不是汇总列。QUERY_SAMPLE_TEXT
、QUERY_SAMPLE_SEEN
和QUERY_SAMPLE_TIMER_WAIT
列也不是分组列或汇总列;它们支持语句采样。)表中的最大行数在服务器启动时自动调整大小。要显式设置此最大值,请在服务器启动时设置
performance_schema_digests_size
系统变量。events_statements_summary_by_host_by_event_name
具有EVENT_NAME
和HOST
列。每行汇总给定主机和事件名称的事件。events_statements_summary_by_program
具有OBJECT_TYPE
、OBJECT_SCHEMA
和OBJECT_NAME
列。每行汇总给定存储程序(存储过程或函数、触发器或事件)的事件。events_statements_summary_by_thread_by_event_name
具有THREAD_ID
和EVENT_NAME
列。每行汇总给定线程和事件名称的事件。events_statements_summary_by_user_by_event_name
具有EVENT_NAME
和USER
列。每行汇总给定用户和事件名称的事件。events_statements_summary_global_by_event_name
具有EVENT_NAME
列。每行汇总给定事件名称的事件。prepared_statements_instances
具有OBJECT_INSTANCE_BEGIN
列。每行汇总给定预处理语句的事件。
每个语句摘要表都包含以下摘要列,其中包含聚合值(除非另有说明)
COUNT_STAR
、SUM_TIMER_WAIT
、MIN_TIMER_WAIT
、AVG_TIMER_WAIT
、MAX_TIMER_WAIT
这些列类似于等待事件摘要表中具有相同名称的列(请参见第 29.12.20.1 节,“等待事件摘要表”),不同之处在于语句摘要表聚合来自
events_statements_current
的事件,而不是events_waits_current
。prepared_statements_instances
表没有这些列。SUM_
xxx
events_statements_current
表中对应xxx
列的聚合。例如,语句摘要表中的SUM_LOCK_TIME
和SUM_ERRORS
列是events_statements_current
表中LOCK_TIME
和ERRORS
列的聚合。MAX_CONTROLLED_MEMORY
报告语句在执行期间使用的最大受控内存量。
MAX_TOTAL_MEMORY
报告语句在执行期间使用的最大内存量。
COUNT_SECONDARY
在
SECONDARY
引擎上处理查询的次数。与 HeatWave Service 和 HeatWave 一起使用,其中PRIMARY
引擎是InnoDB
,SECONDARY
引擎是 HeatWave (RAPID
)。对于 MySQL 社区版服务器、MySQL 企业版服务器(本地部署)以及没有 HeatWave 的 HeatWave Service,查询始终在PRIMARY
引擎上处理,这意味着在这些 MySQL 服务器上,该值始终为 0。
events_statements_summary_by_digest
表具有以下附加摘要列:
FIRST_SEEN
、LAST_SEEN
时间戳,指示首次和最近一次看到具有给定摘要值的语句的时间。
QUANTILE_95
:语句延迟的第 95 个百分位数,以皮秒为单位。此百分位数是一个较高的估计值,根据收集的直方图数据计算得出。换句话说,对于给定的摘要,95% 的已测量语句的延迟低于QUANTILE_95
。有关直方图数据的访问,请使用第 29.12.20.4 节,“语句直方图摘要表”中描述的表。
QUANTILE_99
:类似于QUANTILE_95
,但针对第 99 个百分位数。QUANTILE_999
:类似于QUANTILE_95
,但针对第 99.9 个百分位数。
events_statements_summary_by_digest
表包含以下列。这些列既不是分组列也不是摘要列;它们支持语句采样
QUERY_SAMPLE_TEXT
生成行中摘要值的示例 SQL 语句。此列使应用程序能够针对给定的摘要值访问服务器实际看到的生成该摘要的语句。其一种用途可能是对语句运行
EXPLAIN
,以检查与频繁出现的摘要关联的代表性语句的执行计划。为
QUERY_SAMPLE_TEXT
列分配值时,还会为QUERY_SAMPLE_SEEN
和QUERY_SAMPLE_TIMER_WAIT
列分配值。默认情况下,语句显示的最大可用空间为 1024 字节。要更改此值,请在服务器启动时设置
performance_schema_max_sql_text_length
系统变量。(更改此值还会影响其他 Performance Schema 表中的列。请参见第 29.10 节,“Performance Schema 语句摘要和采样”。)有关语句采样的信息,请参见第 29.10 节,“Performance Schema 语句摘要和采样”。
QUERY_SAMPLE_SEEN
一个时间戳,指示看到
QUERY_SAMPLE_TEXT
列中的语句的时间。QUERY_SAMPLE_TIMER_WAIT
QUERY_SAMPLE_TEXT
列中示例语句的等待时间。
events_statements_summary_by_program
表具有以下附加摘要列:
COUNT_STATEMENTS
、SUM_STATEMENTS_WAIT
、MIN_STATEMENTS_WAIT
、AVG_STATEMENTS_WAIT
、MAX_STATEMENTS_WAIT
有关在存储程序执行期间调用的嵌套语句的统计信息。
prepared_statements_instances
表具有以下附加摘要列:
COUNT_EXECUTE
、SUM_TIMER_EXECUTE
、MIN_TIMER_EXECUTE
、AVG_TIMER_EXECUTE
、MAX_TIMER_EXECUTE
已准备语句执行的聚合统计信息。
语句摘要表具有以下索引:
events_transactions_summary_by_account_by_event_name
:关于 (
USER
、HOST
、EVENT_NAME
) 的主键
events_statements_summary_by_digest
:关于 (
SCHEMA_NAME
、DIGEST
) 的主键
events_transactions_summary_by_host_by_event_name
:关于 (
HOST
、EVENT_NAME
) 的主键
events_statements_summary_by_program
:关于 (
OBJECT_TYPE
、OBJECT_SCHEMA
、OBJECT_NAME
) 的主键
events_statements_summary_by_thread_by_event_name
:关于 (
THREAD_ID
、EVENT_NAME
) 的主键
events_transactions_summary_by_user_by_event_name
:关于 (
USER
、EVENT_NAME
) 的主键
events_statements_summary_global_by_event_name
:关于 (
EVENT_NAME
) 的主键
语句摘要表允许使用 TRUNCATE TABLE
。它具有以下效果:
对于
events_statements_summary_by_digest
,它会删除行。对于未按帐户、主机或用户聚合的其他摘要表,截断会将摘要列重置为零,而不是删除行。
对于按帐户、主机或用户聚合的其他摘要表,截断会删除没有连接的帐户、主机或用户的行,并将剩余行的摘要列重置为零。
此外,每个按帐户、主机、用户或线程聚合的语句摘要表都会通过截断其所依赖的连接表或截断 events_statements_summary_global_by_event_name
来隐式截断。有关详细信息,请参见第 29.12.8 节,“Performance Schema 连接表”。
此外,截断 events_statements_summary_by_digest
会隐式截断 events_statements_histogram_by_digest
,截断 events_statements_summary_global_by_event_name
会隐式截断 events_statements_histogram_global
。
如果启用了 statements_digest
使用者,则在语句完成后,会按如下方式聚合到 events_statements_summary_by_digest
中。聚合基于为语句计算的 DIGEST
值。
如果
events_statements_summary_by_digest
行已存在,且该行的摘要值与刚完成的语句的摘要值相同,则该语句的统计信息将聚合到该行中。LAST_SEEN
列更新为当前时间。如果没有任何行的摘要值与刚完成的语句的摘要值相同,并且表未满,则会为该语句创建新行。
FIRST_SEEN
和LAST_SEEN
列使用当前时间进行初始化。如果没有任何行的语句摘要值与刚完成的语句的语句摘要值相同,并且表已满,则会将刚完成的语句的统计信息添加到具有
DIGEST
=NULL
的特殊““全部捕获””行中,并在必要时创建该行。如果创建了该行,则会使用当前时间初始化FIRST_SEEN
和LAST_SEEN
列。否则,LAST_SEEN
列将使用当前时间进行更新。
维护 DIGEST
= NULL
的行是因为 Performance Schema 表由于内存限制而具有最大大小。DIGEST
= NULL
行允许使用通用的““其他””存储桶对与其他行不匹配的摘要进行计数,即使摘要表已满。此行可帮助您估计摘要摘要是否具有代表性
COUNT_STAR
值表示所有摘要的 5% 的DIGEST
=NULL
行表明摘要摘要表非常具有代表性;其他行涵盖了 95% 的已看到语句。COUNT_STAR
值表示所有摘要的 50% 的DIGEST
=NULL
行表明摘要摘要表不具有代表性;其他行仅涵盖了所看到语句的一半。DBA 很可能应该增加最大表大小,以便使用更具体的行来统计DIGEST
=NULL
行中统计的更多行。默认情况下,表的大小是自动调整的,但如果此大小太小,请在服务器启动时将performance_schema_digests_size
系统变量设置为更大的值。
对于在 setup_objects
表中启用了检测的存储程序类型,events_statements_summary_by_program
会维护存储程序的统计信息,如下所示:
在服务器中首次使用对象时,会为该对象添加一行。
删除对象时,将删除该对象的对应行。
在对象执行时,统计信息会在该对象的对应行中聚合。
另请参见第 29.4.3 节,“事件预过滤”。