25.12.15.3 语句摘要 table
性能架构维护用于收集当前和最近的语句事件的 table,并将该信息汇总到摘要 table 中。 第 25.12.6 节“性能架构语句事件 table”描述了语句摘要所基于的事件。请参阅该讨论,以获取有关语句事件的内容,当前和历史语句事件 table 以及如何控制语句事件收集的信息,默认情况下已将其部分禁用。
示例语句事件摘要信息:
mysql> SELECT *
FROM performance_schema.events_statements_summary_global_by_event_name\G
*************************** 1. row ***************************
EVENT_NAME: statement/sql/select
COUNT_STAR: 25
SUM_TIMER_WAIT: 1535983999000
MIN_TIMER_WAIT: 209823000
AVG_TIMER_WAIT: 61439359000
MAX_TIMER_WAIT: 1363397650000
SUM_LOCK_TIME: 20186000000
SUM_ERRORS: 0
SUM_WARNINGS: 0
SUM_ROWS_AFFECTED: 0
SUM_ROWS_SENT: 388
SUM_ROWS_EXAMINED: 370
SUM_CREATED_TMP_DISK_TABLES: 0
SUM_CREATED_TMP_TABLES: 0
SUM_SELECT_FULL_JOIN: 0
SUM_SELECT_FULL_RANGE_JOIN: 0
SUM_SELECT_RANGE: 0
SUM_SELECT_RANGE_CHECK: 0
SUM_SELECT_SCAN: 6
SUM_SORT_MERGE_PASSES: 0
SUM_SORT_RANGE: 0
SUM_SORT_ROWS: 0
SUM_SORT_SCAN: 0
SUM_NO_INDEX_USED: 6
SUM_NO_GOOD_INDEX_USED: 0
...
每个语句摘要 table 都有一个或多个分组列,以指示该 table 如何聚合事件。事件名称是指setup_instrumentstable 中事件工具的名称:
-
events_statements_summary_by_account_by_event_name具有
EVENT_NAME
,USER
和HOST
列。每行总结了给定帐户(用户和主机组合)的事件和事件名称。 -
events_statements_summary_by_digest具有
SCHEMA_NAME
和DIGEST
列。每行总结每个架构的事件和摘要值。 (DIGEST_TEXT
列包含相应的规范化语句摘要文本,但既不是分组列也不是摘要列.)
服务器启动时将自动调整 table 中的最大行数。要显式设置此最大值,请在服务器启动时设置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
列。每行总结了给定准备语句的事件。
每个语句摘要 table 都有包含汇总值的这些摘要列(有特殊说明的除外):
COUNT_STAR
,SUM_TIMER_WAIT
,MIN_TIMER_WAIT
,AVG_TIMER_WAIT
,MAX_TIMER_WAIT
这些列类似于 await 事件摘要 table(请参见第 25.12.15.1 节,“await 事件摘要 table”)中具有相同名称的列,除了语句摘要 table 聚合来自events_statements_current而不是events_waits_current的事件。
prepared_statements_instancestable 没有这些列。
SUM_xxx
events_statements_currenttable 中相应* xxx
*列的汇总。例如,语句摘要 table 中的SUM_LOCK_TIME
和SUM_ERRORS
列是events_statements_currenttable 中LOCK_TIME
和ERRORS
列的集合。
events_statements_summary_by_digesttable 具有以下其他摘要列:
FIRST_SEEN
,LAST_SEEN
时间戳指示何时首次看到和最近一次看到具有给定摘要值的语句。
events_statements_summary_by_programtable 具有以下其他摘要列:
COUNT_STATEMENTS
,SUM_STATEMENTS_WAIT
,MIN_STATEMENTS_WAIT
,AVG_STATEMENTS_WAIT
,MAX_STATEMENTS_WAIT
有关在存储程序执行期间调用的嵌套语句的统计信息。
prepared_statements_instancestable 具有以下其他摘要列:
COUNT_EXECUTE
,SUM_TIMER_EXECUTE
,MIN_TIMER_EXECUTE
,AVG_TIMER_EXECUTE
,MAX_TIMER_EXECUTE
用于执行准备好的语句的汇总统计信息。
语句摘要 table 允许TRUNCATE TABLE。它具有以下效果:
-
对于events_statements_summary_by_digest,它将删除行。
-
对于未按帐户,主机或用户聚合的其他汇总 table,截断会将汇总列重置为零,而不是删除行。
-
对于按帐户,主机或用户聚合的其他汇总 table,截断将删除无连接的帐户,主机或用户的行,并将其余行的汇总列重置为零。
此外,由帐户,主机,用户或线程聚合的每个语句摘要 table 都将通过其所依赖的连接 table 的截断或events_statements_summary_global_by_event_name的截断而隐式地截断。有关详细信息,请参见第 25.12.8 节“性能架构连接 table”。
语句摘要聚合规则
如果启用了statements_digest
使用者,则在语句完成时将汇总到events_statements_summary_by_digest中。聚合基于为该语句计算的DIGEST
值。
-
如果events_statements_summary_by_digest行已经存在,并且具有刚刚完成的语句的摘要值,则该语句的统计信息将聚合到该行。
LAST_SEEN
列已更新为当前时间。 -
如果没有行具有刚刚完成的语句的摘要值,并且 table 未满,则为该语句创建一个新行。
FIRST_SEEN
和LAST_SEEN
列以当前时间初始化。 -
如果没有行具有刚刚完成的语句的语句摘要值,并且 table 已满,则将刚刚完成的语句的统计信息添加到带有
DIGEST
=NULL
的特殊“全包”行中,该行将在必要时创建。如果创建了该行,则FIRST_SEEN
和LAST_SEEN
列将使用当前时间进行初始化。否则,将使用当前时间更新LAST_SEEN
列。
之所以保留DIGEST
= NULL
的行,是因为由于内存限制,“性能模式”table 的大小最大。 DIGEST
= NULL
行允许使用通用的“其他”存储区对摘要行已满的摘要进行计数,即使摘要 table 已满。此行可帮助您估计摘要摘要是否具有代 table 性:
-
具有
COUNT_STAR
值(代 table 所有摘要的 5%)的DIGEST
=NULL
行 table 明摘要摘要 table 非常具有代 table 性。其他行覆盖了所看到语句的 95%。 -
具有
COUNT_STAR
值(代 table 所有摘要的 50%)的DIGEST
=NULL
行 table 明摘要摘要 table 不是非常具有代 table 性。其他行仅覆盖所看到语句的一半。 DBA 最有可能应该增加最大 table 大小,以便使用更特定的行来代替DIGEST
=NULL
行中计数的更多行。为此,请在服务器启动时将performance_schema_digests_size系统变量设置为较大的值。默认大小为 200.
存储程序检测行为
对于在setup_objectstable 中启用了检测功能的存储程序类型,events_statements_summary_by_program维护存储程序的统计信息,如下所示:
-
第一次在服务器中使用对象时,将为该对象添加一行。
-
放置对象时,该对象的行将被删除。
-
执行对象时,统计信息汇总在该行中。
另请参见第 25.4.3 节“事件预过滤”。