文档首页
MySQL 9.0 参考手册
相关文档 下载此手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man 页面 (TGZ) - 258.2Kb
Man 页面 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


29.12.20.3 语句摘要表

性能模式维护用于收集当前和最近语句事件的表,并将这些信息汇总到摘要表中。 第 29.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_STARSUM_TIMER_WAITMIN_TIMER_WAITAVG_TIMER_WAITMAX_TIMER_WAIT

    这些列类似于等待事件摘要表中相同名称的列(请参阅第 29.12.20.1 节,“等待事件摘要表”),不同之处在于语句摘要表聚合来自events_statements_current 而不是events_waits_current 的事件。

    prepared_statements_instances 表没有这些列。

  • SUM_xxx

    events_statements_current 表中对应xxx 列的聚合。例如,语句摘要表中的 SUM_LOCK_TIMESUM_ERRORS 列是 events_statements_current 表中 LOCK_TIMEERRORS 列的聚合。

  • MAX_CONTROLLED_MEMORY

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

  • MAX_TOTAL_MEMORY

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

  • COUNT_SECONDARY

    查询在 SECONDARY 引擎上处理的次数。适用于 HeatWave 服务和 HeatWave,其中 PRIMARY 引擎为 InnoDBSECONDARY 引擎为 HeatWave (RAPID)。对于 MySQL 社区版服务器、MySQL 企业版服务器(本地)和不带 HeatWave 的 HeatWave 服务,查询始终在 PRIMARY 引擎上处理,这意味着这些 MySQL 服务器上的值始终为 0。

events_statements_summary_by_digest 表有这些额外的摘要列

  • FIRST_SEENLAST_SEEN

    时间戳,指示具有给定摘要值的语句第一次出现和最近一次出现的时间。

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

    要访问直方图数据,请使用第 29.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 系统变量。(更改此值也会影响其他性能架构表中的列。请参阅第 29.10 节,“性能架构语句摘要和采样”。)

    有关语句采样的信息,请参阅第 29.10 节,“性能架构语句摘要和采样”

  • QUERY_SAMPLE_SEEN

    一个时间戳,指示 QUERY_SAMPLE_TEXT 列中的语句出现的时间。

  • QUERY_SAMPLE_TIMER_WAIT

    QUERY_SAMPLE_TEXT 列中的示例语句的等待时间。

events_statements_summary_by_program 表有这些额外的摘要列

  • COUNT_STATEMENTSSUM_STATEMENTS_WAITMIN_STATEMENTS_WAITAVG_STATEMENTS_WAITMAX_STATEMENTS_WAIT

    存储过程执行期间调用的嵌套语句的统计信息。

prepared_statements_instances 表有这些额外的摘要列

  • COUNT_EXECUTESUM_TIMER_EXECUTEMIN_TIMER_EXECUTEAVG_TIMER_EXECUTEMAX_TIMER_EXECUTE

    准备好的语句执行的聚合统计信息。

语句摘要表有这些索引

TRUNCATE TABLE 允许用于语句摘要表。它具有以下效果

  • 对于events_statements_summary_by_digest,它会删除行。

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

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

此外,每个按帐户、主机、用户或线程聚合的语句摘要表都会隐式地通过截断它依赖的连接表或截断events_statements_summary_global_by_event_name 来截断。有关详细信息,请参阅第 29.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 列将使用当前时间初始化。

  • 如果没有任何行具有刚刚完成的语句的摘要值,并且表已满,则刚刚完成的语句的统计信息将添加到具有 DIGEST = NULL 的特殊 catch-all 行,该行将在必要时创建。如果创建了该行,则 FIRST_SEENLAST_SEEN 列将使用当前时间初始化。否则,LAST_SEEN 列将使用当前时间更新。

维护具有 DIGEST = NULL 的行是因为性能架构表由于内存限制而具有最大大小。 DIGEST = NULL 行允许即使摘要表已满,也不匹配其他行的摘要也可以使用一个通用的 其他 存储桶来计数。这有助于您估算摘要摘要是否具有代表性

  • 具有 COUNT_STAR 值代表所有摘要 5% 的 DIGEST = NULL 行表明摘要摘要表非常具有代表性;其他行涵盖了 95% 的所见语句。

  • 具有 COUNT_STAR 值代表所有摘要 50% 的 DIGEST = NULL 行表明摘要摘要表不太具有代表性;其他行只涵盖了所见语句的一半。DBA 最有可能应该增加表的最大大小,以便在 DIGEST = NULL 行中计算的更多行会使用更具体的行而不是使用该行来计算。默认情况下,表是自动调整大小的,但如果此大小太小,请在服务器启动时将 performance_schema_digests_size 系统变量设置为更大的值。

存储过程检测行为

对于在setup_objects 表中启用了检测的存储过程类型,events_statements_summary_by_program 会按以下方式维护存储过程的统计信息

  • 当对象在服务器中第一次使用时,会为该对象添加一行。

  • 当对象被删除时,会删除对象的该行。

  • 当对象执行时,会将统计信息聚合到对象的该行中。

另请参阅第 29.4.3 节,“事件预过滤”