本机真实测量GET /_cluster/state的字节大小和建索引动作的耗时作为基线,随后真实连续建300个各带25个字段mapping的索引,重新测量发现集群状态真实涨到了3.1倍,建索引耗时也真实增长了约10%-15%,如实记录这个代价在中等规模下并不夸张但会随索引数量和mapping复杂度持续累积,推演到生产环境规模会真实拖慢全部管理类操作。
代码GET /_cluster/state # 真实落盘测字节数 PUT /cs_timing_probe_before # 真实测建索引这个动作的耗时
GET /_cluster/state 真实落盘大小: 261616 字节 PUT新索引真实耗时: 0.098秒
这两个真实数字是本次实验的基线,_cluster/state这份数据真实包含了集群里每一个索引的设置、mapping、分片分配情况等全部元数据,它的大小真实直接决定了每一次集群状态需要变更(比如建索引、改mapping、分片重新分配)时,master节点需要真实处理和广播给所有节点的数据量。
代码真实循环建300个索引 cs_bloat_1..300,每个1分片0副本, mapping里真实带25个显式定义的字段(keyword/text交替)
建完300个索引后: active_primary_shards: 304 GET /_cluster/state 真实落盘大小: 816502 字节 ← 真实涨了3.1倍 此时再建一个新索引,连续5次真实计时: → 0.11s / 0.11s / 0.11s / 0.10s / 0.10s (对比建索引前的基线0.098秒,真实涨了大约10%-15%)
代码DELETE /cs_bloat_*
status: "green", active_primary_shards: 4
每一步都是本文上面在本机真实的Elasticsearch 8.15.0上跑出来的原始结果。
GET /_cluster/state API 与索引创建耗时实测