首页/数据/NoSQL 速查/_cat/segments 查看段信息
Elasticsearch89 条

_cat/segments 查看段信息

段是 Lucene 索引的最小存储单元:_cat/segments 列出每个分片下的段数量、文档数、占用与是否已删除文档,用于评估合并压力与段爆炸。

NoSQL 速查数据更新于 2026-10-13

_cat/segments 是什么

段是 Lucene 索引的最小存储单元:每个分片由若干段组成,写入先落到内存缓冲,refresh 后成为一个新段,后台再把小段逐步合并成大段。_cat/segments 列出每个分片下的段数量、文档数、已删除文档标记与占用大小,用来评估合并压力与「段爆炸」。段数长期保持几百以上、且已删除文档占比很高时,对只读索引做一次强制合并通常能降低查询开销。

基本信息

接口GET /_cat/segments?v
关键列index、shard、segment、docs.count、docs.deleted、size、committed
段来源每次 refresh 产生新段,后台合并逐步回收
判断依据段数量与已删除文档占比
对应操作只读索引可做 force merge
所属系统Elasticsearch / OpenSearch

典型使用场景

  • 评估合并压力:看段数与大小分布,判断后台合并是否跟得上写入
  • 排查段爆炸:批量导入前后对比段数量变化
  • 回收空间:确认已删除文档占比,评估强制合并的收益
  • 定位查询变慢:同一分片段数激增时查询需要遍历更多段
  • 只读索引优化:归档索引合并成少量大段,减少查询与恢复开销

查看与统计

查看与统计
GET /_cat/segments/logs-2024.01?v&h=index,shard,segment,docs.count,docs.deleted,size,committed

GET /_cat/segments/logs-2024.01?v | wc -l   # 粗略统计段行数

# 只读索引可强制合并为较少段数(正在写入的索引不要做)
# POST /logs-2024.01/_forcemerge?max_num_segments=1

输出的列读法

列含义异常表现
index / shard索引与分片定位到具体分片
segment段标识同分片段数过多说明合并跟不上
docs.count段内文档数小段极多说明刷新过于频繁
docs.deleted已删除标记数占比高说明空间尚未回收
size段占用大小碎片化严重时小段总量偏大
committed是否已提交未提交的段在重启后表现不同
每个段自身也有固定开销(内存结构、文件句柄),段数过多会同时拖慢查询与分片恢复速度,这是段数量需要关注的真正原因。
已删除文档只是被标记,磁盘空间要等合并后才真正回收;看到 docs.deleted 很大不必立刻扩容,先确认合并任务是否在正常推进。
force merge 会长时间占用磁盘 IO 与 CPU,应安排在低峰执行,避免同时操作多个大索引,也避免对仍在写入的索引执行。

易错点

  • docs.deleted 只是标记删除,磁盘空间要等合并后才回收
  • 频繁 refresh 会持续产生小段,批量导入前调大 refresh_interval 能明显减少段数量
  • 对正在写入的索引做 force merge 会与合并线程争抢资源,且很快又会产生新段
  • force merge 期间 IO 占用很高,安排在低峰执行并避免同时操作多个大索引

数据来源与参考

  • Elasticsearch Guide: cat segments API
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