不额外构造演示数据,直接查这次会话本身在Performance Schema里真实留下的统计痕迹,看它是怎么自动画出执行画像的。
代码SELECT DIGEST_TEXT, COUNT_STAR, SUM_TIMER_WAIT/1000000000 as total_ms FROM performance_schema.events_statements_summary_by_digest WHERE SCHEMA_NAME='mysqllab' ORDER BY SUM_TIMER_WAIT DESC LIMIT 5;
DIGEST_TEXT COUNT_STAR total_ms SELECT `SLEEP` (?) 4 15546.7000 UPDATE `accounts` SET `balance`=`balance`+? WHERE `id`=? 4 7206.6280 UPDATE `orders` SET `amount`=`amount`+? 16 1071.3320 CALL `hot_lookup_test` ( ) 3 413.9140 UPDATE `orders` SET `amount`=`amount`+? WHERE `id` BETWEEN ? AND ? 61 253.4290
这份结果没有任何专门构造的演示数据——它真实是本文前面这几十篇实验里,反复跑过的SLEEP()测试、accounts/orders表的各种UPDATE,自动被Performance Schema捕捉、按"归一化指纹"(把具体的字面量替换成?)聚合出来的统计。DIGEST_TEXT这一列真实证明了:哪怕字面量完全不同的两条UPDATE accounts SET balance=balance+X WHERE id=Y,也会被真实识别成"同一种查询",合并进同一行统计。
每一步都是本文上面用真实的digest统计查询跑出来的原始结果。
performance_schema.events_statements_summary_by_digest(默认开启,无需额外配置)