索引部分
索引(indices) 部分列出了这个节点上所有索引的聚合过的统计值:
"indices": {
"docs": { 0️⃣
"count": 6539564,
"deleted": 2082
},
"shard_stats": {
"total_count": 97
},
"store": {
"size_in_bytes": 2646907845,
"total_data_set_size_in_bytes": 2646907845,
"reserved_in_bytes": 0
},
"indexing": {
"index_total": 15286202,
"index_time_in_millis": 2403080,
"index_current": 0,
"index_failed": 14118852,
"delete_total": 20512,
"delete_time_in_millis": 3402,
"delete_current": 0,
"noop_update_total": 1,
"is_throttled": false,
"throttle_time_in_millis": 0 1️⃣
},
...
返回的统计值被归入以下部分:
-
0️⃣ docs 展示节点内存有多少文档,包括还没有从段里清除的已删除文档数量。
-
1️⃣ store 部分显示节点耗用了多少物理存储。这个指标包括主分片和副本分片在内。如果限流时间很大,那可能表明你的磁盘限流设置得过低(在段和合并里讨论过)。
"indexing": {
"index_total": 15286202,
"index_time_in_millis": 2403080,
"index_current": 0,
"index_failed": 14118852,
"delete_total": 20512,
"delete_time_in_millis": 3402,
"delete_current": 0,
"noop_update_total": 1,
"is_throttled": false,
"throttle_time_in_millis": 0
},
"get": {
"total": 1980564,
"time_in_millis": 202478,
"exists_total": 1973030,
"exists_time_in_millis": 201941,
"missing_total": 7534,
"missing_time_in_millis": 537,
"current": 0
},
"search": {
"open_contexts": 0,
"query_total": 3272088,
"query_time_in_millis": 1806935,
"query_current": 0,
"fetch_total": 3129569,
"fetch_time_in_millis": 97430,
"fetch_current": 0,
"scroll_total": 866806,
"scroll_time_in_millis": 7417778,
"scroll_current": 0,
"suggest_total": 0,
"suggest_time_in_millis": 0,
"suggest_current": 0
},
"merges": {
"current": 0,
"current_docs": 0,
"current_size_in_bytes": 0,
"total": 97527,
"total_time_in_millis": 5367815,
"total_docs": 364477569,
"total_size_in_bytes": 136348510561,
"total_stopped_time_in_millis": 0,
"total_throttled_time_in_millis": 762543,
"total_auto_throttle_in_bytes": 2482171511
}
-
indexing 显示已经索引了多少文档。
-
这个值是一个累加计数器。在文档被删除的时候,数值不会下降。
-
还要注意的是,在发生内部 索引 操作的时候,这个值也会增加,比如说文档更新。
-
还列出了索引操作耗费的时间,正在索引的文档数量,以及删除操作的类似统计值。
-
-
get 显示通过 ID 获取文档的接口相关的统计值。
- 包括对单个文档的 GET 和 HEAD 请求。
-
search 描述在活跃中的搜索( open_contexts )数量、查询的总数量、以及自节点启动以来在查询上消耗的总时间。
-
用 query_time_in_millis / query_total 计算的比值,可以用来粗略的评价你的查询有多高效。比值越大,每个查询花费的时间越多,你应该要考虑调优了。
-
fetch 统计值展示了查询处理的后一半流程(query-then-fetch 里的 fetch )。如果 fetch 耗时比 query 还多,说明磁盘较慢,或者获取了太多文档,或者可能搜索请求设置了太大的分页(比如, size: 10000 )。
-
-
merges 包括了 Lucene 段合并相关的信息。
-
它会告诉你目前在运行几个合并,合并涉及的文档数量,正在合并的段的总大小,以及在合并操作上消耗的总时间。
-
在你的集群写入压力很大时,合并统计值非常重要。合并要消耗大量的磁盘 I/O 和 CPU 资源。如果你的索引有大量的写入,同时又发现大量的合并数,一定要去阅读索引性能技巧。
-
注意:文档更新和删除也会导致大量的合并数,因为它们会产生最终需要被合并的段 碎片 。
-
"query_cache": {
"memory_size_in_bytes": 997384,
"total_count": 1037643,
"hit_count": 19450,
"miss_count": 1018193,
"cache_size": 188,
"cache_count": 670,
"evictions": 482
},
"fielddata": {
"memory_size_in_bytes": 736,
"evictions": 0
},
"completion": {
"size_in_bytes": 0
},
"segments": {
"count": 192,
"memory_in_bytes": 0,
"terms_memory_in_bytes": 0,
"stored_fields_memory_in_bytes": 0,
"term_vectors_memory_in_bytes": 0,
"norms_memory_in_bytes": 0,
"points_memory_in_bytes": 0,
"doc_values_memory_in_bytes": 0,
"index_writer_memory_in_bytes": 4173916,
"version_map_memory_in_bytes": 51318,
"fixed_bit_set_memory_in_bytes": 593296,
"max_unsafe_auto_id_timestamp": 1656995860384,
"file_sizes": {}
},
-
filter_cache 展示了已缓存的过滤器位集合所用的内存数量,以及过滤器被驱逐出内存的次数。
-
过多的驱逐数 可能 说明你需要加大过滤器缓存的大小,或者你的过滤器不太适合缓存(比如它们因为高基数而在大量产生,就像是缓存一个 now 时间表达式)
-
不过,驱逐数是一个很难评定的指标。过滤器是在每个段的基础上缓存的,而从一个小的段里驱逐过滤器,代价比从一个大的段里要廉价的多。有可能你有很大的驱逐数,但是它们都发生在小段上,也就意味着这些对查询性能只有很小的影响。
-
把驱逐数指标作为一个粗略的参考。如果你看到数字很大,检查一下你的过滤器,确保他们都是正常缓存的。不断驱逐着的过滤器,哪怕都发生在很小的段上,效果也比正确缓存住了的过滤器差很多。
-
-
field_data 显示 fielddata 使用的内存,用以聚合、排序等等。
-
这里也有一个驱逐计数。和 filter_cache 不同的是,这里的驱逐计数是很有用的:这个数应该或者至少是接近于 0。因为 fielddata 不是缓存,任何驱逐都消耗巨大,应该避免掉。
-
如果你在这里看到驱逐数,你需要重新评估你的内存情况,fielddata 限制,请求语句,或者这三者。
-
-
segments 会展示这个节点目前正在服务中的 Lucene 段的数量。
-
这是一个重要的数字。大多数索引会有大概 50–150 个段,哪怕它们存有 TB 级别的数十亿条文档。
-
段数量过大表明合并出现了问题(比如,合并速度跟不上段的创建)。
-
注意这个统计值是节点上所有索引的汇聚总数。记住这点。
-
memory 统计值展示了 Lucene 段自己用掉的内存大小。这里包括底层数据结构,比如倒排表,字典,和布隆过滤器等。太大的段数量会增加这些数据结构带来的开销,这个内存使用量就是一个方便用来衡量开销的度量值。
-