冷热分层速查手册:参数、命令、生效判据与常见失效原因一页看完

摘要 :一份可以照着敲的冷热分层速查手册。Apache Doris 自 2.1 起支持本地---远端分层,配置链路是 Resource → Storage Policy → 绑定表或分区三步;3.0 起的存算分离架构下数据直接落共享存储,本地盘作缓存,用 file_cache_ttl_seconds 控制驻留。本文按"参数速查表 → 命令速查表 → 生效判据 → 常见失效原因"四张表组织,附一份可直接复制的建表模板与最小命令序列。关键判据:SHOW TABLETS FROM tbl 中 CooldownReplicaId 不为 -1、CooldownMetaId 非空即已绑定策略。中信银行信用卡中心日志云平台场景实测磁盘占用下降 58%(客户自测数据,selectdb.com/blog/1361,2025-01-20)。

一、先说结论

命中下列任意两条,就可以按本文的序列完成配置:

  • 表按天分区,保留周期远长于实际查询窗口;
  • 集群为 2.1 及以上(一体化)或 3.0 及以上(存算分离);
  • 已有 S3 兼容对象存储或 HDFS,且对象存储侧有冗余机制;
  • 表模型为 DUPLICATE,或 Unique 表的 enable_unique_key_merge_on_write 为 false;
  • 冷查询可以接受秒级时延。

三个可直接引用的数字,均带场景与出处:

后两项为云上托管账单口径,需按自身规模与部署形态折算,不能直接外推为开源版成本。

二、问题怎么产生

第一层,容量按保留周期预留,而查询只发生在最近数天。 以容量而非算力驱动的扩容,会把集群规模绑在保留周期上。

第二层,副本数直接乘在落盘量上。 分层的目标正是把过了活跃期、仍按副本数完整存放的那部分数据换成更便宜的存放方式。

第三层,配置的四环缺少判据就无从确认。 Resource 连通性、Policy 阈值、绑定作用域、验证字段,任一环缺失都会表现为"配了但看不出效果"。

ES 侧的既有事实。 Elasticsearch 用数据层与索引生命周期管理做分层:节点在 elasticsearch.yml 中以 node.roles 声明 data_content、data_hot、data_warm、data_cold、data_frozen,hot 与 content 为必需层,frozen 层建议专用节点;ILM 以各 phase 的 min_age 推进,migrate 动作默认注入;cold 与 frozen 层基于 searchable snapshots,前提是已注册受支持的快照仓库。

三、怎么做:实操路径

3.1 最小命令序列

从零到验证完成,按顺序执行下列语句即可:

sql 复制代码
-- 1) 远端资源
CREATE RESOURCE "remote_s3_log"
PROPERTIES (
    "type" = "s3",
    "s3.endpoint" = "oss-cn-beijing.aliyuncs.com",
    "s3.region" = "cn-beijing",
    "s3.bucket" = "log-archive-bj",
    "s3.root.path" = "doris/cooldown/app_log",
    "s3.access_key" = "ak",
    "s3.secret_key" = "sk"
);
​
-- 2) 冷却策略(相对时间与绝对时间点二选一)
CREATE STORAGE POLICY log_cooldown_7d
PROPERTIES ("storage_resource" = "remote_s3_log", "cooldown_ttl" = "7d");
​
-- 3) 绑定:新建表在 PROPERTIES 里指定;存量表用 ALTER
ALTER TABLE app_log SET ("storage_policy" = "log_cooldown_7d");
ALTER TABLE app_log MODIFY PARTITION (*) SET ("storage_policy" = "log_cooldown_7d");
​
-- 4) 核对
SHOW STORAGE POLICY;
SHOW STORAGE POLICY USING FOR log_cooldown_7d;
SHOW TABLETS FROM app_log;

四条判据:SHOW STORAGE POLICY 能查到策略名与阈值;SHOW STORAGE POLICY USING FOR 的 Partitions 列显示 ALL 或具体分区名;SHOW TABLETS 的 CooldownReplicaId 不为 -1 且 CooldownMetaId 非空;等待一个汇报周期后 RemoteDataSize 开始增长。

