配置项作用 #
thread_pool.force_merge.size 配置项用于控制强制合并线程池的固定线程数量。
Force Merge 线程池用于执行强制合并操作,减少索引段数量,提高查询性能。
配置项属性 #
- 配置路径:
thread_pool.force_merge.size - 数据类型:
Integer(整数) - 默认值:
1 - 是否可选: 是
- 作用域: NodeScope(节点级别)
- 动态更新: 是(可以动态更新,无需重启)
配置项详解 #
工作机制 #
Force Merge 线程池架构
线程池类型: FIXED (固定大小)
┌─────────────────────────────────────┐
│ Force Merge 线程池 │
├─────────────────────────────────────┤
│ 线程数: size (默认 1) │
│ 队列: queue_size (-1 无界) │
│ 类型: 固定,不伸缩 │
└─────────────────────────────────────┘
使用场景:
1. 减少段数量
├── 索引有许多小段
├── 执行 Force Merge
├── 合并成大段
└-- 提高查询性能
2. 释放空间
├── 删除大量文档
├── 执行 Force Merge
├── 清理已删除文档
└-- 回收磁盘空间
3. 优化只读索引
├── 索引不再写入
├── 执行 Force Merge
├── 合并成单个段
└-- 最佳查询性能
4. 定期维护
├── 按计划执行
├── 优化索引结构
└-- 保持性能
FIXED 线程池特点 #
FIXED 线程池特性
固定线程数:
├── 创建: 启动时创建 size 个线程
├── 保持: 始终保持活跃
├── 不伸缩: 不增不减
└-- 稳定性好
无界队列:
├── queue_size: -1
├── 容量: 无限制
├── 用途: 缓冲大量合并任务
└-- 不会拒绝任务
任务执行:
├── 并发执行: size 个任务
├── 等待任务: 在队列中
├── 执行顺序: FIFO
└-- 全部完成
size 设置影响 #
size 值的影响分析
size = 1 (默认):
├── CPU 使用: 低 ✅
├── I/O 顺序: 串行
├── 磁盘压力: 低 ✅
├── 合并速度: 标准
├── 查询影响: 小
└-- 适用: 生产环境 ✅
size = 2:
├── CPU 使用: 中等
├-- I/O 并行: 2个
├── 磁盘压力: 中等
├── 合并速度: 较快
├── 查询影响: 中等
└-- 适用: 低峰期 ✅
size > 2:
├── CPU 使用: 高 ⚠️
├── I/O 并行: 多个
├── 磁盘压力: 高 ⚠️
├── 合并速度: 快
├── 查询影响: 大 ⚠️
└-- 谨慎使用 ⚠️
为什么默认值是 1 #
Force Merge 特性
资源密集型:
├── CPU: 大量计算
├── 磁盘 I/O: 大量读写
├── 内存: 需要缓冲
└-- 网络较少
影响查询:
├── 读取段文件
├── 写入新段
├── 占用 I/O 带宽
└-- 影响正常查询
默认为 1 的原因:
├── 减少资源争用 ✅
├── 降低对查询的影响 ✅
├-- 避免磁盘 I/O 峰值
├── 保证系统稳定性 ✅
└-- 默认最安全
配置建议 #
默认配置(推荐) #
thread_pool:
force_merge:
size: 1 # 默认值
建议: 生产环境使用默认值。
低峰期加速 #
thread_pool:
force_merge:
size: 2 # 低峰期可以增加
建议: 仅在低峰期或有专门维护窗口时使用。
动态更新 #
PUT /_cluster/settings
{
"transient": {
"thread_pool.force_merge.size": 2
}
}
代码示例 #
执行强制合并 #
POST /my_index/_forcemerge
{
"max_num_segments": 1
}
查看合并状态 #
GET /_cat/thread_pool/force_merge?v
GET /_tasks?detailed=true&actions=*forcemerge*
相关配置 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
force_merge.size | 线程池大小 | 1 |
force_merge.queue_size | 队列大小 | -1 (无界) |
注意事项 #
默认值: 默认值为
1,推荐保持。动态更新: 支持动态更新,无需重启。
资源密集: Force Merge 是 CPU 和 I/O 密集型操作。
影响查询: 可能影响正常查询性能。
建议时间: 在低峰期执行。
不要过度: 增加线程数不一定能提升整体性能。
监控建议: 监控合并进度和系统资源。
定期执行: 不要频繁执行,按需执行。
只读索引: 对只读索引执行效果最好。
磁盘空间: 合并过程需要额外磁盘空间。
使用场景 #
场景选择指南
生产环境 (默认):
├── size: 1
├── 特点: 安全第一
├-- 影响: 最小
└-- 推荐: 默认配置 ✅
低峰期维护:
├── size: 1-2
├── 特点: 有维护窗口
├-- 影响: 可控
└-- 推荐: 可以略微增加
紧急优化:
├── size: 2-4
├── 特点: 需要快速完成
├-- 影响: 显著
└-- 推荐: 短暂使用后恢复
最佳实践 #
Force Merge 最佳实践
1. 使用默认配置
├── size: 1
├── 安全可靠
├── 影响最小
└-- 生产推荐 ✅
2. 选择合适时机
├── 低峰期执行
├── 避开业务高峰
├── 设置维护窗口
└-- 减少影响
3. 限制合并范围
├── 按索引执行
├── 不使用 _all
├── 分批执行
└-- 控制影响
4. 监控执行进度
├── 观察合并进度
├── 监控资源使用
├── 检查查询性能
└-- 及时调整
5. 合理设置目标
├── max_num_segments: 不建议设为 1
├── 设为 3-5 较合理
├── 避免过度合并
└-- 平衡性能和开销





