优化 Elasticsearch 索引
Posted
技术标签:
【中文标题】优化 Elasticsearch 索引【英文标题】:Optimize Elasticsearch index 【发布时间】:2016-03-17 08:57:59 【问题描述】:由于磁盘空间不足和我的一个索引中有大量已删除文档,我需要执行优化命令(ElasticSearch 1.7)
目前,该索引具有以下统计信息:
分片:15 * 1 |文档:23,165,760 |大小:1.25TB
在优化完成之前,优化 API 会阻止任何索引/查询操作吗? 优化 API 会影响对其他索引的操作吗? 是否有可能知道大概需要多长时间?对不起我的英语不好:)
如果您需要任何进一步的统计数据,请告诉我
【问题讨论】:
【参考方案1】:在优化完成之前,优化 API 会阻止任何索引/查询操作吗?
不,它可以并行运行,但索引过程会影响优化。创建了新的细分市场,这些细分市场也需要优化......
优化 API 会影响对其他索引的操作吗?
不是直接,而是通过使用额外的 CPU、内存和磁盘间接地。
是否有可能知道大概需要多长时间?
不 :-),也许只能通过预先测试并推断出文档/片段的数量。
请注意,优化将需要额外的磁盘空间。如果优化到非常少的段数,则优化过程很可能最终会尝试优化一组非常大的段,这意味着它将需要额外的 (largeSegment1_size + largeSegment2_size + ....) 磁盘空间。只有当结果合并段完成时,旧段才会被删除。
另外,请查看only_expunge_deletes 选项以获取替代方案。
另一个建议是在集群负载较少时执行优化。正如我提到的,优化需要额外的 CPU、内存和磁盘空间资源。
【讨论】:
谢谢 Andrei :) 最终是否有可能阻止优化过程?也许停止索引。如果优化结束,是否有任何标志可以让我理解? 我认为不可能停止优化。您可以使用GET /_nodes/stats/thread_pool
检查是否有活动优化并查找 optimize
部分。
看来优化已经结束了。没有释放磁盘空间。我刚刚用 kopf 插件调用了优化命令。我想没有设置任何 expunge deletes 参数。我是否必须发送命令:POST /my_index/_optimize?only_expunge_deletes=true 我认为优化 API 会释放磁盘空间,即使没有该参数
您确定在该索引中已将文档标记为已删除吗?
使用 only_expunge_deletes 参数一切正常! :) 现在我有更多可用磁盘空间 优化仍在处理中。现在,从优化统计中,我看到队列是 75,完成了 29。线程只有 1。是否可以设置更多的优化线程以更快的方式结束它?以上是关于优化 Elasticsearch 索引的主要内容,如果未能解决你的问题,请参考以下文章