惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Threat Research - Cisco Blogs
A
Arctic Wolf
S
Securelist
O
OpenAI News
T
Threatpost
Forbes - Security
Forbes - Security
N
News and Events Feed by Topic
S
Secure Thoughts
H
Heimdal Security Blog
S
Security Affairs
P
Privacy International News Feed
C
Cisco Blogs
C
CERT Recently Published Vulnerability Notes
Cyberwarzone
Cyberwarzone
N
News and Events Feed by Topic
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Palo Alto Networks Blog
S
Security @ Cisco Blogs
Hacker News - Newest:
Hacker News - Newest: "LLM"
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
T
Tailwind CSS Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hacker News: Ask HN
Hacker News: Ask HN
T
Troy Hunt's Blog
S
SegmentFault 最新的问题
腾讯CDC
V
Visual Studio Blog
Last Week in AI
Last Week in AI
H
Hacker News: Front Page
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Project Zero
Project Zero
WordPress大学
WordPress大学
NISL@THU
NISL@THU
博客园 - 【当耐特】
博客园 - Franky
Webroot Blog
Webroot Blog
博客园_首页
T
Tenable Blog
雷峰网
雷峰网
Google Online Security Blog
Google Online Security Blog
阮一峰的网络日志
阮一峰的网络日志
V2EX - 技术
V2EX - 技术
Recent Commits to openclaw:main
Recent Commits to openclaw:main
L
Lohrmann on Cybersecurity
The Hacker News
The Hacker News

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

