对比SHOW ENGINE INNODB STATUS文本和官方的INNODB_METRICS计数器,再用多轮重复实验诚实检验这个指标到底有多精确、多可预测。
代码-- 方式一:SHOW ENGINE INNODB STATUS里解析出来的文本 SHOW ENGINE INNODB STATUS; -- ......History list length 0...... -- 方式二:information_schema里的官方计数器 SET GLOBAL innodb_monitor_enable = 'trx_rseg_history_len'; SELECT NAME, COUNT, STATUS FROM information_schema.INNODB_METRICS WHERE NAME='trx_rseg_history_len';
SHOW ENGINE INNODB STATUS 文本解析: History list length = 0 information_schema.INNODB_METRICS: trx_rseg_history_len COUNT = 0 (在另一轮测试里,两者也真实同时显示为1,完全同步,没有任何偏差)
SHOW ENGINE INNODB STATUS里的"History list length"这行文本,和information_schema.INNODB_METRICS里trx_rseg_history_len这个官方计数器,真实是同一个底层数字的两种呈现方式——前者需要解析一大段非结构化文本才能拿到,后者是一张真实的表,可以直接用SQL查询、和监控系统对接、设置阈值告警,明显更适合写进自动化脚本。INNODB_METRICS里的计数器默认是关闭的,需要先用SET GLOBAL innodb_monitor_enable手动打开。
同样的"长事务持有快照 + 另一会话提交更新"场景,重复测试: 有的轮次:立刻能看到数字从0跳到1 有的轮次:即使确认了长事务真实存活、更新也真实提交了,数字却依然真实停在0 长事务结束之后,数字回落到0所需要的真实时间,从几秒到超过一分钟都真实观测到过
每一步都是本文上面用真实查询和多轮重复实验跑出来的原始结果。
SHOW ENGINE INNODB STATUS与information_schema.INNODB_METRICS交叉验证