高手问答第 275 期 —— 聊聊 Apache Doris 的性能优化实战技巧

OSC哒哒 发布于 2022/01/17 14:27
阅读 10K+
收藏 11

随着 Apache Doris 在越来越多的企业中得到落地和应用,越来越多用户开始关注如何在海量数据下对Doris的查询性能进行优化。有哪些性能优化的小技巧?如何降低查询耗时?数据模型和分区分桶策略该如何设计?针对慢查询该如何进行分析及优化?

OSCHINA 本期高手问答 1月18日-1月24日,我们邀请到来自百度的资深研发工程师、Apache Doris PPMC @缪翎老师 @ApacheDoris ,与大家一起探讨 Apache Doris 性能优化实战技巧。可讨论的问题包括但不限于:

  • 慢查询定位、Profile 解读及SQL优化;
  • 数据模型、索引及分区分桶策略设计;
  • 物化视图及Rollup使用技巧;
  • Doris查询优化器解读;

如有其他相关的问题,也欢迎提问。

嘉宾介绍

缪翎,百度资深研发工程师、Apache Doris PPMC,专注于 Apache Doris 查询引擎的设计和研发,在数据库查询引擎、查询优化器方向有丰富的研究和实践经验。

为了鼓励大家踊跃提问,Apache Doris 社区将会在问答结束后从提问者抽取5位幸运用户赠予Apache Doris 社区周边礼物。

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就相关问题向 @缪翎老师 老师提问,直接回帖提问即可。

 

加载中
2
小白兔爱吃大灰狼
小白兔爱吃大灰狼

高手问答第 275 期 —— 聊聊 Apache Doris 的性能优化实战技巧

@肥皂泡2   @pyboy58  @DK8   @Li_Peng     @osc_803xfq08 

恭喜以上五位网友分别获得   Apache Doris 社区周边礼物一件;
请于2月7日前登陆账号,   私信    @小白兔爱吃大灰狼        告知快递信息(格式:姓名+电话+地址)
南方Go
南方Go
66
2
Li_Peng
Li_Peng

@Ling缪 你好!请教一个具体场景的问题,在Doris中,如果表按天分区,每天大约2000~3000万数据量,通常按照业务字段查询最近30天的明细信息。如何设计能支持更多的并发查询呢?

L
Ling缪
回复 @Li_Peng : update 操作可以,如果update的操作频率和导入占比很小。就不会对查询有影响。
Li_Peng
Li_Peng
回复 @Ling缪 : 感谢回复,想进一步了解下,如果是Uniq数据模型,在查询的过程中,存在对数据的update操作,那么对查询会有哪些影响呢?
L
Ling缪
如果是明细查询,建议利用前缀索引,分桶分区裁剪以及bitmap索引这类的优化策略~
2
南方Go
南方Go

@Ling缪    1.  开源 Doris 和clickhouse之间的优势和劣势是什么?

2.  Doris 在多线程设计上,有没有使用什么设计模式?

3.  Doris 入门门槛高吗?超过多大的数据量比较合适使用doris?  

哪些场景下特别适合doris数据库的发挥优势   ?  哪些场景下doris的性能不好?

luzhijing
luzhijing
回复 @osc_78139341 :列存模型和函数框架上有部分借鉴了Clickhouse,这个也是与Clickhouse社区进行过沟通的~
osc_78139341
osc_78139341
回复 @Ling缪 : Doris的向量化引擎是不是使用了ClickHouse的框架???
L
Ling缪
接上条,OLTP 场景并不适合 Doris,比如qps 上万的点查这类,以及频繁的 update,delete的场景并不适合 doris
L
Ling缪
Doris 是 MPP 架构的数据库,这点是和 clickhouse 从架构上有本质的不同。 Doris 在 join 分布式存储上更有优势,Clickhouse 单机性能王者。不过我们的向量化引擎也马上就能和大家见面了,性能上可以期待一下~ 入门门槛不高,G ~TB 都可,Doris 因为没有其他依赖,所以运维会方便一些~ 场景的话,当然是 OLAP 场景啦,分析型的都可以。
2
肥皂泡2
肥皂泡2

@Ling缪  你好,我们doris集群  不定期的出现某个be节点直接挂掉的情况。查看监控看机器load比较高(主要是磁盘io write高)怎么排查这个问题,怎么知道这台机器上在做什么,有什么命令可以知道。

关键是每次挂掉的be节点 还不一样。。。

