2026-06-18 · database / storage
【列存引擎内核】列存基础与 ClickHouse 架构
行存 vs 列存的带宽、压缩与向量化三角;ClickHouse Server 进程模型、线程池与 MergeTree 引擎家族地图;src/Storages 与 src/Processors 源码入口。对照 PG 行存与 LSM 写优化路径,版本锚定 ClickHouse 24.x LTS。






























列存的高压缩率来自 同列同质数据——整数 ID
用 Delta、时间戳用 DoubleDelta、监控指标用 Gorilla(Pelkonen
et al., VLDB 2015),字符串默认 LZ4/ZSTD。ClickHouse 在 DDL
用 CODEC() 声明 列级
编解码链;读路径逆序解压再进入向量化算子(第
4 篇)。
压缩比必须在本机同数据集上实测——本环境未安装 ClickHouse,正文不给未跑过的压缩倍数。
flowchart LR
RAW[原始列向量] --> SPEC[专用编码 Delta/Gorilla/...]
SPEC --> GEN[通用压缩 LZ4/ZSTD]
GEN --> BIN[.bin 压缩块]
| 层 | 例子 | 目的 |
|---|---|---|
| 专用编码 | Delta, Gorilla, T64 | 利用数据模式降熵 |
| 通用压缩 | LZ4, ZSTD | 字节级压缩 |
DDL:ts DateTime CODEC(DoubleDelta, LZ4) —
先 DoubleDelta,再 LZ4。
| 算法 | 解压 CPU | 压缩率 | 场景 |
|---|---|---|---|
| LZ4 | 低 | 中 | 热数据、低延迟 |
| ZSTD | 较高 | 高 | 冷归档、带宽受限 |
默认列压缩由 compression 表 setting 或
config.xml 默认 codec 决定;列级
CODEC 覆盖。
与 storage 压缩 通用原理一致:无免费午餐,高率必付 CPU。
适合单调或平滑序列(时间戳、自增 ID)。存差分后数值更小、重复模式更多,再 LZ4/ZSTD 效果更好。
CREATE TABLE ts (
t DateTime CODEC(DoubleDelta, ZSTD),
id UInt64 CODEC(Delta, LZ4)
) ENGINE = MergeTree() ORDER BY t;不适合:高随机 UUID、已 hash 的均匀分布列——差分无规律,专用编码可能增大体积(工程判断,需本机验证)。
参考 Facebook Gorilla TSDB 论文;相邻浮点 XOR 后 leading/trailing zero 多,存 bit 长度与有效 payload。
可观测性 metrics 写入 ClickHouse 时常用(见 TSDB 内核 相关讨论)。
CREATE TABLE metrics (
ts DateTime CODEC(DoubleDelta, LZ4),
val Float64 CODEC(Gorilla, LZ4)
) ENGINE = MergeTree() ORDER BY ts;官方 Compression codecs 列出
T64(bit-packing)、FPC 等;可用性依赖类型与版本。选型以
system.codec_usage(若启用)与实测为准。
低基数 String/Enum 转 字典 + 索引;存储与 group by 可受益。过高基数字典膨胀,反而更差。
CREATE TABLE logs (
service LowCardinality(String),
msg String CODEC(ZSTD)
) ENGINE = MergeTree() ORDER BY (service, ts);| 维度 | ClickHouse CODEC | PG TOAST |
|---|---|---|
| 粒度 | 整列所有 granule | 单行大字段 |
| 目标 | 扫描带宽 | 行大小上限 |
| 时机 | insert/merge | insert 超阈值 |
| 配置 | DDL 显式 | 存储参数/autovacuum |
PG 页面与 TOAST 对 OLTP 透明;ClickHouse 编码是 schema 设计决策。
本机 ClickHouse 24.x 对比同表不同 CODEC 应记录:
SELECT version()data_compressed_bytesmax_insert_block_sizeSELECT
column,
compression_codec,
sum(data_compressed_bytes) AS compressed,
sum(data_uncompressed_bytes) AS uncompressed
FROM system.columns
WHERE database = currentDatabase() AND table = 'bench_codec'
GROUP BY column, compression_codec
ORDER BY column;未在本环境执行——正文不填压缩比数字。
可选:对同一查询比较 read_time /
ProfileEvents 中
CompressedReadBuffer* 与
OSIOWaitMicroseconds(需本机
EXPLAIN PIPELINE / query_log)。
| 数据特征 | 建议 CODEC |
|---|---|
| 时间戳 | DoubleDelta + LZ4/ZSTD |
| 缓慢变化 gauge | Gorilla + LZ4 |
| 枚举/服务名 | LowCardinality + ZSTD |
| 随机 UUID 字符串 | often 仅 ZSTD |
| 已压缩 JSON | NONE 或 ZSTD,避免无效 Delta |
Scan 列时必须解压 所有选中 granule 覆盖的压缩块;高压缩率 + ZSTD 可能 CPU-bound。物化视图预聚合可换空间换时间(第 10 篇规划)。
flowchart TB
MRK[Mark 定位块] --> READ[读压缩块]
READ --> ZSTD[ZSTD 解压]
ZSTD --> GOR[Gorilla 解码]
GOR --> VEC[ColumnVector]
Background merge 重写 Part 时可 重新选择 codec(若 ALTER MODIFY CODEC);merge 是压缩策略变更的落地时机(第 6 篇)。
上一篇:Part 格式
下一篇:向量化执行
DDL 示例:value Float64 CODEC(Gorilla, ZSTD)
表示 先 Gorilla 专用编码,再 ZSTD
通用压缩。读路径逆序解压。
内置通用压缩:NONE、LZ4、ZSTD(及
level 变体)。专用编码见官方 Compression codecs
表。
对序列 \(x_1,\ldots,x_n\),Delta 存 \(d_i = x_i - x_{i-1}\)(首元素规则见实现)。DoubleDelta 对 \(d_i\) 再差分,适合时间戳等二阶平滑序列。
Pelkonen et al., Gorilla: A Fast, Scalable, In-Memory Time Series Database, VLDB 2015。XOR 压缩相邻浮点值的 leading/trailing zero 相同前缀。
内部维护字典 + 索引列;对低基数 String/Enum 减少存储与
group by 字典优化。与 Plain 编码选择属于 DDL 设计(非自动
TOAST)。 ### index_granularity
两个 Mark 之间最大行数;影响稀疏索引粒度与单次读 granule 行数上限。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):8192。
index_granularity_bytes自适应 granule:限制 granule 预估字节大小,宽行表避免单 granule 过大。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):10485760 (10 MiB)。
enable_mixed_granularity_parts是否启用 index_granularity_bytes 与 index_granularity 混合控制。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):1。
min_bytes_for_wide_partPart 体积超过阈值时使用 Wide 布局(列独立文件)。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):10485760。
min_rows_for_wide_part行数超过阈值转 Wide。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):0。
parts_to_throw_insert活跃 Part 数超过阈值拒绝 insert。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):3000。
parts_to_delay_insert超过阈值开始延迟 insert。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):1000。
merge_max_block_size单次 merge 输出块大小上限。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):8192。
max_bytes_to_merge_at_max_space_in_poolmerge 池有空闲时单任务最大字节。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):161061273600。
number_of_free_entries_in_pool_to_execute_mutationmutation 与 merge 共享池时的调度参数。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):见文档。
compress_marks是否压缩 Mark 文件。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):1。
compress_primary_key是否压缩 primary.idx 落盘(内存仍解压使用)。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):1。
FREEZE 硬链 Part 到 shadow/
目录做一致性快照;与副本 fetch 互补。恢复需
ATTACH PART 流程,见官方 Backup 文档。
手动 DETACH PART 将目录移入
detached/,不参与查询与 merge。排障错误 Part
或迁移数据时使用;attach 前需校验 checksums。
多客户端 insert 各自形成 Part;无跨客户端单 block 合并。高并发小 insert 是 parts 爆炸主因——应用侧 batch 或 async_insert 缓冲。
强制 merge 至单 Part(分区内)并应用 Replacing 等语义。生产大表慎用:IO 峰值、长时间锁表语义以文档为准。更适合维护窗口。
逐列
data_compressed_bytes、data_uncompressed_bytes、compression_codec——压缩实验应用此表而非猜。见第
3 篇 benchmark 框架。
频繁查询受益
mark_cache、primary_index_cache(配置与
metric 见文档)。冷查询首次读盘仍取决于 Mark/PK 大小。
若查询 ORDER BY 与表排序键一致且无大幅改写,优化器可走 ReadInOrder 减少全量排序内存。与 merge 物理排序强相关。
ReplicatedMergeTree 上 ON CLUSTER DDL 通过
distributed DDL queue;与 Part 级复制不同层。第 8 篇聚焦
Part 同步。
24.x 推荐 Keeper(Raft);ZK 路径约定兼容。新集群优先 Keeper,减少 JVM 依赖与 tail latency。
insert_quorum 要求 N 副本确认 Part;与 async
insert 策略互斥需谨慎。金融场景可能启用,吞吐下降。
副本 system.replication_queue 中
GET_PART 失败会重试;Broken Part
需人工 SYSTEM DROP REPLICA / 重新同步。监控
last_exception。
PostgreSQL 作源时,MaterializedPostgreSQL 或
CDC 工具写入 MergeTree;PG 仍行存 MVCC,CH 侧 append
Part。一致性窗口由复制协议决定。
日志写入 CH 常用 Kafka 引擎 + MV(第 10 篇规划)。ingest 侧 batch 大小直接决定 Part 尺寸——与 可观测性系列 管道设计联动。
高压缩率 + 宽 granule 可能 CPU bound(解压);NVMe
上低压缩可能 IO bound。system.events 中
OSIOWait* vs UserTime
辅助判断,需本机 profile。
max_threads 默认与 CPU 核相关;过大线程增加
Part 并行读开销与内存。HTAP 混部应限制 CH 查询线程池。
system.metrics 的
MemoryTracking、MergesMutationsMemoryTracking;OOM
前常见 merge 与 big aggregation 同抢内存。
mutation 产生 xxx_mutyyy 中间 Part;完成后旧
Part outdated。system.mutations 的
parts_to_do 反映剩余工作量。
VersionedCollapsing 用 (Sign, Version)
对消;比纯 Collapsing 更适合乱序变更。merge
前查询仍需应用层理解 sign。
仅数值列默认 sum;非键列需显式指定 summing 列。非 sum 列取任意值(merge 确定性规则见文档)。
存 AggregateFunction 状态;查询需
-Merge 组合器。适合预聚合管道,schema
设计门槛高。
按时间精度 rollup 规则在 config 定义;监控迁移场景专用。与普通 Summing 不同。
S3 作 disk 时 Part 对象化;读延迟高于本地
SSD。merge 仍发生,网络带宽成为瓶颈。
零拷贝 replication 到 S3 磁盘配置见官方;副本 fetch 可走对象存储。与第 8 篇 queue 类型相关。
单分区过大 merge 慢;过多分区 metadata
膨胀。按天/租户合理切分;避免
PARTITION BY rand()。
PK 列过多/long String 增大 primary.idx
与内存。仅前缀必要列;其余放 ORDER BY 后缀或跳数索引。
GRANULARITY 过大索引粗;过小索引体积接近逐 granule。默认 1–4 需按列选择性实验(第 7 篇)。
Bloom 仅跳过 granule;假阳性多读 granule 仍正确。无 false negative。
列值在 granule 内分布宽但谓词窄,minmax 无法跳过——需更细 ORDER BY 或 bloom。
set 索引 granule 内 distinct 超上限则退化;高基数列不适用 set。
向量相似搜索非 MergeTree 经典跳数索引范畴;24.x 实验特性不在此系列承诺。
EXPLAIN PIPELINE 展示 Processor 图;与
EXPLAIN indexes=1
互补。本环境无实例不贴输出。
Analyzer 产出 QueryPlan,再转 Pipeline。PREWHERE 下推在此阶段决定;SQL 写法影响是否自动 PREWHERE。
常量谓词与 PK 范围交集在优化期计算;参数化查询仍受益 prepared 边界。
ReplacingMergeTree 的 FINAL
在查询期归并;替代方案 MV 去重或应用层
argMax。
较新版本 lightweight delete 标记删除 granule;与 mutation 路径不同。以 24.x 文档为准是否 GA。
单 insert block 原子;跨 Part 无 MVCC 快照隔离。勿与 PG MVCC 类比。
嵌入式 clickhouse-local 适合 Part
格式实验(第 2 篇);与 server 共用 MergeTree 代码路径。
大版本升级前查 release notes Part 格式变更;通常向后读旧 Part,merge 逐步重写。
checksums.txt 使用 CityHash128 等;损坏 Part
拒绝加载保护下游。
ALTER MODIFY COLUMN 可能触发 mutation 重写;类型不兼容需中间列。
字典非 MergeTree Part;JOIN 字典与 MergeTree scan 是不同 IO 路径。
Distributed 上 GLOBAL IN 广播维表(第 9 篇);本地 MergeTree 无此问题。
官方 hits 数据集适合验证读路径;下载与导入步骤见 clickhouse.com/docs getting started。
引用外部 benchmark 必须标注来源;自测需 3 轮中位数与环境表(WRITING_GUIDE)。
MergeTree:StorageMergeTree →
IMergeTreeDataPart →
MergeTreeReaderWide →
MergeTreeDataMergerMutator。执行:PipelineExecutor
→ IProcessor。
24.x LTS 安全/backport 周期见官网;生产锚定 LTS 而非 latest。
运维读 Part
状态时常用列:database、table、name(目录名)、part_type(Wide/Compact)、rows、bytes_on_disk、bytes_on_disk_uncompressed、primary_key_bytes_in_memory、marks_bytes_on_disk、level、data_version、is_frozen。active=0
表示已被 merge 替换但未物理删除。与 LSM SST 层数
类似,应监控每表 active part 数趋势。
system.merges 展示当前运行中的
merge:database、table、elapsed、progress(0–1)、num_parts、result_part_name、total_size_bytes_uncompressed。长时间
progress 不动可能磁盘 IO 饱和或单 Part
过大。merge_max_block_size
影响单次归并行数。
启用 query_log
后,read_rows、read_bytes、result_rows
对比可验证索引剪枝是否生效。PREWHERE 优化通常降低
read_bytes 而 read_rows 仍含
granule 内过滤前行数。本系列不在此环境给出样本数值。
除表级 merge_tree settings 外,insert 受
max_insert_block_size、min_insert_block_size_rows、async_insert(24.x
异步 insert 特性以文档为准)影响。小 block 直接对应小
Part——平台侧应强制 batch 或 Buffer 引擎。
TTL MOVE 与 storage_policy 可将 Part
移至慢盘/对象存储。merge 与 fetch
路径需保证目标卷有足够空间;system.disks 与
system.storage_policies 描述卷与策略。
24.x 支持 projection 预聚合/排序副本。属于高级 DDL,本系列主路径不展开;知晓其存在可避免与跳数索引职责混淆——projection 是额外 Part 子集,非跳数索引。
SAMPLE BY 与 SAMPLE
子句依赖排序键哈希;与主键剪枝独立。日志采样分析常用,但不替代正确
ORDER BY 设计。
Nullable 列额外
.null.bin(视版本/序列化而定);默认值列可能仅
.default 文件。读路径需合并 null map;宽表
Nullable 多会增加文件数。
固定长度类型序列化紧凑;仍受 granule 与 codec 影响。随机 UUID 作 ORDER BY 前缀会导致稀疏索引几乎无效——工程上避免。
DateTime64 排序键常用 DoubleDelta;插入时区
session_timezone 与显示无关存储。跨时区报表在
SQL 层转换,不在 Part 内改。
Enum 存整数标签;LowCardinality 字典适合低基数。高基数 String 强行 LowCardinality 字典膨胀,压缩与查询均变差。
Nested 在磁盘展开为多个子列 Array;JSON 类型(若启用)路径提取有独立序列化。宽 Nested 增加 Part 文件数,merge 成本上升。
物化列随 insert 计算持久化,占独立
.bin。适合重复表达式,但增加写放大与存储;与 MV
目标表不同。
TTL DELETE 在 merge 时删
granule;ALTER DROP PARTITION 整分区移除
Part。后者运维更干净;前者适合行级过期。
FREEZE 硬链 Part 到 shadow/
目录做一致性快照;与副本 fetch 互补。恢复需
ATTACH PART 流程,见官方 Backup 文档。
手动 DETACH PART 将目录移入
detached/,不参与查询与 merge。排障错误 Part
或迁移数据时使用;attach 前需校验 checksums。
多客户端 insert 各自形成 Part;无跨客户端单 block 合并。高并发小 insert 是 parts 爆炸主因——应用侧 batch 或 async_insert 缓冲。
强制 merge 至单 Part(分区内)并应用 Replacing 等语义。生产大表慎用:IO 峰值、长时间锁表语义以文档为准。更适合维护窗口。
逐列
data_compressed_bytes、data_uncompressed_bytes、compression_codec——压缩实验应用此表而非猜。见第
3 篇 benchmark 框架。
频繁查询受益
mark_cache、primary_index_cache(配置与
metric 见文档)。冷查询首次读盘仍取决于 Mark/PK 大小。
若查询 ORDER BY 与表排序键一致且无大幅改写,优化器可走 ReadInOrder 减少全量排序内存。与 merge 物理排序强相关。
ReplicatedMergeTree 上 ON CLUSTER DDL 通过
distributed DDL queue;与 Part 级复制不同层。第 8 篇聚焦
Part 同步。
24.x 推荐 Keeper(Raft);ZK 路径约定兼容。新集群优先 Keeper,减少 JVM 依赖与 tail latency。
insert_quorum 要求 N 副本确认 Part;与 async
insert 策略互斥需谨慎。金融场景可能启用,吞吐下降。
副本 system.replication_queue 中
GET_PART 失败会重试;Broken Part
需人工 SYSTEM DROP REPLICA / 重新同步。监控
last_exception。
PostgreSQL 作源时,MaterializedPostgreSQL 或
CDC 工具写入 MergeTree;PG 仍行存 MVCC,CH 侧 append
Part。一致性窗口由复制协议决定。
日志写入 CH 常用 Kafka 引擎 + MV(第 10 篇规划)。ingest 侧 batch 大小直接决定 Part 尺寸——与 可观测性系列 管道设计联动。
高压缩率 + 宽 granule 可能 CPU bound(解压);NVMe
上低压缩可能 IO bound。system.events 中
OSIOWait* vs UserTime
辅助判断,需本机 profile。
max_threads 默认与 CPU 核相关;过大线程增加
Part 并行读开销与内存。HTAP 混部应限制 CH 查询线程池。
system.metrics 的
MemoryTracking、MergesMutationsMemoryTracking;OOM
前常见 merge 与 big aggregation 同抢内存。
mutation 产生 xxx_mutyyy 中间 Part;完成后旧
Part outdated。system.mutations 的
parts_to_do 反映剩余工作量。
VersionedCollapsing 用 (Sign, Version)
对消;比纯 Collapsing 更适合乱序变更。merge
前查询仍需应用层理解 sign。
仅数值列默认 sum;非键列需显式指定 summing 列。非 sum 列取任意值(merge 确定性规则见文档)。
存 AggregateFunction 状态;查询需
-Merge 组合器。适合预聚合管道,schema
设计门槛高。
按时间精度 rollup 规则在 config 定义;监控迁移场景专用。与普通 Summing 不同。
S3 作 disk 时 Part 对象化;读延迟高于本地
SSD。merge 仍发生,网络带宽成为瓶颈。
零拷贝 replication 到 S3 磁盘配置见官方;副本 fetch 可走对象存储。与第 8 篇 queue 类型相关。
单分区过大 merge 慢;过多分区 metadata
膨胀。按天/租户合理切分;避免
PARTITION BY rand()。
PK 列过多/long String 增大 primary.idx
与内存。仅前缀必要列;其余放 ORDER BY 后缀或跳数索引。
GRANULARITY 过大索引粗;过小索引体积接近逐 granule。默认 1–4 需按列选择性实验(第 7 篇)。
Bloom 仅跳过 granule;假阳性多读 granule 仍正确。无 false negative。
列值在 granule 内分布宽但谓词窄,minmax 无法跳过——需更细 ORDER BY 或 bloom。
set 索引 granule 内 distinct 超上限则退化;高基数列不适用 set。
向量相似搜索非 MergeTree 经典跳数索引范畴;24.x 实验特性不在此系列承诺。
EXPLAIN PIPELINE 展示 Processor 图;与
EXPLAIN indexes=1
互补。本环境无实例不贴输出。
Analyzer 产出 QueryPlan,再转 Pipeline。PREWHERE 下推在此阶段决定;SQL 写法影响是否自动 PREWHERE。
常量谓词与 PK 范围交集在优化期计算;参数化查询仍受益 prepared 边界。
ReplacingMergeTree 的 FINAL
在查询期归并;替代方案 MV 去重或应用层
argMax。
较新版本 lightweight delete 标记删除 granule;与 mutation 路径不同。以 24.x 文档为准是否 GA。
单 insert block 原子;跨 Part 无 MVCC 快照隔离。勿与 PG MVCC 类比。
嵌入式 clickhouse-local 适合 Part
格式实验(第 2 篇);与 server 共用 MergeTree 代码路径。
大版本升级前查 release notes Part 格式变更;通常向后读旧 Part,merge 逐步重写。
checksums.txt 使用 CityHash128 等;损坏 Part
拒绝加载保护下游。
ALTER MODIFY COLUMN 可能触发 mutation 重写;类型不兼容需中间列。
字典非 MergeTree Part;JOIN 字典与 MergeTree scan 是不同 IO 路径。
Distributed 上 GLOBAL IN 广播维表(第 9 篇);本地 MergeTree 无此问题。
官方 hits 数据集适合验证读路径;下载与导入步骤见 clickhouse.com/docs getting started。
引用外部 benchmark 必须标注来源;自测需 3 轮中位数与环境表(WRITING_GUIDE)。
MergeTree:StorageMergeTree →
IMergeTreeDataPart →
MergeTreeReaderWide →
MergeTreeDataMergerMutator。执行:PipelineExecutor
→ IProcessor。
24.x LTS 安全/backport 周期见官网;生产锚定 LTS 而非 latest。
src/Compression/,
src/DataTypes/Serializations/DDL 示例:value Float64 CODEC(Gorilla, ZSTD)
表示 先 Gorilla 专用编码,再 ZSTD
通用压缩。读路径逆序解压。
内置通用压缩:NONE、LZ4、ZSTD(及
level 变体)。专用编码见官方 Compression codecs
表。
对序列 \(x_1,\ldots,x_n\),Delta 存 \(d_i = x_i - x_{i-1}\)(首元素规则见实现)。DoubleDelta 对 \(d_i\) 再差分,适合时间戳等二阶平滑序列。
Pelkonen et al., Gorilla: A Fast, Scalable, In-Memory Time Series Database, VLDB 2015。XOR 压缩相邻浮点值的 leading/trailing zero 相同前缀。
内部维护字典 + 索引列;对低基数 String/Enum 减少存储与
group by 字典优化。与 Plain 编码选择属于 DDL 设计(非自动
TOAST)。 ### index_granularity
两个 Mark 之间最大行数;影响稀疏索引粒度与单次读 granule 行数上限。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):8192。
index_granularity_bytes自适应 granule:限制 granule 预估字节大小,宽行表避免单 granule 过大。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):10485760 (10 MiB)。
enable_mixed_granularity_parts是否启用 index_granularity_bytes 与 index_granularity 混合控制。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):1。
min_bytes_for_wide_partPart 体积超过阈值时使用 Wide 布局(列独立文件)。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):10485760。
min_rows_for_wide_part行数超过阈值转 Wide。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):0。
parts_to_throw_insert活跃 Part 数超过阈值拒绝 insert。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):3000。
parts_to_delay_insert超过阈值开始延迟 insert。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):1000。
merge_max_block_size单次 merge 输出块大小上限。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):8192。
max_bytes_to_merge_at_max_space_in_poolmerge 池有空闲时单任务最大字节。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):161061273600。
number_of_free_entries_in_pool_to_execute_mutationmutation 与 merge 共享池时的调度参数。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):见文档。
compress_marks是否压缩 Mark 文件。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):1。
compress_primary_key是否压缩 primary.idx 落盘(内存仍解压使用)。
官方文档默认值(24.x,以实例
system.merge_tree_settings
为准):1。
把当前热点继续串成多页阅读,而不是停在单篇消费。
2026-06-18 · database / storage
行存 vs 列存的带宽、压缩与向量化三角;ClickHouse Server 进程模型、线程池与 MergeTree 引擎家族地图;src/Storages 与 src/Processors 源码入口。对照 PG 行存与 LSM 写优化路径,版本锚定 ClickHouse 24.x LTS。
2026-06-18 · database / storage
ClickHouse MergeTree Part 目录结构:columns.txt、checksums.txt、.bin、.mrk2、primary.idx 语义,Granule 与 Mark 的定位作用,Wide/Compact 布局与 MergeTreeDataPart 源码入口。版本锚定 24.x LTS。
2026-06-18 · database / storage
ClickHouse Block 列向量 batch、IProcessor Pipeline 与 filter/project/aggregate 向量实现;对照 PostgreSQL 火山模型 ExecProcNode。源码入口 src/Processors、src/Columns。24.x LTS。
2026-06-18 · database / storage
MergeTree SELECT 读路径:Mark Range 定位 Granule、PREWHERE 与 WHERE、Part 级并行与 max_threads。EXPLAIN indexes=1 解读方法。24.x LTS,无伪造 EXPLAIN 输出。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。