语句摘要表
性能架构维护用于收集当前和最近的语句事件的表,并将该信息汇总到摘要表中。“性能架构语句事件表”描述了语句摘要所基于的事件。请参阅该讨论,以获取有关语句事件的内容,当前和历史语句事件表以及如何控制语句事件收集(默认情况下已部分禁用)的信息。
示例语句事件摘要信息:
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 ...
每个语句摘要表都有一个或多个分组列,以指示该表如何聚合事件。事件名称是指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
这些列类似于等待事件摘要表中的相同名称的列(请参见“等待事件摘要表”),但语句摘要表汇总了
events_statements_current
而不是的事件events_waits_current
。该
prepared_statements_instances
表没有这些列。SUM_xxx
表中相应
xxx
列的汇总events_statements_current
。例如,SUM_LOCK_TIME
并且SUM_ERRORS
在声明汇总表列的骨料LOCK_TIME
和ERRORS
列events_statements_current
表。
该events_statements_summary_by_digest
表还包含以下其他摘要列:
FIRST_SEEN
,LAST_SEEN
时间戳指示何时首次看到和最近一次看到具有给定摘要值的语句。
QUANTILE_95
:语句延迟的第95个百分点,以皮秒为单位。根据收集的直方图数据,此百分位数是一个很高的估计值。换句话说,对于给定的摘要,所测量的陈述中有95%的延迟小于QUANTILE_95
。要访问直方图数据,请使用“语句直方图摘要表”中所述的表。
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
在服务器启动时设置系统变量。(更改该值也会影响其他性能模式表中的列。请参见“性能模式语句摘要和采样”。)有关语句采样的信息,请参见“性能模式语句摘要和采样”。
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
。有关详细信息,请参见“性能架构连接表”。
此外,截断会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
列初始化为当前时间。 - 如果没有行具有刚完成的语句的语句摘要值并且表已满,则将刚完成的语句的统计信息添加到带有=的特殊“ catch-all ”行中,该行将在必要时创建。如果创建了行,则使用当前时间初始化和列。否则,该列将使用当前时间进行更新。
DIGEST
NULL
FIRST_SEEN
LAST_SEEN
LAST_SEEN
之所以保留带有DIGEST
=的行,NULL
是因为由于内存限制,“性能模式”表的大小最大。“DIGEST
=”NULL
行允许使用通用的“其他”存储区对摘要行已满的摘要进行计数,即使摘要表已满。此行可帮助您估计摘要摘要是否具有代表性:
- A
DIGEST
=NULL
行的COUNT_STAR
值表示所有摘要的5%,表明摘要摘要表非常具有代表性;其他行覆盖了所看到语句的95%。 - A
DIGEST
=NULL
行的COUNT_STAR
值表示所有摘要的50%时,表明摘要摘要表不是非常具有代表性;其他行仅覆盖所看到语句的一半。DBA最有可能应该增加最大表大小,以便使用更具体的行来代替DIGEST
=NULL
行中计数的更多行。为此,请performance_schema_digests_size
在服务器启动时将系统变量设置为较大的值。默认大小为200。
存储程序检测行为
对于setup_objects
表中events_statements_summary_by_program
为其启用了检测功能的存储程序类型,维护存储程序的统计信息如下:
- 第一次在服务器中使用对象时,将为该对象添加一行。
- 放置对象时,该对象的行将被删除。
- 执行对象时,统计信息汇总在该行中。
另请参见“事件预过滤”。