ApacheDoris
ApacheDoris
回复 @肥皂泡2 : 可以参考一下这个链接 https://www.jianshu.com/p/60a5df15093c
肥皂泡2
肥皂泡2
回复 @Ling缪 : 怎么找不到 core dump 这个文件,这个存放在哪里的?我按照网上说的找,没有找到。
L
Ling缪
每次不一样节点,那就要逐个分析,可能虽然节点不一样但原因都一样。
L
Ling缪
BE 挂掉最常见的两种情况: 1. oom 被系统 Kill,通过 dmesg 方式排查。并且结合使用方式确定是 导入还是查询导致的 内存使用量过大,优化使用方式 2. be core 了,通过 core dump 方式找到 core 栈,core 栈就可以看到是哪部分行为导致的 be 挂掉。并且在issue 里面搜索,看是否是 Doris 旧版本已知问题。
2
o
osc_803xfq08

@Ling缪 您好,有几个问题想请教一下:

1:在做100-200个相同sql并发测试时,总是越往后面的查询,尤其是做group by的时候,看profile,越慢,好像哪里卡住了似的,这个应该怎么定位是哪里的问题?
2: 在做broker导入数据时,也总偶然碰到查询超时,而且这个问题是必现,我怎么定位问题,还请给点指点。

L
Ling缪
1. 这种qps 性能分析问题,主要工具是 pprof ,看看cpu 集中耗时在哪里 2. 导入过程中的查询超时,建议先看监控,grafana 上的数据。比如是否导入占用了过多的 IO, 或者 cpu等。导致了相互影响。在逐步根据 pprof + 代码分析
2
DK8
DK8

@Ling缪 请教下 doris 6个be 聚合模型下 用天date做时间分区 每天数据近2亿行 发现select max(date)  性能很差 接近10秒 看了下执行计划 发现全表扫描了 这样设计的主要考虑是什么呢

建议对于分区字段或者索引字段 比较常用 能否增加一些元信息 优化查询这些列的查询性能

DK8
DK8
回复 @Ling缪 : 好的 多谢 发现where中加了分区字段 剩下的分区也是全分区扫描的 建议后续补全下类似字段的元数据哈
L
Ling缪
确实,如果对Range分区字段求 max 或者min 等,逻辑上可以只读最大分区数据。Doris 没对这种特殊场景做优化,所以是全表。需要增加 where 条件从而匹配到分区分桶裁剪,才能减少数据量。比如这样写 select max(date) from table where date >xxx。 分区字段和索引字段需要出现在 where 条件中效果最好。
1
十方空烬
十方空烬

@Ling缪 老师你好,想问一下,关于性能优化这方面,与数据类型是否有什么关联,各种数据源中的表联合查询的时候,对于复杂类型的性能优化是从哪方面着手的?

L
Ling缪
和数据类型关系还是很大的。 比如 int 类型的性能就会比 string 要好。 复杂类型的性能优化我举个 bitmap 的例子。 bitmap 的聚合函数在 bitmap 分布相对稠密情况下,会比稀疏的要性能高不少。
1
DK8
DK8

@Ling缪 您好 请教下 对于聚合模型,MODIFY COLUMN 某一个已经存在的列, 从类型 BIGINT 变更为 VARCHAR, 该表按每天分区,每天数据量1亿+,发现该表这一列历史数据过多,一直处于SCHEMA_CHANGE【 state is not NORMAL】 状态 (大概5小时),导致后续其他的增加列,增加动态分区都不断失败重试,直到表恢复NORMAL状态才成功

请教下 对于这种情况 有什么建议吗

L
Ling缪
同一时间 单个表只能做一个 schema change 操作。所以你做第一个schema change 的时候后面的增加列,增加分区都被禁止了。 schema change 的时间过长主要原因是你的表数据量大导致的。对于这种大表的表结构变更最好是等到业务不太忙的时候,比如半夜。 再者,如果需要多次schema change 建议合并为一次。
0
不方便说
不方便说

@Ling缪   老师如何看待apache越来越多的使用java组件?而java组件的暴lei越来越频繁?

L
Ling缪
回复 @141319垚 : String 是今年新加入的功能,在功能和性能方面还在改善中。今年上半年会持续对 string 进行优化,如果有string 方面的使用问题,欢迎给dev 邮件组发邮件。dev@doris.apache.org
141319垚
141319垚
回复 @Ling缪 : 请问,String类型在使用上有比较多的bug,后续有在完善吗,预计哪个版本会比较稳定呢?
L
Ling缪
用什么语言还是要看产品的定位和开发者的技术栈,Doris 就是 JAVA + C++ 的 ~
0
艾小甜
艾小甜

@Ling缪 越来越多的企业使用Doris,但是使用过程中也越多一些bug,甚至说遇到的很频繁,对于doris的编码质量,后续有没有策略或者计划,提升产品质量。

L
Ling缪
开源 Doris 目前在快速迭代中,为了保证稳定性,我们正在准备将测试框架开源给社区。
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部