DoubleCloud 即将停止服务。利用限时免费迁移服务迁移到 ClickHouse。立即联系我们 ->->

博客 / 产品

ClickHouse 2022年5月新闻通讯:Explain 语句 - 查询优化

author avatar
Christoph Wurm
2022年5月9日

热烈欢迎大家。在阿姆斯特丹的 ClickHouse 办公室,我们度过了忙碌的几周——我们已经启动了 ClickHouse Cloud 服务的私有预览阶段!在接下来的几周和几个月里,加入此预览版的勇敢用户将帮助我们发现并修复所有错误和微小的细节,以便在今年晚些时候向全世界开放之前,我们将这些细节完善。如果您对 ClickHouse 的无服务器托管服务感兴趣,请加入我们的候补名单此处

我们还发布了 ClickHouse 22.4、新的文档页面 以及新的Grafana 官方 ClickHouse 插件。发布ClickHouse 22.5 的日期已经确定,并且一些聚会即将到来,所以别忘了预留时间!

即将举行的活动

请在您的日历上标记这些活动

ClickHouse v22.5 发布网络研讨会

  • 何时?太平洋标准时间 5 月 19 日星期四上午 9 点,格林威治标准时间下午 5 点
  • 如何加入?在此处注册此处

ClickHouse 美洲虚拟聚会

  • 什么?Gigasheet 正在使用 ClickHouse 构建一个简单的、无需代码的分析产品,该产品具有基于 Web 的电子表格界面。终于可以取代 Excel 了吗?!此外,我们自己的 Geoff Genz 将分享他在 Comcast 大规模实施 ClickHouse 的历程。不容错过!
  • 何时?太平洋标准时间 5 月 12 日星期四上午 11 点,东部标准时间下午 2 点
  • 如何?在聚会小组中注册纽约西雅图

ClickHouse EMEA 虚拟聚会

  • 什么?金融科技公司 Opensee 将讨论他们如何使用 ClickHouse 为金融机构提供大量数据的自助分析。之后,ClickHouse 的创建者 Alexey 将深入探讨使 ClickHouse 速度飞快的内部机制。准备好您的问题吧!
  • 何时?英国夏令时 5 月 12 日星期四下午 1 点 / 中欧夏令时下午 2 点 / 东欧夏令时下午 3 点 \
  • 如何?在聚会小组中注册荷兰法国伦敦德国班加罗尔——或者所有这些,如果您愿意!

新文档

我们为 ClickHouse 文档页面提供了新的外观!左侧有一个新的导航结构,还有大量的新内容。我们相信至少有一件新事物供您学习

ClickHouse v22.4

