Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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 的事件。

    The 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 引擎上处理的次数。用于 MySQL HeatWave 服务和 HeatWave,where PRIMARY 引擎是 InnoDBSECONDARY 引擎是 HeatWave (RAPID)。对于 MySQL Community Edition Server、MySQL Enterprise Edition Server(on-premise)和 MySQL HeatWave 服务无 HeatWave,查询总是处理在 PRIMARY 引擎上,这意味着这些 MySQL 服务器上的值总是 0。

The events_statements_summary_by_digest 表还有这些额外的摘要列:

  • FIRST_SEEN, LAST_SEEN

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

  • QUANTILE_95:语句延迟的 95th 百分位数,以皮秒为单位。这是从 histogram 数据中计算的高估计值。换言之,对于给定的摘要,95% 的语句测量延迟低于 QUANTILE_95

    要访问 histogram 数据,请使用 第 29.12.20.4 节,“语句 Histogram 摘要表” 中描述的表。

  • QUANTILE_99:类似于 QUANTILE_95,但为 99th 百分位数。

  • QUANTILE_999:类似于 QUANTILE_95,但为 99.9th 百分位数。

The 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 系统变量。(更改此值还会影响其他 Performance Schema 表中的列。请参阅 第 29.10 节,“Performance Schema 语句摘要和采样”。)

    有关语句采样的信息,请参阅 第 29.10 节,“Performance Schema 语句摘要和采样”

  • QUERY_SAMPLE_SEEN

    一个时间戳,指示 QUERY_SAMPLE_TEXT 列中的语句何时被看到。

  • QUERY_SAMPLE_TIMER_WAIT

    QUERY_SAMPLE_TEXT 列中的样本语句的等待时间。

The events_statements_summary_by_program 表具有这些附加的摘要列:

  • COUNT_STATEMENTS, SUM_STATEMENTS_WAIT, MIN_STATEMENTS_WAIT, AVG_STATEMENTS_WAIT, MAX_STATEMENTS_WAIT

    关于嵌套语句的统计信息,在存储程序执行期间被调用。

The 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。有关详细信息,请参阅第 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 消费者,那么在语句完成时,将根据语句的 DIGEST 值聚合到events_statements_summary_by_digest 中。

  • 如果events_statements_summary_by_digest 行已经存在于语句的摘要值中,那么将语句的统计信息聚合到该行中。LAST_SEEN 列将被更新为当前时间。

  • 如果没有行具有语句的摘要值,并且表不是满的,那么将创建一个新的行用于语句。FIRST_SEENLAST_SEEN 列将被初始化为当前时间。

  • 如果没有行具有语句的摘要值,并且表是满的,那么将语句的统计信息添加到一个特殊的 catch-all 行中,具有 DIGEST = NULL,该行将被创建如果必要。如果行被创建,FIRST_SEENLAST_SEEN 列将被初始化为当前时间。否则,LAST_SEEN 列将被更新为当前时间。

具有 DIGEST = NULL 的行被维护,因为性能模式表具有最大大小限制。该行允许不匹配其他行的摘要被计数,即使摘要表是满的,使用一个共同的 其他 桶。这行有助于您估算摘要表的代表性:

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

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

存储程序仪表行为

对于在 setup_objects 表中启用了仪器的存储程序类型,events_statements_summary_by_program 按照以下方式维护存储程序的统计信息:

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

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

  • 随着对象的执行,统计信息将聚合到该对象的行中。

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