随着 Apache Doris 在越来越多的企业中得到落地和应用,越来越多用户开始关注如何在海量数据下对Doris的查询性能进行优化。有哪些性能优化的小技巧?如何降低查询耗时?数据模型和分区分桶策略该如何设计?针对慢查询该如何进行分析及优化?
OSCHINA 本期高手问答 1月18日-1月24日,来自百度的资深研发工程师、Apache Doris PPMC 缪翎,与大家一起探讨 Apache Doris 性能优化实战技巧,包括但不限于:
- 慢查询定位、Profile 解读及SQL优化;
- 数据模型、索引及分区分桶策略设计;
- 物化视图及Rollup使用技巧;
- Doris查询优化器解读;
嘉宾介绍
缪翎,百度资深研发工程师、Apache Doris PPMC,专注于 Apache Doris 查询引擎的设计和研发,在数据库查询引擎、查询优化器方向有丰富的研究和实践经验。
问答汇总
问:请教一个具体场景的问题,在 Apache Doris 中,如果表按天分区,每天大约 2000 至 3000 万数据量,通常按照业务字段查询最近 30 天的明细信息。如何设计能支持更多的并发查询呢?
答:如果是明细查询,建议利用前缀索引、分桶分区裁剪以及 Bitmap 索引这类的优化策略。
问:进一步了解下,如果是 Uniq 数据模型,在查询的过程中存在对数据的 update 操作,那么对查询会有哪些影响呢?
答:update 操作可以,如果 update 的操作频率和导入占比很小,就不会对查询有影响。
问:
1. 开源 Doris 和 Clickhouse 之间的优势和劣势是什么?
2. Doris 在多线程设计上,有没有使用什么设计模式?
3. Doris 入门门槛高吗?超过多大的数据量比较合适使用 Doris ?哪些场景下特别适合doris数据库的发挥优势?哪些场景下 Doris 的性能不好?
答:Doris 是 MPP 架构的数据库,这点是和 Clickhouse 从架构上有本质的不同。Doris 在 多表 Join 和分布式管理上更有优势,Clickhouse 单机性能突出。不过我们的向量化引擎也马上就能和大家见面了,性能上可以期待一下。
Doris 入门门槛不高,G-TB的数据量都适合使用。Doris 因为没有其他依赖,所以运维会方便一些。 场景方面,当然是面向分析的 OLAP 场景。OLTP 场景,比如 qps 上万的点查这类以及频繁的 update/delete的场景并不适合 Doris。
问: Doris 集群 不定期的出现某个 BE 节点直接挂掉的情况,每次挂掉的 BE 节点并不一样。查看监控看机器 Load 比较高(主要是磁盘IO write高)怎么排查这个问题,怎么知道这台机器上在做什么,有什么命令可以知道。
答:BE 挂掉最常见的两种情况:
1. oom 被系统 Kill,通过 dmesg 方式排查,并且结合使用方式确定 导入还是查询导致的内存使用量过大,需要优化使用方式。
2. be core 了,通过 core dump 方式找到 core 栈,core 栈就可以看到是哪部分行为导致的 BE 挂掉。并且在 Issue 里面搜索,看是否是 Doris 旧版本已知问题。每次不一样节点,那就要逐个分析,可能虽然节点不一样但原因都一样。
问:core dump 这个文件存放在哪里的?
答:core dump文件存放地址可以
OSC哒哒 
![[爱了]](/js/img/d1.gif)
![[尴尬]](/js/img/d16.gif)