本章主要介绍 TiDB 4.0 引入的新特性 ———— SQL 诊断功能。SQL 诊断主要用于提升 TiDB 问题定位效率。在 4.0 版本之前,不同的诊断信息需要使用不同工具获取。这种异构的信息获取方式既费时,又离散。 新的 SQL 诊断对这些离散的信息进行了整体设计,它将系统的各种维度信息以系统表的方式向上层暴露为一致的接口,并在此基础上进行监控汇总与自动诊断,方便了用户对于集群信息的查询。
本章 3.1 节介绍了 SQL 诊断的集群信息表。TiDB 4.0 诊断功能为原先离散的各节点实例信息提供了一致的获取方式,它将整个集群的集群拓扑、硬件信息、软件信息、内核参数、监控、系统信息、慢查询、Statements、日志完全打通,汇聚成单个的集群信息表,让用户能够统一使用 SQL 查询这些信息。
本章 3.2 节和 3.4 节介绍了 SQL 诊断的集群监控表。TiDB 4.0 诊断系统添加了集群监控系统表,所有表都在 metrics_schema
中,可以通过 SQL 的方式查询监控。相对于原先的可视化监控,SQL 查询监控的好处在于可以对整个集群的所有监控进行关联查询,并对比不同时间段的结果,迅速找出性能瓶颈。
此外,由于 TiDB 集群的监控指标数量较大,SQL 诊断还提供了监控汇总表,从而让用户能以一种更加便捷的方式从众多监控中找出异常的监控项。
本章 3.3 节介绍了 SQL 诊断的自动诊断功能。尽管用户可以通过手动执行 SQL 查询集群信息表和集群监控表与汇总表的方式发现集群问题,但自动挡总是更香的,所以 SQL 诊断在已有的基础信息表基础上,提供了诊断相关的系统表来自动执行诊断。使用 SQL select * from inspection_result
会触发所有的诊断规则对系统进行诊断,并会在结果集中展示系统中的故障或风险。
本章 3.5 节和 3.6 节分别介绍了比较重要的两个系统表 processlist
和 slow_query
以及它们所对应的在 SQL 诊断中新加入的集群表 cluster_processlist
和 cluster_slow_query
。cluster_processlist
可以用来查看当前 TiDB 集群的所有会话信息,cluster_slow_query
可以查询集群所有的慢日志。
本章 3.7 节介绍了 Statement Summary
系统表。Statement Summary
把相似的 SQL 和执行计划汇总到一组,然后统计每一组的各项性能指标。这些 SQL 的性能指标通过系统表的形式暴露给用户,用户可以以此定位性能问题、排查原因。