TDSQL Boundless EVENTS_STATEMENTS_SUMMARY_BY_DIGEST

PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_DIGEST 用于按语句摘要(DIGEST)维度汇总展示 SQL 语句的执行统计信息,便于用户分析 TDSQL Boundless 集群中各类 SQL 的执行频次、耗时分布、资源消耗以及分布式执行特征。

相关产品
TDSQL Boundless 产品页,含版本规格、价格与购买入口。

一、功能

EVENTS_STATEMENTS_SUMMARY_BY_DIGEST 表按 (SCHEMA_NAME, DIGEST) 唯一键对所有 SQL 语句进行归类聚合,每一行代表同一种 SQL 模板(参数被规范化后形成的语句指纹)的累计执行统计。该表的主要功能如下:

·提供 SQL 执行频次、累计/最小/平均/最大耗时、锁等待、错误与告警计数等基础指标。

·提供扫描行数、临时表创建、全表扫描、排序等执行特征指标,用于识别低效 SQL。

·提供 P95、P99、P999 三档耗时分位数,用于评估 SQL 执行的尾部延迟。

·提供 SUM_DISTRIBUTED 字段,统计该类 SQL 中以分布式方式执行(一条 SQL 访问多个 Replication Group)的次数,体现 TDSQL Boundless 分布式执行特性。

·提供查询样本(QUERY_SAMPLE_TEXT)及其采集时间戳和耗时,便于查看代表性 SQL 的真实文本。

注意:说明:

注意:用户不需要将 performance_schema 系统变量设置为 ON,即可查询本表。可通过 TRUNCATE TABLE performance_schema.events_statements_summary_by_digest 清空统计数据。

二、支持版本

适用于 TDSQL Boundless 所有版本。

各版本变更如下:

·V21.6.3.0:新增 SUM_DISTRIBUTED 列,用于统计分布式执行次数汇总。

三、字段说明

字段名 类型 描述
SCHEMA_NAME varchar(64) 语句所属的数据库名。如果语句未指定库名,则为 NULL。
DIGEST varchar(64) SQL 语句摘要的哈希值,即同一语句模板的唯一标识。
DIGEST_TEXT longtext 规范化后的 SQL 语句模板文本,常量值会被替换为 ?。
COUNT_STAR bigint unsigned 该模板 SQL 的累计执行次数。
SUM_TIMER_WAIT bigint unsigned 该模板 SQL 的累计执行耗时,单位为皮秒(ps)。
MIN_TIMER_WAIT bigint unsigned 该模板 SQL 的最小单次执行耗时,单位为皮秒。
AVG_TIMER_WAIT bigint unsigned 该模板 SQL 的平均单次执行耗时,单位为皮秒。
MAX_TIMER_WAIT bigint unsigned 该模板 SQL 的最大单次执行耗时,单位为皮秒。
SUM_LOCK_TIME bigint unsigned 该模板 SQL 的累计锁等待时间,单位为皮秒。
SUM_ERRORS bigint unsigned 该模板 SQL 累计执行失败的次数。
SUM_WARNINGS bigint unsigned 该模板 SQL 累计产生告警的次数。
SUM_ROWS_AFFECTED bigint unsigned 该模板 SQL 累计影响的行数(INSERT、UPDATE、DELETE 等)。
SUM_ROWS_SENT bigint unsigned 该模板 SQL 累计返回给客户端的行数。
SUM_ROWS_EXAMINED bigint unsigned 该模板 SQL 累计扫描的行数。
SUM_CREATED_TMP_DISK_TABLES bigint unsigned 该模板 SQL 累计创建的磁盘临时表数量。
SUM_CREATED_TMP_TABLES bigint unsigned 该模板 SQL 累计创建的临时表(含内存临时表)数量。
SUM_SELECT_FULL_JOIN bigint unsigned 该模板 SQL 累计因未使用索引而触发全表关联的次数。
SUM_SELECT_FULL_RANGE_JOIN bigint unsigned 该模板 SQL 累计触发全范围关联(range search)的次数。
SUM_SELECT_RANGE bigint unsigned 该模板 SQL 累计在第一张表上使用范围扫描的次数。
SUM_SELECT_RANGE_CHECK bigint unsigned 该模板 SQL 累计触发逐行范围检查的次数,通常表明 JOIN 索引选择不佳。
SUM_SELECT_SCAN bigint unsigned 该模板 SQL 累计在第一张表上进行全表扫描的次数。
SUM_SORT_MERGE_PASSES bigint unsigned 该模板 SQL 累计的归并排序合并轮数。
SUM_SORT_RANGE bigint unsigned 该模板 SQL 累计基于范围扫描进行排序的次数。
SUM_SORT_ROWS bigint unsigned 该模板 SQL 累计参与排序的行数。
SUM_SORT_SCAN bigint unsigned 该模板 SQL 累计基于全表扫描进行排序的次数。
SUM_NO_INDEX_USED bigint unsigned 该模板 SQL 累计未使用任何索引的执行次数。
SUM_NO_GOOD_INDEX_USED bigint unsigned 该模板 SQL 累计因优化器认为没有合适索引而未走索引的执行次数。
SUM_DISTRIBUTED bigint unsigned 该模板 SQL 中以分布式方式执行的累计次数。当一次执行涉及修改超过一个 Replication Group 时计为1,否则计为0。该字段为 TDSQL Boundless 自研字段。
FIRST_SEEN timestamp(6) 该模板 SQL 首次被记录的时间。
LAST_SEEN timestamp(6) 该模板 SQL 最近一次被记录的时间。
QUANTILE_95 bigint unsigned 该模板 SQL 执行耗时的 P95 分位数,单位为皮秒。
QUANTILE_99 bigint unsigned 该模板 SQL 执行耗时的 P99 分位数,单位为皮秒。
QUANTILE_999 bigint unsigned 该模板 SQL 执行耗时的 P999 分位数,单位为皮秒。
QUERY_SAMPLE_TEXT longtext 该模板 SQL 的代表性原始语句文本(保留参数值),可用于复现执行。
QUERY_SAMPLE_SEEN timestamp(6) 采集 QUERY_SAMPLE_TEXT 时的时间戳。
QUERY_SAMPLE_TIMER_WAIT bigint unsigned 采集 QUERY_SAMPLE_TEXT 时该次执行的耗时,单位为皮秒。

