语句摘要表
性能架构维护用于收集当前和最近的语句事件的表,并将该信息汇总到摘要表中。“性能架构语句事件表”描述了语句摘要所基于的事件。请参阅该讨论,以获取有关语句事件的内容,当前和历史语句事件表以及如何控制语句事件收集(默认情况下已部分禁用)的信息。
示例语句事件摘要信息:
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 ”行中,该行将在必要时创建。如果创建了行,则使用当前时间初始化和列。否则,该列将使用当前时间进行更新。DIGESTNULLFIRST_SEENLAST_SEENLAST_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为其启用了检测功能的存储程序类型,维护存储程序的统计信息如下:
- 第一次在服务器中使用对象时,将为该对象添加一行。
- 放置对象时,该对象的行将被删除。
- 执行对象时,统计信息汇总在该行中。
另请参见“事件预过滤”。