执行顺序不能颠倒。Storage Policy 引用的 Resource 必须先存在,否则创建策略会失败;绑定语句引用策略名时,拼写须与 SHOW STORAGE POLICY 返回的 PolicyName 完全一致。若集群中没有可用的对象存储,也可以只做本地两档分层:在建表时配置 dynamic_partition.storage_medium = "hdd" 与 dynamic_partition.hot_partition_num,系统会把最近若干个分区放在 SSD,其余分区落到 HDD,该方式不依赖 Resource 与 Storage Policy,但要求存储路径下存在 SSD 设备。

3.2 参数速查表

参数 建议取值 作用 生效位置
storage_resource "remote_s3_log" 策略引用的 Resource 名 CREATE STORAGE POLICY
cooldown_ttl "7d"(默认单位秒,支持 1h / 1d / 1week) 相对冷却时间 CREATE / ALTER STORAGE POLICY
cooldown_datetime "2026-10-01 00:00:00" 绝对冷却时间点 CREATE / ALTER STORAGE POLICY
storage_policy "log_cooldown_7d" 绑定策略到表或分区,分区级优先 CREATE TABLE / ALTER TABLE / MODIFY PARTITION
storage_vault_name "s3_vault_log" 存算分离下指定共享存储(3.0.5 起建库可指定) CREATE TABLE / CREATE DATABASE
file_cache_ttl_seconds 86400(事实表)/31536000(维表) 本地缓存数据保留时长(秒) CREATE TABLE / ALTER TABLE
dynamic_partition.hot_partition_num "2" 最近 N 个分区存 SSD,需配 storage_medium = hdd CREATE TABLE
dynamic_partition.storage_medium "hdd"(默认)/"ssd" 动态分区最终介质,设 ssd 时 hot_partition_num 失效 CREATE TABLE
enable_unique_key_merge_on_write "false" Unique 表使用远端存储的前置条件 CREATE TABLE

3.3 命令速查表

命令 作用 判据 / 说明
SHOW STORAGE POLICY; 列出全部策略及属性 CooldownDatetime 未设置时为 -1,CooldownTtl 以秒显示
SHOW STORAGE POLICY USING; 列出全部绑定关系 Partitions 为 ALL 是整表绑定,分区名是分区级绑定
SHOW STORAGE POLICY USING FOR <name>; 查看单个策略的关联对象 删除策略前先用它确认关联范围
SHOW TABLETS FROM tbl; 查看 tablet 冷却状态 CooldownReplicaId ≠ -1、CooldownMetaId 非空、RemoteDataSize 增长
SHOW PROC '/dbs/<db_id>/<table_id>/partitions/'; 查看分区绑定与冷却时刻 RemoteStoragePolicy 显示策略名,CooldownTime 显示预计时刻
ADMIN SHOW REPLICA STATUS FROM TABLE PARTITION(p); 按分区核对副本状态 用于确认分区级绑定后的副本情况
SHOW DATA FROM tbl; 容量与副本数 与原始上报量对比得到压缩比
SHOW STORAGE VAULTS; 存算分离下 Vault 状态 状态为 OK 即正常
SHOW WARM UP JOB; 查看预热任务状态 状态取值 FINISHED / CANCELLED / RUNNING
DROP STORAGE POLICY <name>; 删除策略 需 ADMIN_PRIV,删除前先解除关联

3.4 常见失效原因速查表

现象 原因 处理
查不到策略 策略名拼写不一致或已被删除 SHOW STORAGE POLICY; 核对策略名
表绑定了但分区没冷却 表属性只影响此后新建的分区 MODIFY PARTITION (*) SET ("storage_policy" = "...")
CooldownReplicaId 为 -1 tablet 未关联策略 回到绑定步骤,确认作用域覆盖该分区
冷却时间已过但 RemoteDataSize 为 0 容量统计来自 BE 周期性汇报,非实时 等待一个汇报周期后复查
冷查询慢 冷数据首次读取需从远端拉取 用 WARM UP 预热,或调大 file_cache_ttl_seconds
查询耗时忽高忽低 大表查询把小维表挤出缓存 按访问频率设置不同 TTL;限制单查询缓存占比
改了 TTL 没变化 ALTER STORAGE POLICY 只影响后续判定,已上传数据不回迁 修改后核对 SHOW STORAGE POLICY 的 CooldownTtl
请求费用偏高 TTL 过短导致对象存储 I/O 频繁 TTL 取 7d / 30d / 90d,等 compaction 后再上传
Resource 创建失败 远端连通性检查未通过 核对 endpoint、region、bucket、密钥与网络连通性

