土法炼钢兴趣小组的算法知识备份

【列存引擎内核】配置陷阱与容量规划

文章导航

分类入口
databasearchitecture
标签入口
#clickhouse#capacity-planning#merge-tree-settings#parts-to-throw-insert#merge-pool#ssd-hdd

目录

ClickHouse 默认 settings 面向 中等 batch 的通用 OLAP——直接接 Kafka 小消息或 ORM 逐行 insert 时,默认 parts_to_throw_insert 与 merge 池大小 并不「自动适配业务」。本文梳理 MergeTree 与服务器级 易踩配置、SSD/HDD 差异、内存与磁盘容量估算方法,交叉 故障模式(第 15 篇)监控(第 14 篇)

不给虚构 TPS/磁盘数字——给出公式与检查清单,数值在目标环境代入。

版本锚定:ClickHouse 24.x LTS


一、配置层级

层级 位置 示例
服务器默认 config.xml / users max_memory_usage
Profile users.xml 只读用户限额
Session SET 临时调大 limit
表级 SETTINGS in CREATE/ALTER index_granularity
MergeTree SETTINGS on engine parts_to_throw_insert

表级 MergeTree settings 优先级高——适合 per-table 调 parts 阈值。


二、parts_to_throw_insert / parts_to_delay_insert

2.1 语义

(默认值查 24.x 文档——版本间可能调整。)

2.2 陷阱

陷阱 后果
只调 throw 不调 delay 突然硬失败而非预警
盲目调极大 throw merge/OOM 掩盖,磁盘 metadata 膨胀
忽略 per partition 单分区爆炸仍触发

2.3 规划方法

  1. 估算峰值 insert RPS × 每 insert part 数;
  2. 估算 merge 吞吐(parts/hour)—— 须实测 system.events MergedRows
  3. 稳态 parts ≈ ingest / merge_rate × 安全系数;
  4. 设置 delay < throw,留 margin。

监控:system.parts count 趋势(第 14 篇)。


三、merge 线程池与并发

3.1 相关 settings

Setting 作用
background_pool_size 后台任务总池
background_merges_mutations_concurrency merge+mutation 并发
background_schedule_pool_size 调度

池过小 → merge lag;过大 → IO/CPU 争抢。

3.2 SSD vs HDD

介质 建议方向
NVMe SSD 可适度提高 merge 并发;parts 阈值可紧(merge 快)
HDD 降低并发避免 seek 风暴;增大 insert batch;考虑 TTL 到 SSD tier
冷热分层 storage_policy 热 SSD 冷 S3/HDD

HDD 上 小 part 随机读 也伤害查询——不只 merge 问题(读路径 第 05 篇)。

3.3 max_bytes_to_merge_at_max_space_in_pool

限制单次 merge 选中 part 总大小——防 merge 内存/磁盘峰值。过大 part 无法合并时 level 停滞

SELECT max(bytes_on_disk) FROM system.parts WHERE active AND table = 't';

若接近该 setting,需 OPTIMIZE 或调高(权衡内存)。


四、merge_max_block_size

控制 merge 输出 block 行数上界——影响 merged part 粒度与后续 merge 频率。

max_insert_block_size 协调——insert block 与 merge block 同一量级常更稳。


五、内存预算

5.1 三层 limit

单查询 max_memory_usage
    ↓
用户 max_memory_usage_for_user
    ↓
进程 max_server_memory_usage (或 ratio)

5.2 merge/mutation 内存

Merge 占用常接近 合并 part 解压和——规划 RAM:

\[ M_{\text{server}} \geq M_{\text{queries}} + M_{\text{merge}} + M_{\text{os cache}} \]

\(M_{\text{merge}}\) 粗估:并发 merge 数 × 单 merge max_bytes_to_merge 解压系数——解压后常 2–10× 压缩比,依 编码(第 03 篇) 而定,须抽样测。

5.3 external group by / sort

max_bytes_before_external_group_bymax_bytes_before_external_sort 触发磁盘 spill——SSD 路径必配 tmp_path 空间。


六、磁盘容量

6.1 组成

6.2 安全系数

规划可用磁盘:

\[ D_{\text{need}} = D_{\text{data}} \times (1 + f_{\text{merge}} + f_{\text{mutation}} + f_{\text{headroom}}) \]

\(f_{\text{headroom}}\) 工程上常 0.2–0.3,视 compaction 策略实测——不写死 1.3。

6.3 TTL 与 S3

TTL ... TO DISK 'cold' / TO VOLUME —— 热层 SSD 容量单独规划;冷层延迟接受。


七、insert 路径 settings

Setting 说明
max_insert_block_size insert 块行数
min_insert_block_size_rows 最小 flush
async_insert 服务端攒 batch
wait_for_async_insert 客户端是否等待

Kafka:kafka_max_block_sizestream_flush_interval_ms(名以文档为准)。


八、查询与并发

Setting 陷阱
max_threads 过大 × 高并发 → CPU 过载
max_concurrent_queries 0 无限
max_execution_time 无超时慢查拖死

只读副本 + max_threads 限制给 BI,保护 ingest 节点。


九、分布式配置

