在doris中,虽然他是基于列式存储,查询速度很快。但是在实际的业务场景中,我们一般表的设计都会比较复杂,业务场景中编写的sql语句也会比较复杂。此时由于业务的复杂性,其实还是会出现查询较慢的情况。所以基于此,我们还是需要做一些相关的优化。本文主要介绍的是doris中使用sql cache查询缓存的案例。
sql cache是 Doris 提供的一种查询优化机制,可以显著提升查询性能。它通过缓存查询结果来减少重复计算,适用于数据更新频率较低的场景。
sql cache比较适用的场景有:
1、数据T+1更新,即每日凌晨固定更新前一天的数据,这种数据更新之后不容易出现再次变更,那么使用sql cache查询缓存就非常实用,第一次查询走doris,第二次查询直接走doris的缓存拿数据。 2、常年不变的表数据查询,这种数据也是不容易出现变更的,此时理由sql cache可以极大的提高查询效率。
根据上诉的场景介绍,我们其实也就能大概猜测出doris sql cache的查询原理了,在实际的doris使用中,整个sql cache涉及到fe和be部分:
1、fe部分:
当 FE 接收到查询请求时,它首先会在内存中利用 SQL 字符串进行查找,判断之前是否执行过相同的查询,并尝试获取该查询的元数据信息,这些信息包括查询所涉及表的版本以及分区的版本。 若这些元数据信息保持不变,则说明相应表的数据未发生变更,因此可以重复利用之前的 SQL Cache。在这种情况下,FE 能够跳过 SQL 解析优化流程,直接依据一致性哈希算法定位到对应的 BE,并尝试从中检索查询结果。
2、be部分:
在大多数情况下,SQL Cache 的结果会通过一致性哈希方法选择一个 BE,并将其存放在该 BE 的内存中。这些结果以 HashMap 的结构进行存储。当读写 Cache 的请求到来时,系统会使用 SQL 字符串等元数据信息的摘要作为 Key,从 HashMap 中快速检索结果数据进行操作。
那么急于doris的sql cache相关的操作如下:
1、开启sql cache
2、fe/be设置sql cache内存限制
3、查询是否命中sql cache缓存
4、sql cache缓存失效的原因
还没有评论,来说两句吧...