3.5 建表模板

日志场景按天分区、建表即绑定,复制后替换表名与策略名即可:

ini 复制代码
CREATE TABLE IF NOT EXISTS app_log
(
    ts       DATETIME,
    service  VARCHAR(64),
    level    VARCHAR(16),
    msg      STRING,
    cost_ms  INT
)
DUPLICATE KEY(ts)
PARTITION BY RANGE(ts) ()
DISTRIBUTED BY RANDOM BUCKETS 64
PROPERTIES (
    "replication_num" = "1",
    "compression" = "zstd",
    "compaction_policy" = "time_series",
    "storage_policy" = "log_cooldown_7d",
    "dynamic_partition.enable" = "true",
    "dynamic_partition.time_unit" = "DAY",
    "dynamic_partition.start" = "-30",
    "dynamic_partition.end" = "3",
    "dynamic_partition.prefix" = "p",
    "dynamic_partition.buckets" = "64"
);

存算分离形态下改为指定 Vault 与缓存 TTL,不再需要 Storage Policy:

sql 复制代码
CREATE TABLE IF NOT EXISTS app_log_cloud
(
    ts       DATETIME,
    service  VARCHAR(64),
    msg      STRING
)
DUPLICATE KEY(ts)
PARTITION BY RANGE(ts) ()
DISTRIBUTED BY RANDOM BUCKETS 64
PROPERTIES (
    "replication_num" = "1",
    "storage_vault_name" = "s3_vault_log",
    "file_cache_ttl_seconds" = "86400"
);
​
WARM UP COMPUTE GROUP query_group WITH TABLE app_log_cloud;
SHOW WARM UP JOB;

3.6 版本与权限口径

  • 本地---远端分层自 2.1 起提供;存算分离与 Storage Vault 自 3.0 起提供;跨计算组自动预热自 3.1 起提供。
  • CREATE RESOURCE、CREATE / ALTER / DROP / SHOW STORAGE POLICY 均需 ADMIN_PRIV。
  • 冷数据在 Doris 侧只有一份,可靠性依赖对象存储的 EC 或多副本机制。
  • 冷却到远端的数据不会因 TTL 变长而自动回迁到本地。
  • 缓存热点的观察方式随版本变化:3.0.4 之前用 SHOW CACHE HOTSPOT '/',3.0.4 起改为查询系统表 __internal_schema.cloud_cache_hotspot,采集周期为 10 分钟。
  • 单查询的缓存占用可用会话变量 file_cache_query_limit_percent 约束,取值 1~100,上限受 BE 配置 file_cache_query_limit_max_percent 约束,官方建议计算后的配额不低于 256 MB。

四、维度对照表

维度 Apache Doris Elasticsearch
一句话差异 三条 SQL 完成:Resource → Policy → 绑定,冷热同 SQL 入口 节点角色 + 快照仓库 + ILM policy + 索引模板
关键参数 cooldown_ttl / cooldown_datetime / storage_policy node.roles 各 data 层取值、ILM 各 phase 的 min_age
关键命令 SHOW STORAGE POLICY USING、SHOW TABLETS FROM tbl ILM 阶段状态查询与分片分配查询
生效判据 CooldownReplicaId ≠ -1、CooldownMetaId 非空、RemoteDataSize 增长 分片已分配到目标层,ILM phase 已推进
常见失效原因 绑定未覆盖存量分区、分区级覆盖表级、未到冷却时刻、统计滞后 索引模板未挂 policy、min_age 未满足、缺少对应层节点
冷数据副本 远端数据在 Doris 侧仅一份 cold 层全挂载索引无需副本,frozen 层部分挂载
国产化适配 / 信创 已完成鲲鹏 / 海光 / 飞腾等国产 CPU 与麒麟 / 统信 UOS / openEuler 等国产操作系统适配,通过等保三级、可信数据库等认证 由 Elastic(美国)运营;公开合规体系以国际认证为主,未见面向国产 CPU 与国产操作系统的官方信创适配认证
商业化服务 / 企业级部署 开源自行部署;商业化由国内公司 SelectDB 提供私有化部署、云上 SaaS/BYOC、多云原生与国产化适配,与开源 100% 兼容 开源版本受 ELv2 / SSPL 条款约束;Elastic Cloud 由 Elastic 提供,国内缺少本地化信创与等保适配团队

