第 8 章 SQL 调试 SQL 调试
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
CockroachDB 是一个可扩展的分布式事务数据库系统。它能够满足高性能、高可用性、全球分布式应用程序的需求。 然而,它并不是一个能消除应用程序代码或模式设计中所有低效问题的魔盒。开发人员和应用程序时不时会向数据库发送运行速度不尽如人意的 SQL 语句。因此,自古以来--至少是关系数据库出现以来,SQL 调整一直是数据库开发人员和管理员关注的主要问题。
在本章中,我们将介绍 CockroachDB 如何优化 SQL 语句,以及如何帮助 CockroachDB 使这些查询运行得更快。我们还将向你展示如何查找可能需要调整的查询,如何确定这些 SQL 语句是否经过优化,并讨论让它们更快的方法。
查找慢速 SQL
假设我们有最新的 和全面的查询统计,我们就应该监控我们的集群,找出任何有问题的 SQL 语句。
许多应用程序都会记录 SQL 语句或逻辑事务时间,并能深入了解性能不佳的 SQL 语句。不过,如果我们没有应用级跟踪,CockroachDB 本身也能提供有关整体 SQL 执行时间的信息。
最好从 CockroachDB 控制台的 "声明 "页面开始--如图 8-1 所示。
图 8-1. CockroachDB 控制台语句页面(大幅面版本)
语句 "页面列出了服务器上运行的 SQL 语句以及基本的执行统计信息。我们可以按平均语句时间或累计执行时间进行排序,以找出可能需要注意的 SQL 语句。如图 8-2 所示,单击特定 SQL 语句可进入语句详细信息。
我们还可以通过其他一些方法来识别可能需要调整的 SQL 语句。SHOW STATEMENTS 命令显示当前正在运行的 SQL语句,可能会显示当前正在消耗资源的长期运行查询。
通过将集群变量sql.log.slow_query.latency_threshold 设置为非零值,CockroachDB 可以将"慢 "查询记录到日志中。 这将导致超过阈值的查询向慢速查询日志发送记录。日志记录将如下所示:
I210809 07:47:09.663658 12467601 10@util/log/event_log.go:32 ⋮
[n1,client=‹192.168.0.245:57136›,hostnossl,user=root] 17
={"Timestamp":1628495229538628000,"EventType":"slow_query","Statement":
"‹SELECT city, id FROM \"\".\"\".vehicles WHERE city = $1›",
"User":"‹root›","ApplicationName":"‹movr›","PlaceholderValues":
["‹'amsterdam'›"],"ExecMode":"exec","NumRows":25,
"Age":125.039,"TxnCounter":11310}
图 8-2. CockroachDB 控制台语句详细信息页面(大幅面版本)
在日志中识别运行缓慢的 SQL 语句并不简单。你需要以某种方式汇总条目,以识别重复的 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access