Setting 说明
load_balancing 读 replica 策略
insert_distributed_sync 写入一致性 vs 延迟
optimize_skip_unused_shards 单 shard 优化

集群容量 = shard 数 × 单 shard 规划——非线性(协调节点、Keeper)。

第 09 篇


十、ReplicatedMergeTree 与 Keeper

副本数 × 数据 = 总存储——HA 成本线性增。

第 08 篇


十一、表 DDL 容量相关

DDL 选择 容量影响
PARTITION BY 粒度 过细 → parts 乘数
ORDER BY 影响 merge 局部性
跳数索引 额外磁盘,减 scan
LowCardinality 降内存/磁盘 string
Projection 额外存储换 query

第 07 篇 索引


十二、DuckDB 容量对照

DuckDB
文件大小 .duckdb
并行 threads
内存 memory_limit
spill temp_directory

无 parts_to_throw——但 单文件过大 checkpoint 慢;Parquet 外链不增 DB 文件。

第 11 篇


十三、容量规划工作流

flowchart TD
  A[业务: 保留期 × 行宽 × QPS] --> B[估算压缩后数据量]
  B --> C[选 PARTITION/ORDER BY]
  C --> D[测 insert batch + parts 增长率]
  D --> E[测 merge 吞吐]
  E --> F[定 parts 阈值 + merge 池]
  F --> G[定 RAM: query + merge]
  G --> H[定磁盘: 数据 + merge 峰值]
  H --> I[监控告警上线]
  1. 用 representational 负载灌测试集群;
  2. 跑 24–72h 观察 system.partsmerges
  3. 调 settings 后重复;
  4. 文档化 团队 insert 规范(batch 大小)。

十四、配置审查 checklist


十五、小结

容量规划 = insert 模式 + merge 能力 + 内存/磁盘三角;默认 config 不会替业务做 batch。SSD 与 HDD 策略差异在 merge 并发与 insert 粒度;Replicated 与 Distributed 乘法存储。

附录 A、storage_policy 多卷示例结构

<!-- 合成示例,部署前验证 -->
<storage_configuration>
  <disks>
    <hot><path>/mnt/nvme/clickhouse/</path></hot>
    <cold><path>/mnt/hdd/clickhouse/</path></cold>
  </disks>
  <policies>
    <tiered>
      <volumes>
        <hot><disk>hot</disk></hot>
        <cold><disk>cold</disk></cold>
      </volumes>
    </tiered>
  </policies>
</storage_configuration>

SETTINGS storage_policy='tiered' + TTL MOVE。

附录 B、mark_cache / uncompressed_cache

Mark cache 减少 .mrk 随机读;uncompressed cache 缓存热点解压块——RAM 充足时可调高 比例,须测 hit rate(system.metrics 相关项视版本)。

附录 C、users.xml 配额

<profiles>
  <readonly>
    <readonly>1</readonly>
    <max_execution_time>300</max_execution_time>
  </readonly>
</profiles>

BI 只读 profile 限制 max_memory_usage 防拖垮集群。

附录 D、网络带宽

Distributed scatter-gather 与 replication 复制争用带宽——跨 DC 复制需限速 settings(max_replicated_fetches_network_bandwidth 等,查文档)。

附录 E、备份容量

BACKUP TO S3 增量备份仍占对象存储;规划 = 数据 + 版本 + 保留策略。恢复演练占临时磁盘。

附录 F、merge_tree 表级 settings 模板

CREATE TABLE t (...)
ENGINE = ReplicatedMergeTree(...)
PARTITION BY toYYYYMM(d)
ORDER BY (d, id)
SETTINGS
    index_granularity = 8192,
    parts_to_delay_insert = 150,
    parts_to_throw_insert = 300;

数值 必须 按本集群 parts 增长率调——非 universal 默认。

附录 G、HDD 合并策略

降低 background_merges_mutations_concurrency;增大 insert batch;避免宽表高频 alter;查询 SLA 放 SSD replica。

附录 H、CH Cloud 边界

托管版自动调 parts/merge——本系列针对 自建 MergeTree 内核;Cloud 用户仍应理解 parts 语义读官方 SLA。

附录 I、DuckDB 容量参数

SET memory_limit='8GB';
SET threads=8;
SET max_temp_directory_size='100GB';
PRAGMA database_size;

单文件 DB 增长上限 = 磁盘;checkpoint 峰值需额外 headroom。

附录 J、容量估算 worksheet(填本地数)

公式/来源
日增压缩数据 实测 insert
保留天数 业务
副本数 HA
merge 临时 ~1× 最大 part(粗估)
备份 增量策略

附录 K、max_table_size_to_drop / truncate 保护

防误删大表——须显式提 setting 才 DROP。生产建议开启。

附录 L、timezone 与 PARTITION

DateTime 分区按 server timezone——跨区业务统一 UTC 或显式 toDate(ts, 'UTC')

附录 M、compression 与 capacity

高压缩率 codec CPU 高——第 03 篇。容量规划 CPU 与磁盘 tradeoff。

附录 N、S3 冷存 cost

TTL TO VOLUME 's3' 对象请求费——频繁 merge 与 S3 交互贵。Archive 分区 detach。

