6.8.3.12 使用 SQL Cache 加速查询¶
1 工作原理¶
关于 SQL Cache
详细实现原理,请参考查询缓存( SQL Cache
)
2 调优案例¶
下面通过案例说明如何在 Doris
中启用和使用 SQL Cache
:
-
确保
fe.conf
中的cache_enable_sql_mode
设置为true
(默认为true
):Bash 1 2
vim fe/conf/fe.conf cache_enable_sql_mode=true
-
在
MySQL
命令行中设置变量:SQL 1
MySQL [(none)]> set global enable_sql_cache=true;
注意:
GLOBAL
表示全局变量,不仅仅指当前会话。 -
在
Doris 2.1.3
及以上版本中,可以通过以下命令控制缓存键信息的数量和清除时间:SQL 1 2
MySQL [(none)]> ADMIN SET FRONTEND CONFIG ('sql_cache_manage_num' = '100'); MySQL [(none)]> ADMIN SET FRONTEND CONFIG ('expire_sql_cache_in_fe_second' = '300');
-
执行查询:
假设我们有一个名为
sales
的表,包含日期、产品和销售额信息,需要查询过去30
天每个产品的总销售额:SQL 1 2 3 4 5 6
SELECT product, SUM(amount) as total_sales FROM sales WHERE date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) GROUP BY product ORDER BY total_sales DESC LIMIT 10;
第一次执行这个查询时,
Doris
会从BE
获取结果并将其存入缓存。之后再次执行相同的查询时,如果数据没有更新,结果将直接从缓存中获取,从而大大提高查询速度。 -
缓存条件
在首次查询后,如果满足以下三个条件,查询结果将被缓存:
-
(当前时间 - 查询分区的最后更新时间)
大于fe.conf
中的cache_last_version_interval_second
。 -
查询结果行数小于
fe.conf
中的cache_result_max_row_count
。 -
查询结果字节数小于
fe.conf
中的cache_result_max_data_size
。
-
3 总结¶
SQL Cache
是 Doris
提供的一种查询优化机制,可以显著提升查询性能。在使用的时候需要注意:
-
SQL Cache
不适用于包含生成随机值的函数(如random()
)的查询,因为这会导致查询结果失去随机性。 -
目前不支持使用部分指标的缓存结果来满足查询更多指标的需求。例如,之前查询了
2
个指标的缓存不能用于查询3
个指标的情况。 -
通过合理使用
SQL Cache
,可以显著提升Doris
的查询性能,特别是在数据更新频率较低的场景中。在实际应用中,需要根据具体的数据特征和查询模式来调整缓存参数,以获得最佳的性能提升。