注意:说明:

注意:表中所有耗时类字段(*_TIMER_WAIT、SUM_LOCK_TIME、QUANTILE_*、QUERY_SAMPLE_TIMER_WAIT)的单位均为皮秒,1秒等于 1,000,000,000,000皮秒。

四、示例1:查询 SQL 执行统计概览

查询当前实例中执行次数最多的前10个 SQL 模板:

SELECT SCHEMA_NAME, DIGEST_TEXT, COUNT_STAR, SUM_TIMER_WAIT / 1000000000 AS SUM_TIMER_MS, AVG_TIMER_WAIT / 1000000000 AS AVG_TIMER_MSFROM performance_schema.events_statements_summary_by_digestORDER BY COUNT_STAR DESCLIMIT 10;

五、示例2:查看 SQL 执行的尾部延迟

查询 P99 耗时超过100ms的 SQL 模板,定位慢查询:

SELECT SCHEMA_NAME, DIGEST_TEXT, COUNT_STAR, QUANTILE_95 / 1000000000 AS P95_MS, QUANTILE_99 / 1000000000 AS P99_MS, QUANTILE_999 / 1000000000 AS P999_MSFROM performance_schema.events_statements_summary_by_digestWHERE QUANTILE_99 > 100000000000ORDER BY QUANTILE_99 DESC;

六、示例3:识别低效 SQL

查询全表扫描或未使用索引的 SQL 模板:

SELECT SCHEMA_NAME, DIGEST_TEXT, COUNT_STAR, SUM_NO_INDEX_USED, SUM_SELECT_SCAN, SUM_ROWS_EXAMINEDFROM performance_schema.events_statements_summary_by_digestWHERE SUM_NO_INDEX_USED > 0 OR SUM_SELECT_SCAN > 0ORDER BY SUM_ROWS_EXAMINED DESC;

七、示例4:查看分布式执行统计

SUM_DISTRIBUTED 字段统计 SQL 中以分布式方式执行(涉及多于一个参与节点)的次数。下面通过一个具体场景演示其行为:

CREATE DATABASE db;CREATE TABLE db.t1 (a INT PRIMARY KEY, b VARCHAR(30));CREATE TABLE db.t2 (a INT PRIMARY KEY, b VARCHAR(30));– 将 t1 和 t2 分布到不同的 replication groupUSE performance_schema;TRUNCATE TABLE events_statements_summary_by_digest;USE db;INSERT INTO t1 VALUES (111, 222);INSERT INTO t2 VALUES (111, 222);UPDATE t1, t2 SET t1.b = 333, t2.b = 333 WHERE t1.a = 111 AND t2.a = 111;SELECT DIGEST_TEXT, COUNT_STAR, SUM_DISTRIBUTEDFROM performance_schema.events_statements_summary_by_digestWHERE SCHEMA_NAME = 'db';

输出结果:

DIGEST_TEXT COUNT_STAR SUM_DISTRIBUTEDINSERT INTO `t1` VALUES (…) 1 0INSERT INTO `t2` VALUES (…) 1 0UPDATE `t1` , `t2` SET `t1` . `b` = ? , `t2` . `b` = ? WHERE `t1` . `a` = ? AND `t2` . `a` = ? 1 1

结果说明:

·两条 INSERT 语句仅访问单个表,且每条语句仅涉及一个参与节点,因此 SUM_DISTRIBUTED 为 0。

·UPDATE 语句同时更新位于不同 replication group 的 t1 和 t2,涉及多于一个参与节点,因此 SUM_DISTRIBUTED 为 1。

八、示例 5:查看代表性 SQL 文本

查询某条 SQL 模板的最近一次代表性执行文本及耗时:

SELECT DIGEST, DIGEST_TEXT, QUERY_SAMPLE_TEXT, QUERY_SAMPLE_SEEN, QUERY_SAMPLE_TIMER_WAIT / 1000000000 AS SAMPLE_TIMER_MSFROM performance_schema.events_statements_summary_by_digestWHERE DIGEST = '<指定的 DIGEST 值>'\\G

九、示例 6:清空统计数据

如需重置统计数据(例如在性能压测前),可执行:

TRUNCATE TABLE performance_schema.events_statements_summary_by_digest;

赞 (0)
上一篇 4天前
下一篇 4天前