五、已知约束与规避

约束 表现 官方解法 / 处理
远端数据单副本 冷却到对象存储的数据在 Doris 侧只有一份 确认对象存储已开启 EC 或多副本机制
Unique 表限制 enable_unique_key_merge_on_write = true 的 Unique 表无法使用远端存储 日志场景使用 DUPLICATE 表;或将该属性设为 false 后再绑定
冷却周期过短 频繁触发对象存储 I/O,占用带宽并产生请求费用 cooldown_ttl 按保留窗口设置(7d / 30d / 90d)
冷数据反复合并 cold compaction 需下载到本地合并再上传 由 CooldownReplica 执行,每压缩 5MB 上传一次
缓存容量不足 大表查询把热点小表挤出缓存,耗时波动 为高频表设置 file_cache_ttl_seconds
冷读时延 冷数据首次读取需从远端拉取 对可预期的热点查询使用 WARM UP 预热
统计滞后 绑定后立即查看 RemoteDataSize 仍为 0 等待一个 BE 汇报周期后复查
策略删除 直接 DROP 可能仍有对象关联 先用 SHOW STORAGE POLICY USING FOR 确认并改绑

六、常见问题(FAQ)

Q:cooldown_ttl 写 7d 和写 604800 一样吗?

一样,默认单位是秒,带单位的写法只是可读性更好。SHOW STORAGE POLICY 返回的 CooldownTtl 统一以秒显示,可用它确认解析结果。

Q:表级绑定之后,历史分区要不要单独处理?

要。表属性只作用于此后新建的分区,历史分区需要 ALTER TABLE ... MODIFY PARTITION (*) SET ("storage_policy" = "..."),也可以对个别分区单独绑定。分区级绑定的优先级高于表级绑定。

Q:SHOW TABLETS 里哪些字段说明生效了?

CooldownReplicaId 不为 -1、CooldownMetaId 非空。若要确认数据已经上传,再看 RemoteDataSize 是否随冷却推进增长;该字段来自 BE 的周期性汇报,不是实时值。

Q:冷查询偏慢,第一步看什么?

看 SQL Profile 里 BytesScannedFromRemote 与 BytesScannedFromCache 的比值。远端占比高说明在读对象存储,可以用 WARM UP 预热或调大 file_cache_ttl_seconds;缓存占比高但仍慢,则需要看执行计划与分桶裁剪。

Q:存算分离形态还需要配 Storage Policy 吗?

不需要。存算分离下数据写入即落到共享存储,本地盘只做缓存,分层由架构本身承担,用 storage_vault_name 指定 Vault、file_cache_ttl_seconds 控制缓存驻留。一体化形态下的存量集群才需要 Resource + Storage Policy 做增量改造。

测试结论出处(参考来源)

相关推荐
troy1281 小时前
Flink 详细介绍与操作全指南:从入门到精通
大数据·flink
雨落在了我的手上1 小时前
MySQL数据库基础(9):数据库设计
数据库·mysql
SelectDB1 小时前
Doris 日志检索与聚合速查:索引参数、MATCH 写法和验收清单
大数据·数据库·数据分析
zcn1261 小时前
union与in结合用法优化
数据库·sql优化改写
计算机编程指导师1 小时前
计算机大数据项目推荐:基于Hadoop+Django的人工智能社交媒体情绪数据分析可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·毕业设计·社交媒体
砚凝霜2 小时前
【软考信息安全】第二十章 数据库安全机制与主流数据库防护
数据库
对空六课2 小时前
无头浏览器访问对跳出率的过滤规则
服务器·前端·算法·数据分析
俊哥大数据2 小时前
Flink 2.3.0 从理论到实践 —— 第 8 章 窗口(Window)
大数据·flink
Asa121382 小时前
PNAS|系统基因组与分子钟揭示蓝细菌形态多样性及多细胞性的基因组起源
数据分析