国密算法与国密 TLS 系列索引 【系统架构设计】架构质量属性:不只是"高可用高性能" 【系统架构设计百科】告警策略:如何避免"狼来了" 【系统架构设计】CQRS:读写分离的架构哲学 【系统架构设计】空间架构:极端扩展场景的解法 【系统架构设计】微服务架构深度审视:优势、代价与适用边界 【系统架构设计】扩展性原理:水平、垂直与对角扩展 【系统架构设计】无状态设计:扩展的第一步也是最难的一步 【系统架构设计】缓存架构:从本地到分布式的多级缓存体系 【系统架构设计】管道与过滤器:Unix 哲学的架构表达 【系统架构设计】复杂性管理:架构的核心战场 【系统架构设计】消息队列架构:异步解耦的设计与陷阱 【系统架构设计】CDN 架构:全球加速的设计原理 【系统架构设计】连接池设计:被忽视的性能杀手 【系统架构设计】弹性设计模式:熔断器、舱壁与超时 【系统架构设计】高可用设计模式:冗余、故障转移与仲裁 【系统架构设计】容量规划:从拍脑袋到数据驱动 【系统架构设计】数据库扩展:分库分表的工程实践与替代方案 【系统架构设计】SLO 工程:可靠性的量化管理 【系统架构设计】性能建模:用数学思维分析系统瓶颈 【系统架构设计】混沌工程:主动验证系统的韧性 【系统架构设计】零拷贝与内存映射:数据搬运的极致优化 【系统架构设计】线程模型:从 thread-per-request 到协程 【系统架构设计】容灾架构:多活与灾备设计 【系统架构设计】数据库性能模式:索引、查询与连接管理 【系统架构设计】数据建模:从关系范式到文档模型的真实权衡 【系统架构设计】吞吐量优化:批处理、流水线与并发模型 【系统架构设计】流处理架构:从批处理到实时的范式迁移 【系统架构设计】搜索引擎架构:倒排索引之上的系统设计 【系统架构设计】时序数据架构:监控与 IoT 的存储设计 【系统架构设计】数据迁移与版本化:在线不停机的数据演进 【系统架构设计】数据湖与数据仓库:分析架构的演进路线 【系统架构设计】API 网关设计:入口层的职责边界 【系统架构设计】应用层数据一致性模式:在正确性与性能之间走钢丝 【系统架构设计】多模数据库选型:Polyglot Persistence 的工程实践 【系统架构设计】服务发现与注册:动态拓扑的基础设施 【系统架构设计】配置管理架构:从配置文件到配置中心 【系统架构设计】全链路压测:大规模系统的性能验证 【系统架构设计】幂等性设计:分布式环境下的安全重试 【系统架构设计】契约测试与 Schema 演进:服务间的信任协议 【系统架构设计】长连接与推送架构:WebSocket、SSE 与 MQTT 【系统架构设计】延迟分析:从 P50 到 P999 的全链路追踪 【系统架构设计百科】DDD 战术模式:聚合、实体与值对象 【系统架构设计百科】防腐层与开放主机服务:系统集成的 DDD 方案 【系统架构设计百科】领域事件与事件风暴:从业务到架构的桥梁 【系统架构设计百科】CQRS + Event Sourcing 完整实战:从领域建模到部署 【系统架构设计百科】DDD 与微服务:用领域模型划分服务边界 【系统架构设计】DDD 战略设计:限界上下文与上下文映射 【系统架构设计百科】认证架构:从 Session 到 JWT 到 OIDC 【系统架构设计】API 设计哲学:REST vs GraphQL vs gRPC 的真实权衡 排序算法专题:从 TimSort 到并行排序 【密码学百科】国密算法体系:SM2/SM3/SM4/SM9 全景解读 【密码学百科】承诺方案:Pedersen 承诺、向量承诺与多项式承诺 【密码学百科】不经意传输与隐私信息检索:OT、OT 扩展与 PIR 【密码学百科】门限密码学:门限签名、门限解密与分布式密钥生成 完美哈希:从理论到 gperf 实践 【密码学百科】安全多方计算:从 Yao 的混淆电路到实用 MPC 【密码学百科】同态加密:从 Paillier 到全同态加密(FHE) 【密码学百科】零知识证明系统:zk-SNARKs、zk-STARKs 与 Bulletproofs 【密码学百科】概率论与密码分析:生日攻击、差分分析与线性分析 【密码学百科】计算复杂性与归约:密码安全性证明的基石 【密码学百科】秘密共享:Shamir 方案、VSS 与安全多方计算入口 【密码学百科】椭圆曲线代数:Weierstrass 方程、点群运算与曲线选择 【密码学百科】离散对数与配对密码学:从 DLP 到 BLS 签名 【密码学百科】格密码数学基础:SVP、LWE 与格基约化 【密码学百科】抽象代数:群、环、域的密码学视角 【密码学百科】有限域算术:GF(2^n) 运算与在 AES/ECC 中的应用 【密码学百科】数论进阶:二次剩余、椭圆曲线上的 Weil 配对 【密码学百科】密码学简史:从凯撒密码到量子时代 【密码学百科】威胁模型与安全目标:CIA 三要素之外 【密码学百科】Kerckhoffs 原则与现代密码设计哲学 【密码学百科】随机性:密码学的基石 【密码学百科】信息论入门:熵、完美保密与 Shannon 定理 【密码学百科】分组密码原理:Feistel 网络与 SPN 结构 【密码学百科】AES 逐步拆解:SubBytes 到 MixColumns 的数学 【密码学百科】分组密码工作模式全览:ECB/CBC/CTR/OFB/CFB 【密码学百科】流密码:RC4 的兴衰与 ChaCha20 的崛起 【密码学百科】密码学哈希函数:MD5→SHA-2→SHA-3 的进化之路 【密码学百科】MAC 与 HMAC:消息认证的正确姿势 【密码学百科】认证加密(AEAD):GCM、ChaCha20-Poly1305 与 OCB 【密码学百科】密钥派生函数:HKDF、PBKDF2、Argon2 与密码存储 【密码学百科】公钥密码的数论基础:模运算、群、原根 【密码学百科】RSA 从原理到攻击:教科书 RSA 为什么不安全 【密码学百科】Diffie-Hellman 密钥交换与离散对数问题 【密码学百科】椭圆曲线密码学(ECC):从几何直觉到点群运算 【密码学百科】数字签名:ECDSA、EdDSA 与 Schnorr 签名 【密码学百科】现代密钥交换:X25519、ECDHE 与前向保密 【密码学百科】混合加密与 KEM/DEM 范式:ECIES 与 HPKE 【密码学百科】填充方案:PKCS#1 v1.5、OAEP 与 PSS 【密码学百科】TLS 协议全解析:从握手到 0-RTT 【密码学百科】PKI 与数字证书:信任链的构建与崩塌 【密码学百科】密码认证协议:从 SRP 到 OPAQUE 【密码学百科】零知识证明入门:如何证明你知道而不泄露 【密码学百科】安全信道构造:Noise 协议框架与 Signal 协议 【密码学百科】密钥管理工程:HSM、KMS 与密钥生命周期 【密码学百科】侧信道攻击:从时序攻击到功耗分析 【密码学百科】密码学实现陷阱:三层漏洞分类、审计工具链与系统性预防 密码敏捷性:如何设计可升级的密码系统 【密码学百科】OpenSSL/BoringSSL 架构剖析:ENGINE、Provider 与 FIPS 模块 排序基准测试:用数据说话
【列存引擎内核】配置陷阱与容量规划
Liao Tonglang · 2026-06-18 · via 土法炼钢兴趣小组的算法知识备份

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 语义

  • parts_to_delay_insert:单分区 active parts 超阈值 → insert sleep 降速;
  • parts_to_throw_insert:更高阈值 → 拒绝 insert。

(默认值查 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 频率。

  • 过大:单次 merge 耗时长、内存高;
  • 过小:part 仍碎、metadata 多。

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 组成

  • 数据 part(压缩);
  • 合并临时空间(峰值可达 同时存在输入 part + 输出 part);
  • mutation 重写;
  • system / log;
  • detached_parts 泄漏。

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

  • Keeper 节点数 3/5 odd;
  • 磁盘低延迟 SSD;
  • session_timeout_ms 与网络抖动;
  • 勿与 heavy log 盘混用。

副本数 × 数据 = 总存储——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

  • 每表 MergeTree parts_to_* 是否与 ingest 匹配
  • merge 池与 CPU/磁盘匹配
  • max_server_memory_usage 是否留 OS cache
  • 磁盘告警 70%/85%
  • TTL 是否控制保留期
  • 分布式 internal_replication 正确
  • mutation 策略(避免大 UPDATE)
  • query_log 保留与磁盘

十五、小结

容量规划 = 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 的症状链、根因与缓解;附测试环境复现框架。