【发布时间】:2017-03-03 05:21:40
【问题描述】:
问:如何获取自上次刷新以来的最新索引的size(使用_stats)?
我正在对 Elasticsearch 集群进行一些性能测试。代码有效:
Create INDEX
Set refresh_interval to -1 (don't refresh while inserting)
Insert 2000 documents into INDEX
Set refresh_interval back to 1 (default)
Force a refresh of INDEX
Get _stats of INDEX (particularly to get the size)
我的理解是当文件are indexed时,它们首先被插入到一个ES内存缓冲区中。强制刷新将导致 ES 为仍在缓冲区中的文档创建一个 Lucene 段。 (还有一些其他情况,文档缓冲区也会清空到 Lucene 段中。)
我相信refreshing the index 将保证到那时为止的文档都是可搜索的。我希望 ES 使可搜索的文档也反映在 _stats 中。但是,我发现统计请求的大小不确定(例如,它可能是 520 字节而不是 23602)。
我尝试在刷新后、_stats 调用之前休眠我的进程,但成功率各不相同。但我想知道是否有适当的、一致的解决方案来获取最新的统计数据? (或者,如果我的理解不正确)。
示例
插入 2000 个文档后,我立即在 Sense 中手动(重复)运行 _stats 并检查结果。在一段时间内,大约 5 秒,我会看到:
"primaries": {
"docs": {
"count": 2000,
"deleted": 0
},
"store": {
"size_in_bytes": 520,
"throttle_time_in_millis": 0
那么(随着 ES 突然变得和最近的变化一致),我看看:
"primaries": {
"docs": {
"count": 2000,
"deleted": 0
},
"store": {
"size_in_bytes": 23602,
"throttle_time_in_millis": 0
只要没有添加新文档,这个结果就会无限期地持续下去。
【问题讨论】:
-
是什么让您认为“这似乎是错误的”?向我们展示一些数字以及您的期望。
-
啊,对。我发现
_stats调用中的索引大小不正确。我使用bulk调用索引了 1000 个文档(每个文档都包含时间戳、双精度和字符串列表)。我在索引上调用refresh。然后我在索引上调用stats。响应显示索引总共为 130 字节。我可以稍后从 Sense 手动调用_stats,然后看到现在有 135976 字节(Marvel 还在索引摘要页面上显示了这个更大、合理的数字)。 -
你能显示你正在运行的命令列表(即你的代码)吗?
-
我可以,但是很长。不过,更一般地说,我希望对 ES 实际上在做什么我称之为
_stats有一些直觉。我会再挖一些,尽快回来。 -
我很担心你的刷新电话,特别是因为你有一个错字:
refresh_interal应该是refresh_interval
标签: elasticsearch