
ClickHouse 冷热数据存储策略配置实战基于 Disk Cache 的 S3 极速查询验证在大促中场阶段数仓分析团队与业务决策层对历史跨年数据的查询频次开始显著上升采销团队需要对比 2025 年同期的商品动销率财务团队需要调取前 3 个季度的商户分润账本。这些历史冷数据早已通过我们在战前配置的ClickHouse Storage Policy 存储策略全量沉降到了成本极低的S3 / OSS 对象存储中。在很多大数据架构师的刻板印象中“只要数据存进了 S3查询就一定会慢得像蜗牛”。然而在真实的大促线上实测中业务人员在查询位于 S3 上的 2025 年百亿行历史宽表时单次查询平均耗时居然稳定在 0.04 秒40 毫秒的极速区间支撑 S3 冷数据跑出媲美本地裸金属闪存性能的秘密武器正是 ClickHouse 内置的**“本地 60GB LRU 磁盘读缓存Local Disk Cache 微架构”**深入分析system.filesystem_cache与system.part_log系统表看清本地缓存是如何兼顾“超低存储成本”与“极致查询性能”的。[ClickHouse 基于 S3 本地 60GB LRU 读缓存查询物理执行流] [业务发起历史跨年订单分析 SQL] │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 阶段一: 本地 LRU 磁盘缓存探针 (Local Disk Cache Check) │ │ - 检查 /disks/s3_cache/ 目录中是否存在对应 Part 块的缓存 │ └──────────────────────────────┬──────────────────────────────┘ │ ┌─────────────────────┴─────────────────────┐ │ │ 【未命中缓存 (首次冷查询)】 【命中缓存 (二次热查询 - 占比 92%)】 │ │ ▼ ▼ ┌─────────────────────────────┐ ┌─────────────────────────────┐ │ 发起 S3 GetObject HTTP 下载 │ │ 纯本地 NVMe 极速直接读取! │ │ 自动在本地写入 60GB 缓存池 │ │ 发生了整整 0 次 S3 网络请求!│ │ 耗时: 1.85 秒 │ │ 耗时: 0.04 秒 (提速 46 倍!) │ └─────────────────────────────┘ └─────────────────────────────┘核心微架构本地磁盘读缓存Filesystem Cache的物理实现在cold_s3_disk配置中我们声明了cache_enabledtrue/cache_enabled按需分块流式加载Chunk-based Streaming LoadClickHouse 并不会笨拙地一次性把几个 G 的整个 Part 文件全部从 S3 下载下来而是仅下载当前 SQL 所涉及的那几个列的 1MB 数据块Block并自动写入本地/disks/s3_cache/目录LRU 智能热度淘汰Least Recently Used Eviction当本地缓存占用达到60GB 硬上限时后台缓存管理器自动淘汰那些最久未被访问的冷块永远保持高频温数据在本地常驻。-- 生产级实战验证监控 ClickHouse 本地 S3 缓存命中率与状态 SELECT cache_path, formatReadableSize(max_size) AS max_cache_size, formatReadableSize(current_size) AS current_used_size, elements_count, -- 核心命中率指标: 命中次数 / (命中 未命中) ROUND(hits / (hits misses) * 100, 2) AS cache_hit_ratio_pct FROM system.filesystem_cache;真实生产性能实测对比我们在包含1.8 PB 历史数据、单表 250 亿行明细的 ClickHouse 集群上进行了对比测试-- 测试 SQL: 查询 2025 年 Q3 各品类成交额汇总 SELECT category_id, SUM(pay_amount) AS total_gmv, COUNT(order_id) AS total_orders FROM t_trade_order_lake WHERE gmt_pay 2025-07-01 00:00:00 AND gmt_pay 2025-10-01 00:00:00 GROUP BY category_id;访问状态物理数据读取路径扫描数据量单次查询耗时S3 网络 API 产生费用首次冷启动查询 (Cold Start)S3 对象存储 ──▶ 下载并写入缓存1.2 GB1.85 秒0.002 元 (单次 GetObject)二次热查询 (Warm Cache)本地 60GB NVMe 磁盘缓存直出1.2 GB0.04 秒 (40ms!)0.00 元 (0 网络请求)全本地 NVMe 方案 (基准)纯本地 NVMe SSD1.2 GB0.038 秒0.00 元 (但硬件成本高 10 倍)生产实战成效在大促中场历史数据分析实战中依靠 60GB 的精巧本地读缓存全网历史分析报表的本地缓存命中率稳定在 92.4%使得超过九成的历史分析查询在40 毫秒以内极速直出既享受了 S3 对象存储带来的90.4% 的巨额存储降本红利又保留了媲美全本地高速闪存的极致交互体验