以下文章来源于一臻数据 ,作者ADC张彬华
[
一臻数据 .
一臻数据致力于大数据AI时代的前沿内容分享,欢迎大家投稿,共建共进❗️
](#)
点击上方 蓝字 关注一臻数据👆
免费领取 一臻数据知识库 🔗 一起共建共进
❝
"小张,这个SQL怎么跑了5分钟还没出结果?"
"我明明昨天查过这个数据,怎么今天又要等这么久?"
"早会马上开始了,报表还在加载中..."
这些吐槽是否让你感同身受?作为一名DBA或数据工程师,你一定经历过被用户"围攻"的尴尬时刻。面对重复的查询需求,系统却像一位"健忘症患者",每次都要重新计算,这着实让人抓狂。
不过,今天我要介绍一位特别的"记忆大师" —— Doris SQL Cache,能够智能记住查询结果,让重复查询变得行云流水。从此,告别反复计算的烦恼,让你的系统性能起飞!
Doris的高效缓存引擎
每天早上9点,运营同事都会查询昨天的销售数据,每个人都在跑相同的SQL,系统压力山大。看着日益增长的并发请求,DBA表示很头疼...
在数据分析领域,重复查询是一个普遍现象。小王每天查看销售报表,小李每天统计用户增长,这些查询逻辑往往大同小异。如果每次查询都要重新计算,岂不是太浪费资源了?
Doris的SQL Cache好比一台懂事的咖啡机。第一杯咖啡需要现磨现煮,之后的咖啡就能直接享用了。它通过智能缓存查询结果,大幅提升查询性能。
当查询请求到达时,Doris会进行一系列精确的匹配:SQL文本是否相同?表的版本是否变化?权限是否一致? 就像咖啡师在确认你的口味和要求。只有所有条件都匹配,才能享受到缓存带来的快速响应。
我们来看一个销售数据分析的场景:
-- 设置当前会话开启SQL Cache set enable_sql_cache=true; -- 分析昨日销售数据 SELECT province, SUM(sales_amount) as total_sales, COUNT(DISTINCT user_id) as buyer_count FROM sales_detail WHERE dt = '2025-02-09' GROUP BY province;
第一次执行这个查询时,Doris会从BE节点获取数据并计算。之后相同的查询就能直接从缓存获取结果,响应时间从秒级降至毫秒级。这对于每天早上的销售分析报表简直就是一剂强心针。
Doris让缓存可管可控
光有缓存机制还不够,Doris还提供了丰富的SQL Cache监控指标,方便用户进行有效监控。
通过FE的HTTP接口,我们能看到缓存的命中次数:
# FE 的 HTTP 接口 http://${FE_IP}:${FE_HTTP_PORT}/metrics # 代表已经把 1 个 SQL 写入到缓存中 doris_fe_cache_added{type="sql"} 1 # 代表命中了两次 SQL Cache doris_fe_cache_hit{type="sql"} 2
通过BE的指标,我们能掌握缓存占用的内存大小:
# BE 的 HTTP 接口 http://${BE_IP}:${BE_HTTP_PORT}/metrics # 代表当前 BE 的内存中存在 1205 个 Cache doris_be_query_cache_sql_total_count 1205 # 当前所有 Cache 占用 BE 内存 44k doris_be_query_cache_memory_total_byte 44101
这些数据好比是给缓存装上了个"体检仪",让我们随时掌握它的健康状况。
为了避免缓存过度占用内存,Doris还提供了灵活的内存控制机制:
1. FE 内存控制
-- 最多存放 100 个 Cache 元数据,超过时自动释放最近最久未使用的元数据。默认值为 100。 ADMIN SET FRONTEND CONFIG ('sql_cache_manage_num'='100'); -- 当 300 秒未访问该 Cache 元数据后,自动进行释放。默认值为 300。 ADMIN SET FRONTEND CONFIG ('expire_sql_cache_in_fe_second'='300'); -- 默认超过 3000 行结果时,不创建 SQL Cache。 ADMIN SET FRONTEND CONFIG ('cache_result_max_row_count'='3000'); -- 默认超过 30M 时,不创建 SQL Cache。 ADMIN SET FRONTEND CONFIG ('cache_result_max_data_size'='31457280');
2. BE 内存控制
-- 当 Cache 的内存空间超过 query_cache_max_size_mb + query_cache_elasticity_size_mb 时, -- 释放最近最久未使用的 Cache,直至占用内存低于 query_cache_max_size_mb。 query_cache_max_size_mb = 256 query_cache_elasticity_size_mb = 128
这不就是给咖啡机设置了储水量上限,既保证了性能,又避免了资源浪费。
实践案例,化腐朽为神奇
回到开头。小张是某电商平台的DBA,遇到了一个棘手的问题:每天早上9点,系统CPU使用率飙升到90%,响应时间从毫秒级飙升到秒级。经过排查发现,这个时间点有大量运营人员在查询昨日销售数据。
让我们看看小张如何借助Doris SQL Cache发挥最大效力:
时间窗口优化
销售数据分析中,我们经常会用到now()函数获取当前时间。每一秒钟,这个函数的返回值都在变化,导致缓存频繁失效。聪明的做法是把时间粒度调整得更粗一些:
-- 优化前:缓存效果差 SELECT * FROM sales WHERE create_time > now(); -- 优化后:一天内都能复用缓存 SELECT * FROM sales WHERE dt = DATE(now());
查询模式优化
在报表分析场景中,我们常常需要统计各种维度的数据。与其每个维度单独查询,不如把相关维度的统计合并到一个查询中:
-- 优化前:多次查询,缓存效果差 SELECT COUNT(*) FROM orders WHERE dt='2025-02-08'; SELECT SUM(amount) FROM orders WHERE dt='2025-02-08'; -- 优化后:一次查询,充分利用缓存 SELECT COUNT(*) as order_count, SUM(amount) as total_amount FROM orders WHERE dt='2025-02-08';
...
通过开启SQL Cache并优化查询模式,问题得到了完美解决,化腐朽为神奇:
- CPU使用率降到了50%以下
- 查询响应时间从2秒降到了50毫秒
- 运营团队再也不用担心系统卡顿了
小张的经验告诉我们:SQL Cache不仅能提升查询性能,还能大幅降低系统资源消耗。
下期,我们将一起探讨其它更有趣有用有价值的内容,敬请期待!
另外,整理了份《一臻数据知识库》,其中包含 Apache Doris和 Data+AI 的学习资料、学习课程、白皮书、研究报告、行业标准 和 实践指南 等内容,会持续更新,欢迎关注公众号,免费领取。
资料获取 🔗 欢迎扫描下方二维码图片 备注【Doris】免费领取❗️
往期推荐
[
走进开源,拥抱开源
](http://mp.weixin.qq.com/s?__b...
[
大数据平台开发规范示例
](http://mp.weixin.qq.com/s?__b...
[
大数据仓库开发规范示例
](http://mp.weixin.qq.com/s?__b...
[
大数据质量管制规范示例
](http://mp.weixin.qq.com/s?__b...
[
Flink CDC 1.0至3.0回忆录
](http://mp.weixin.qq.com/s?__b...
[
【Apache Doris】Manager 极致丝滑地运维管理
](http://mp.weixin.qq.com/s?__b...
[
【Apache Doris】如何实现高并发点查?(原理+实践全析)
](http://mp.weixin.qq.com/s?__b...
[
为什么Apache Doris适合做大数据的复杂计算,MySQL不适合?
](http://mp.weixin.qq.com/s?__b...
[
深夜无需加班,Apache Doris让数据自己会跑
](http://mp.weixin.qq.com/s?__b...
[
别让你的CPU打盹儿:Apache Doris并行执行原理大揭秘!
](http://mp.weixin.qq.com/s?__b...
[
如何正确地使用ChatGPT(角色扮演+提示工程)
](http://mp.weixin.qq.com/s?__b...
[](http://mp.weixin.qq.com/s?__b...
[](http://mp.weixin.qq.com/s?__b...
超强满血不收费的AI绘图教程来了(在线Stable Diffusion一键即用)
点击下方蓝字关注一臻数据
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。