我们定期发布的 4 月份版本中包含哪些内容

  1. 事务 作为(高度实验性的)预览功能可用。BEGIN TRANSACTIONCOMMITROLLBACK语句支持对多个表和物化视图进行原子插入,以及从单个快照进行一致且隔离的读取。这里还有更多内容,敬请期待!
  2. Keeper 负载均衡 现在,您可以指定 ClickHouse 实例如何选择要连接到的 (ClickHouse) Keeper 或 (Apache) ZooKeeper 实例。新的 config.xml 设置为 <zookeeper_load_balancing>,可能的值为 random(默认)、in_ordernearest_hostnamefirst_or_randomround_robin。当您有彼此相距很远的不同 Keeper 节点时,这有助于确保 ClickHouse 和 Keeper 之间的低延迟。
  3. 表元数据缓存 一个新的表设置 use_metadata_cache 使用嵌入式 RocksDB 引擎缓存表元数据。当 ClickHouse 启动时,它将尝试从此缓存中读取,并在需要时回退到磁盘上的表文件。当您有大量数据块时(通常是由大量数据库、表和/或分区,或由创建大量块的非常高的插入量导致的),这很有用。在一个极端的例子(700k 个块)中,元数据缓存能够将启动时间从 75 分钟减少到 20 秒。
  4. Kafka 指标 Kafka 表引擎现在公开了一些指标,例如处理的消息数、错误数、无法解析的消息数。您可以在 system.metricssystem.events 表中找到这些指标。

  5. 缺失值填充 现在可以使用插值来填充结果集中的缺失值。例如,当您有按分钟的数据,但有时某一分钟的值可能缺失(完全缺失,或者可能仍在通过摄取管道传输并延迟到达),您可以使用 ClickHouse 使用前一个值代替,使用 ORDER BY toStartOfMinute(timestamp) WITH FILL INTERPOLATE (c AS c)。还可以使用更复杂的表达式。
  6. 月末最后一天 到目前为止,ClickHouse 的日期函数会舍入到时间段的开始( toStartOf[Year|Month|Week|Day|Hour|Minute|等.)。现在,如果您想舍入到一个月的最后一天,我们也有 toLastDayOfMonth(对财务和会计数据很有用)。
  7. H3 我们完善了对 H3 的支持,H3 是“六边形分层地理空间索引系统”,最初由 Uber 开发并开源。如果您还不知道它,请查看网站以及与其他系统(如 S2Geohash)的比较。

查看发布网络研讨会幻灯片,并请升级(除非您想保留在 LTS 版本上)。

本月查询:解释语句 – 查询优化

作为 ClickHouse 用户,您可以掌握的最重要的技能之一是查询优化。这将帮助您入门。

EXPLAIN 语法

如果您还不熟悉 EXPLAIN 语句,请访问文档并查看。在 ClickHouse 中调试查询时,这是您最好的朋友。您应该知道的此命令的第一个示例是 EXPLAIN SYNTAX。您可以像这样使用它

EXPLAIN SYNTAX
SELECT sum(number)
FROM (SELECT * FROM numbers(10000))
WHERE number <= 10

这将显示在任何语法优化后实际将要执行的查询。输出

┌─explain─────────────────┐
│ SELECT sum(number)      │
│ FROM                    │
│ (                       │	
│     SELECT number       │
│     FROM numbers(10000) │
│     WHERE number <= 10  │
│ )                       │
│ WHERE number <= 10      │
└─────────────────────────┘

您可以看到两件事

  1. 子查询中的通配符投影被替换为实际的列名 number
  2. 即使 WHERE 条件仅出现在外部,ClickHouse 也可以确定它也可以应用于子查询,以大幅减少选定的行数。

EXPLAIN PLAN

这将向我们显示查询计划。当查询速度缓慢时,它通常是您想要查看的第一件事,因为它将显示 ClickHouse 从磁盘读取了多少数据。例如,假设有两个 MergeTree 表,每个表都有 10 亿行,一个未排序,另一个已排序

CREATE TABLE numbers (number int) ENGINE = MergeTree ORDER BY tuple()
AS SELECT number FROM numbers(1e9)

CREATE TABLE numbers_sorted (number int) ENGINE = MergeTree ORDER BY number
AS SELECT number FROM numbers(1e9)

查询速度将大不相同

SELECT sum(number) FROM numbers WHERE number <= 10

1 rows in set. Elapsed: 0.688 sec. Processed 1.00 billion rows, 4.00 GB (1.45 billion rows/s., 5.81 GB/s.)

SELECT sum(number) FROM numbers_sorted WHERE number <= 10

1 rows in set. Elapsed: 0.007 sec. Processed 8.19 thousand rows, 32.77 KB (1.23 million rows/s., 4.90 MB/s.)

两个查询只需要 10 个值来计算其结果,但第一个查询必须读取整个表的全部 10 亿行,而第二个查询仅读取 8192 行(表的 index_granularity 的默认大小)。我们可以通过运行查询来查看 EXPLAIN PLAIN(输出已裁剪)的原因

EXPLAIN PLAN actions = 1, indexes = 1 SELECT [...] numbers [...]
┌─explain────────────┐
│ [...]              |
│ ReadFromMergeTree  │
│ ReadType: Default  │
│ Parts: 1           │
│ Granules: 122071   │
└────────────────────┘


EXPLAIN PLAN actions = 1, indexes = 1 SELECT [...] numbers_sorted [...]


┌─explain───────────────────────────────┐
│ [...]                                 │
│ ReadFromMergeTree                     │
│ ReadType: Default                     │
│ Parts: 1                              │
│ Granules: 1                           │
│ Indexes:                              │
│   PrimaryKey                          │
│     Keys:                             │
│       number                          │
│     Condition: (number in (-Inf, 10]) │
│     Parts: 1/1                        │
│     Granules: 1/122071                │
└───────────────────────────────────────┘

两个查询返回相同的结果(55,从 1 到 10 的数字之和),但第一个查询读取所有 122071 个数据块(每个数据块包含 8192 行,因此总共为 10 亿行的整个数据集),而第二个查询仅读取包含计算正确结果所需的十个数字的单个数据块。

每当您遇到缓慢的查询时,请运行 EXPLAIN,您可能会很快发现其缓慢的原因以及如何解决它。

补录

这些录制内容不像 TikTok 视频那样短,但如果您是 ClickHouse 用户,它们绝对值得您花时间观看。您可以以 2 倍的速度观看,使其感觉更像社交媒体。

阅读角

我们一直在阅读

  1. 响应时间提高 10 倍、运营成本更低以及存储空间减少 30%:Instabug 解释了他们为何选择 ClickHouse 作为其 APM 数据的数据库。老实说,这并不是一个艰难的决定!
  2. 两种尺寸适合大多数:PostgreSQL 和 Clickhouse:Gitlab 撰写了关于 ClickHouse 和 PostgreSQL 的文章,并且还在进行了一些基准测试,其中 ClickHouse 表现非常好!
  3. ClickHouse Keeper:有人使用 Kafka、Solr 和 Mesos 测试了 ClickHouse Keeper——并且一切正常!Keeper 不仅适用于 ClickHouse。
  4. 推出 Grafana 的官方 ClickHouse 插件:阅读有关新插件的信息,并查看您可以使用它创建的一些漂亮的仪表板。
  5. ClickHouse 文档焕然一新!:Rich 指出改进后的 Clickhouse 文档页面中的新内容。
  6. 新的 ClickHouse 用户:欢迎 Better StackPingCAPSynapsePiwikMarfeelDatafoldKaikoImprovado。也请将自己添加进来!

感谢阅读。我们下个月见!

ClickHouse 团队

分享此帖子

订阅我们的时事通讯

随时了解功能发布、产品路线图、支持和云产品!
正在加载表单…
关注我们
Twitter imageSlack imageGitHub image
Telegram imageMeetup imageRss image
©2024ClickHouse, Inc. 总部位于加利福尼亚州湾区和荷兰阿姆斯特丹。