Documentation Home

27.12.20.3 语句汇总表

Performance Schema 维护用于收集当前和最近的语句事件的表,并将该信息聚合在摘要表中。 第 27.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表中事件工具的名称:

每个报表汇总表都有这些汇总列,其中包含聚合值(例外情况已注明):

  • COUNT_STAR, SUM_TIMER_WAIT, MIN_TIMER_WAIT, AVG_TIMER_WAIT, MAX_TIMER_WAIT

    这些列类似于等待事件摘要表中的同名列(请参阅 第 27.12.20.1 节,“等待事件摘要表”),除了语句摘要表聚合事件来自 events_statements_current 而不是 events_waits_current

    prepared_statements_instances 表没有这些列。

  • SUM_xxx

    表中相应 xxx列 的聚合events_statements_current 。例如,语句汇总表中的 SUM_LOCK_TIME 和 列是 表中和列的聚合 。 SUM_ERRORSLOCK_TIMEERRORSevents_statements_current

  • MAX_CONTROLLED_MEMORY

    报告执行期间语句使用的最大受控内存量。

    此列是在 MySQL 8.0.31 中添加的。

  • MAX_TOTAL_MEMORY

    报告执行期间语句使用的最大内存量。

    此列是在 MySQL 8.0.31 中添加的。

  • COUNT_SECONDARY

    SECONDARY在引擎 上处理查询的次数 。与 MySQL 数据库服务和 HeatWave 一起使用,其中引擎 PRIMARY为HeatWave ( )。对于 MySQL Community Edition Server、MySQL Enterprise Edition Server(内部部署)和不带 HeatWave 的 MySQL Database Service,查询始终在引擎上处理,这意味着这些 MySQL 服务器上的值始终为 0。该列是在 MySQL 8.0.29 中添加的。 InnoDBSECONDARYRAPIDPRIMARYCOUNT_SECONDARY

events_statements_summary_by_digest 表具有以下附加摘要列:

  • FIRST_SEEN, LAST_SEEN

    时间戳指示首次看到和最近看到具有给定摘要值的语句的时间。

  • QUANTILE_95:语句延迟的第 95 个百分位数,以皮秒为单位。该百分位数是根据收集的直方图数据计算得出的高估计值。换句话说,对于给定的摘要,95% 的测量语句的延迟低于 QUANTILE_95.

    要访问直方图数据,请使用 第 27.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_SEENQUERY_SAMPLE_TIMER_WAIT列也被赋值。

    默认情况下,语句显示的最大可用空间为 1024 字节。要更改此值,请 performance_schema_max_sql_text_length 在服务器启动时设置系统变量。(更改此值也会影响其他性能模式表中的列。请参阅 第 27.10 节,“性能模式语句摘要和采样”。)

    有关语句采样的信息,请参阅 第 27.10 节,“性能模式语句摘要和采样”

  • 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

    执行准备好的语句的汇总统计信息。

语句汇总表具有以下索引:

TRUNCATE TABLE语句汇总表是允许的。它具有以下效果:

  • 对于 events_statements_summary_by_digest,它删除行。

  • 对于其他未按帐户、主机或用户聚合的汇总表,截断会将汇总列重置为零而不是删除行。

  • 对于按帐户、主机或用户聚合的其他摘要表,截断会删除没有连接的帐户、主机或用户的行,并将剩余行的摘要列重置为零。

此外,每个按帐户、主机、用户或线程聚合的语句汇总表都会通过截断它所依赖的连接表或截断 events_statements_summary_global_by_event_name. 有关详细信息,请参阅 第 27.12.8 节,“性能模式连接表”

此外,截断 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_SEENLAST_SEEN用当前时间初始化。

  • 如果没有行具有刚刚完成的语句的语句摘要值,并且表已满,则将刚刚完成的语句的统计信息添加到带有=的特殊包罗万象行, 必要时创建该行。如果创建了行,则使用当前时间初始化和 列。否则,该 列将更新为当前时间。 DIGESTNULLFIRST_SEENLAST_SEENLAST_SEEN

保留带有DIGEST= 的行NULL是因为性能模式表由于内存限制而具有最大大小。DIGEST=NULL行允许与其他行不匹配的摘要被计算在内,即使汇总表已满,使用公共的 “其他。此行可帮助您估计摘要摘要是否具有代表性:

  • A DIGEST=具有代表所有摘要 5% 的值的NULLCOUNT_STAR表明摘要汇总表非常具有代表性;其他行涵盖了所见陈述的 95%。

  • A DIGEST= NULL row that has a COUNT_STARvalue that represents 50% of all digests 表明摘要汇总表的代表性不强;其他行仅涵盖所见陈述的一半。DBA 很可能应该增加最大表大小,以便使用更具体的行来计算DIGEST= 行中更多的行。NULL默认情况下,表是自动调整大小的,但如果这个大小太小,请 performance_schema_digests_size 在服务器启动时将系统变量设置为更大的值。

存储程序检测行为

对于在setup_objects 表中启用检测的存储程序类型, events_statements_summary_by_program 维护存储程序的统计信息如下:

  • 对象在服务器中首次使用时会添加一行。

  • 当对象被删除时,对象所在的行被删除。

  • 统计信息在对象执行时聚集在行中。

另见第 27.4.3 节,“事件预过滤”