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 中事件工具的名称:

服务器启动时将自动调整 table 中的最大行数。要显式设置此最大值,请在服务器启动时设置performance_schema_digests_size系统变量。

每个语句摘要 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_TIMESUM_ERRORS列是events_statements_currenttable 中LOCK_TIMEERRORS列的集合。

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_SEENLAST_SEEN列以当前时间初始化。

  • 如果没有行具有刚刚完成的语句的语句摘要值,并且 table 已满,则将刚刚完成的语句的统计信息添加到带有DIGEST = NULL的特殊“全包”行中,该行将在必要时创建。如果创建了该行,则FIRST_SEENLAST_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 节“事件预过滤”