前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >揭开 ClickHouse 快的面纱

揭开 ClickHouse 快的面纱

作者头像
大数据技术架构
修改2020-05-31 19:37:58
7.5K0
修改2020-05-31 19:37:58
举报

https://www.jianshu.com/p/f9a54193dc63


背景

其实早在去年我们就已经开始接触并研究clickhouse了,因为当时进行多表关联测试性能并不是特别优秀,所以并没有在线上大范围使用,当时研究的是分布式部署 (感觉分布式会比单机好一些)最后发现性能并不怎么样 而且分布式的sql也有很多限制,不支持单条删除和更新操作、不支持in和join(当时的版本,18.12.14之前),直到前几天看了携程一篇关于clickhouse的文章,将clickhouse的性能描述的神乎其神,再次勾起了我研究的欲望,附携程公众号文章 干货 | 每天十亿级数据更新,秒出查询结果,ClickHouse在携程酒店的应用

测试

开始之前我们先看结果:

1

携程的case

clickhouse 版本:18.12.13

服务器配置:

参数

配置

CPU

40c

内存

128g

硬盘

SSD

虚拟内存

禁用

数据:

数据量

A

1000w

B

2000w

C

6000w

D

2.4亿

测试场景:

case

时间

A + B +C 三表关联聚合查询

190ms

B + D 关联聚合查询

390ms

A + B +D 三表关联聚合查询

640ms

根据携程给的一份查询统计数据来看他们基于clickhouse的分析需求90%在500ms内:

1

易企秀测试case

clickhouse 版本:18.12.13

服务器配置:

参数

配置

CPU

32c

内存

128g

硬盘

SSD

虚拟内存

禁用

数据:

数据量

A

4000w

B

1.3亿

测试场景:

case

时间

B 单表聚合排序

2s

B + D 关联聚合排序

11s

单表聚合:

多表关联聚合:

通过对比测试,在配置相当的情况下测试结果差距还是很大的,那么究竟是什么原因造成的呢?该如何进行优化...

过程再现

1

调参

网上有人说通过调大 max_memory_usage 与 max_bytes_before_external_group_by 的值可改善查询性能(主要是处理并发query或单次查询内存约束的)

SET max_memory_usage = 128000000000; #128G,
SET max_memory_usage = 60000000000; #60G,

实际测试这种操作,性能并没有任何影响,但在16C 、68G、普通硬盘环境下的clickhouse调大这两个参数的值性能会有一倍提升。

2

优化建表语句

建表语句:

通过缩小分区数量性能略有提升,但不明显

3

优化SQL

JOIN操作时一定要把数据量小的表放在右边,ClickHouse中无论是Left Join 、Right Join还是Inner Join永远都是拿着右表中的每一条记录到左表中查找该记录是否存在,所以右表必须是小表。

4

优化engine

将普通的mergetree engin 改为特殊的memory engine,性能无任何变化。

memory engine:

5

io 排查

通过测试过程中对硬盘io的监控数据看,clickhouse在计算的过程中基本没有什么io操作,只是在最后一个阶段有1-2s的写io操作,这也侧面印证mergetree的强大。

那么问题来了 ,这些都没有明显改善,那携程的case是怎么快起来的呢?

初步怀疑携程case中的操作并没有使用到全表数据,应该在聚合前加了很多筛选条件,带着疑问邮件了上文的作者,结论如下:

邮件:

携程多表关联聚合的真实case:

6

我们调参后的case

秒查:

结论

1、使用SSD盘比普通盘性能会提升1倍 2、亿级别单表聚合排序最慢2s出结果,普通盘需4秒 3、多表关联需增加过滤条件,将聚合结果控制在千万级别内可秒出 4、join时大表在左小表在右 5、如果不想加where条件,那么可以提前构建大宽表或者预计算 6、按照我们业务量级上面服务器配置减半并不影响性能

其实clickhouse并不需要做什么优化,100个并发内单表分析可随意操作,体验极佳;多表分析需根据实际使用场景针对性优化

普通盘:

认为是对的 坚持下去 就是对的,认为是对的 不去坚持 最后可能就是错的

目前我们实时数仓除了使用clickhouse外,还在使用另外一个秒查引擎,亿级规模场景下分析,这个engine是真的秒查哦 SnappyData(https://www.jianshu.com/p/ccad1333c48d)

近期回顾

1、你可能不知道的Redis用法

2、Spark 设置指定 JDK 的正确姿势

3、玩转HBase百亿级数据扫描

4、一份超详细的 Spark 入门介绍

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据技术架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 认为是对的 坚持下去 就是对的,认为是对的 不去坚持 最后可能就是错的
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档