如何用DB控制台进行SQL查询调优

94 阅读6分钟

可观察性是指你如何理解你的数据库的当前状态:它是如何表现的,加上任何你应该注意的潜在问题--并根据这些信息确定改进。

在CockroachDB,我们有多个团队专门负责可观察性。我们的工作是收集关于你的工作量和你的数据库的当前状态的信息,这样你就能更好地了解任何可能出现的问题。我们提供两种工具来获取这些信息。这些信息可以在我们的ccloud CLI中看到,它允许你从命令行创建、管理和连接到CockroachDB集群。它也可以在Cockroach DB Console中使用,这是一个与每个二进制文件一起打包的本地工具,为任何工作负载提供观察能力。DB Console让操作者和开发者能够访问重要的集群数据,包括指标、数据库、会话、交易、语句等。这是所有伟大的信息,在你的指尖 - 但你到底应该用它来做什么?

那么,如何确定获取更好性能的机会呢?在这篇博文中,我们重点讨论了SQL的可观察性,以及如何使用DB Console来寻找遇到性能问题的SQL语句。

DB Console概述

概览页面提供了一个集群概览。它也是访问Metrics页面的入口。

DB Console overview

Metrics页面是寻找有关SQL语句延迟、争用和错误信息的地方。在这里,只要看一眼,你就能发现这些指标高于预期水平的任何时期--表明问题可能发生在哪里。

在确定了一个可能存在问题的时期后,你现在可以检查SQL活动页面,以了解该特定时期的更多细节。

SQL活动页面提供了一个基于以下内容的信息阵列。

  • 语句指纹通过用下划线(_)替换字面值(如数字和字符串)来表示一个SQL语句。
  • 事务指纹表示在该事务中按执行顺序排列的语句指纹列表。
  • 语句指纹ID是语句指纹、它所执行的数据库、事务类型(隐式或显式)以及执行是否失败(真或假)的组合。

当语句和事务被执行时,CockroachDB将每个语句和事务指纹ID的统计数据汇总到一个小时的 "桶 "中。这意味着,如果一个语句在9:10执行,而另一个具有相同指纹ID的语句在9:58执行,这两个统计数据将以9:00的时间戳进行汇总。这些信息将显示在SQL活动页面上。

提示:在连接到数据库时,用标签或名称来标记你的应用程序,对于快速过滤和隔离特定应用程序的问题工作负载非常有帮助。你可以按照这些客户端连接参数的说明,在连接到你的数据库时设置应用程序的名称。

语句和交易页面的工作方式非常相似,但值得分别看一下。

语句页

在这一点上,如果你已经知道有一个特定的应用程序、数据库、节点或区域正面临着问题,在过滤器上选择它们。

然后,你可以使用列选择器,只显示我们对这个分析感兴趣的列,例如:执行次数、语句时间、争论、重试和所有运行时间的百分比。

The Statements page

接下来,你可以点击这些列,通过任何一个列进行排序,这样就可以很容易地看到那些可能面临较高争论和/或重试的语句。你还可以看到占用大部分工作负载运行时间的语句,(你应该考虑为其寻找改进措施)。

在这个页面上,每个语句的指纹ID将是一个单独的行,列上的值是在时间选择器上选择的时期的集合。对于争论等数值,我们显示平均值和偏差,对于重试等数值,我们显示总数。你可以把每一列的标题悬停,以获得更多关于每一列的信息!

SQL Activity

点击感兴趣的语句列上的值,将带你进入其详细信息页面。在这里,你会发现有关失败、全面扫描等信息,还有所选时期(使用1小时桶)的统计图表显示。

Details page

在这个页面上,还有关于这个声明所使用的解释计划的信息,以及你可能为它收集的任何诊断束。如果你需要关于某个特定报表的更多信息,你可以从报表细节中的诊断标签激活报表诊断包。或者,你可以使用报表页面上的诊断栏,选择何时收集以及在过期前请求应尝试多长时间。

statement diagnostics

当你与我们的支持团队联系,要求帮助诊断某个特定报表的问题,并且问题持续存在或你可以重现它时,为该报表生成数据包并提供给我们的团队,这样我们可以更好地帮助你。

提示:你也可以使用我们的CLI来生成一个bundle,使用[EXPLAIN ANALYZE(DEBUG)],当问题是间歇性的,你可以使用[慢速查询日志]来获得一些相关信息。

交易页面

现在我们把重点放在交易页面上。与Statement页面类似,你可以通过争论和重试进行排序,以寻找有更多问题的事务,然后在Details页面中查看更多信息。

The Transactions page

其他重要的指标是交易时间--因为任何不在要求的SLA范围内的交易时间都应该被改进--和报表数量,因为报表数量多的交易遇到该问题的机会更大。

点击交易,打开其详细信息页面,查看关于该交易执行的所有语句的统计数据。如果你注意到特定的语句有较高的执行时间、争论或重试,你可以深入到该特定的语句,并获得更多的信息。如果没有一个语句似乎有问题,但你仍然有很多语句在一个事务中,可以考虑把它分解成更小的工作单元。

details page

一旦你找到了有问题的报表和交易,并掌握了收集的信息,你就可以采取可操作的步骤来解决根本原因。关于更多的细节和建议,请看本博文末尾的资源列表。

在像CockroachDB这样复杂的产品环境中,可观察性是至关重要的,我们也在不断地进行改进和开发新功能。例如,团队目前正在开发一个专门的洞察力页面,指导你如何改善面临性能问题的语句的性能。