附录 O、Kubernetes requests/limits

CH pod memory limit 须低于 max_server_memory_usage 配置——否则 OOMKill 无 graceful。

附录 P、macros 与 ON CLUSTER

错误 macro → DDL 部分节点失败 → distributed_ddl_queue 半成功——部署 ansible 校验 macro。

附录 Q、Capacity review 季度模板

parts 趋势、磁盘 90 天预测、merge CPU%、mutation backlog、升级计划——表格留空填本地数。

附录 · 深度补充(系列交叉索引)

深度 1

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 2

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 3

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 4

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 5

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 6

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 7

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 8

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 9

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 10

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 11

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 12

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 13

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 14

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 15

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 16

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 17

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 18

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 19

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 20

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 21

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 22

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 23

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 24

第 16 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。


附录 · 工程深化索引

深化 1:parts_to_delay_insert

检查项 说明 关联篇章
机制 parts_to_delay_insert 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 2:parts_to_throw_insert

检查项 说明 关联篇章
机制 parts_to_throw_insert 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 3:merge_max_block_size

检查项 说明 关联篇章
机制 merge_max_block_size 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 4:max_bytes_to_merge_at_max_space_in_pool

检查项 说明 关联篇章
机制 max_bytes_to_merge_at_max_space_in_pool 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 5:number_of_free_entries_in_pool_to_execute_mutation

检查项 说明 关联篇章
机制 number_of_free_entries_in_pool_to_execute_mutation 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 6:background_pool_size

检查项 说明 关联篇章
机制 background_pool_size 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 7:background_merges_mutations_concurrency

检查项 说明 关联篇章
机制 background_merges_mutations_concurrency 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 8:max_insert_block_size

检查项 说明 关联篇章
机制 max_insert_block_size 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 9:min_insert_block_size_rows

检查项 说明 关联篇章
机制 min_insert_block_size_rows 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 10:max_threads 读

检查项 说明 关联篇章
机制 max_threads 读 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 11:max_memory_usage

检查项 说明 关联篇章
机制 max_memory_usage 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 12:max_bytes_before_external_group_by

检查项 说明 关联篇章
机制 max_bytes_before_external_group_by 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 13:mark_cache_size

检查项 说明 关联篇章
机制 mark_cache_size 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 14:uncompressed_cache_size

检查项 说明 关联篇章
机制 uncompressed_cache_size 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 15:storage_policy 多盘

检查项 说明 关联篇章
机制 storage_policy 多盘 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 16:TTL move 策略

检查项 说明 关联篇章
机制 TTL move 策略 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 17:SSD vs HDD merge

检查项 说明 关联篇章
机制 SSD vs HDD merge 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 18:容量:parts 数估算

检查项 说明 关联篇章
机制 容量:parts 数估算 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 19:容量:merge 带宽

检查项 说明 关联篇章
机制 容量:merge 带宽 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 20:容量:insert QPS 上限

检查项 说明 关联篇章
机制 容量:insert QPS 上限 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 21:变更审批流程

检查项 说明 关联篇章
机制 变更审批流程 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 22:staging 压测

检查项 说明 关联篇章
机制 staging 压测 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 23:回滚配置

检查项 说明 关联篇章
机制 回滚配置 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 24:文档化基线

检查项 说明 关联篇章
机制 文档化基线 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 25:parts_to_delay_insert

检查项 说明 关联篇章
机制 parts_to_delay_insert 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 26:parts_to_throw_insert

检查项 说明 关联篇章
机制 parts_to_throw_insert 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 27:merge_max_block_size

检查项 说明 关联篇章
机制 merge_max_block_size 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 28:max_bytes_to_merge_at_max_space_in_pool

检查项 说明 关联篇章
机制 max_bytes_to_merge_at_max_space_in_pool 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 29:number_of_free_entries_in_pool_to_execute_mutation

检查项 说明 关联篇章
机制 number_of_free_entries_in_pool_to_execute_mutation 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 30:background_pool_size

检查项 说明 关联篇章
机制 background_pool_size 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 31:background_merges_mutations_concurrency

检查项 说明 关联篇章
机制 background_merges_mutations_concurrency 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 32:max_insert_block_size

检查项 说明 关联篇章
机制 max_insert_block_size 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 33:min_insert_block_size_rows

检查项 说明 关联篇章
机制 min_insert_block_size_rows 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

上一篇经典故障

下一篇系列索引

参考资料

  1. ClickHouse Documentation, MergeTree settings, Server settings, 24.x
  2. ClickHouse Documentation, Storage policies, TTL
  3. 本系列 第 1415

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-06-18 · database / architecture

【列存引擎内核】物化视图与增量管道

ClickHouse Materialized View 的触发语义、块级增量与目标表引擎选择;Kafka Engine + MV 典型架构;与 PostgreSQL 触发器/MV 的对照及常见坑。

2026-06-18 · database / architecture

【列存引擎内核】经典故障模式

Too many parts、merge 跟不上 insert、mutation 堆积、副本延迟与 lost replica、max_memory_usage OOM 的症状链、根因与缓解;附测试环境复现框架。


By .