暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

TiDB SQL 诊断

原创 wzf0072 2023-10-12
68

TiDB SQL 诊断

SQL 诊断功能是在 TiDB 4.0 版本中引入的特性,用于提升 TiDB 问题定位的效率。TiDB 4.0 版本以前,用户需要使用不同的工具以异构的方式获取不同信息。新的 SQL 诊断系统对这些离散的信息进行了整体设计,它整合系统各个维度的信息,通过系统表的方式向上层提供一致的接口,提供监控汇总与自动诊断,方便用户查询集群信息。

SQL 诊断共分三大块:

  • 集群信息表:TiDB 4.0 诊断系统添加了集群信息表,为原先离散的各实例信息提供了统一的获取方式。它将整个集群的集群拓扑、硬件信息、软件信息、内核参数、监控、系统信息、慢查询、语句、日志完全整合在表中,让用户能够统一使用 SQL 进行查询。
  • 集群监控表:TiDB 4.0 诊断系统添加了集群监控系统表,所有表都在 metrics_schema 中,可以通过 SQL 语句来查询监控信息。比起原先的可视化监控,SQL 查询监控允许用户对整个集群的所有监控进行关联查询,并对比不同时间段的结果,迅速找出性能瓶颈。由于 TiDB 集群的监控指标数量较大,SQL 诊断还提供了监控汇总表,让用户能够更便捷地从众多监控中找出异常的监控项。
  • 自动诊断:尽管用户可以手动执行 SQL 来查询集群信息表、集群监控表与汇总表来定位问题,但自动诊断可以快速对常见异常进行定位。SQL 诊断基于已有的集群信息表和监控表,提供了与之相关的诊断结果表与诊断汇总表来执行自动诊断。

集群信息表

集群信息表将一个集群中的所有实例的信息都汇聚在一起,让用户仅通过一条 SQL 就能查询整个集群相关信息。集群信息表列表如下:

  • 集群拓扑表 information_schema.cluster_info 用于获取集群当前的拓扑信息,以及各个实例的版本、版本对应的 Git Hash、各实例的启动时间、各实例的运行时间。
  • 集群配置表 information_schema.cluster_config 用于获取集群当前所有实例的配置。对于 TiDB 4.0 之前的版本,用户必须逐个访问各个实例的 HTTP API 才能获取这些配置信息。
  • 集群硬件表 information_schema.cluster_hardware 用于快速查询集群硬件信息。
  • 集群负载表 information_schema.cluster_load 用于查询集群不同实例以及不同硬件类型的负载信息。
  • 内核参数表 information_schema.cluster_systeminfo 用于查询集群不同实例的内核配置信息。目前支持查询 sysctl 的信息。
  • 集群日志表 information_schema.cluster_log 用于集群日志查询,通过将查询条件下推到各个实例,降低日志查询对集群的影响,性能影响小于等 grep 命令。

TiDB 4.0 之前的系统表,只能查看当前实例信息,TiDB 4.0 实现了对应的集群表,可以在单个 TiDB 实例上拥有整个集群的全局视图。这些表目前都位于 information_schema 中,查询方式与其他 information_schema 系统表一致。

集群监控表

为了能够动态地观察并对比不同时间段的集群情况,TiDB 4.0 诊断系统添加了集群监控系统表。所有监控表都在 metrics_schema 中,可以通过 SQL 的方式查询监控信息。SQL 查询监控允许用户对整个集群的所有监控进行关联查询,并对比不同时间段的结果,迅速找出性能瓶颈。

  • information_schema.metrics_tables:由于目前添加的系统表数量较多,因此用户可以通过该表查询这些监控表的相关元信息。

由于 TiDB 集群的监控指标数量较大,因此 TiDB 4.0 提供以下监控汇总表:

  • 监控汇总表 information_schema.metrics_summary 用于汇总所有监控数据,以提升用户排查各监控指标的效率。
  • 监控汇总并按 label 聚合表 information_schema.metrics_summary_by_label 同样用于汇总所有监控数据,但该表会对各项监控的不同的 label 进行聚合统计。

自动诊断

以上集群信息表和集群监控表均需要用户手动执行 SQL 语句来排查集群问题。TiDB 4.0 中添加了自动诊断功能,根据已有的基础信息表,提供诊断相关的系统表,使诊断自动执行。自动诊断相关的系统表如下:

  • 诊断结果表 information_schema.inspection_result 用于展示对系统的诊断结果。诊断是惰性触发,使用 select * from inspection_result 会触发所有诊断规则对系统进行诊断,并在结果中展示系统中的故障或风险。
  • 诊断汇总表 information_schema.inspection_summary 用于对特定链路或模块的监控进行汇总,用户可以根据整个模块或链路的上下文来排查定位问题。

    •  
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论