是ElasticSearch内存索引快



我在弹性搜索中有2个索引,一个是在默认存储类型上运行,另一个是在内存存储类型上运行。我在这两个索引中分别插入了100,000个文档,默认存储索引比ram索引快1秒。为什么?

和在搜索上也默认索引是快速的。

我的ES服务器在SSD上运行。有人能解释一下为什么内存索引比SSD上的一个存储慢吗?

您必须在负载测试期间监视JVM和系统内存的情况,才能真正了解发生了什么。

memory索引选项可以针对OS内存管理器工作。它还会导致JVM更加努力地释放空间,从而增加垃圾收集暂停时间。

default选项(64位Linux系统上的mmapfs)让操作系统以更有效的方式管理缓存/交换内存页。

1秒对于一个小索引的查询来说是一个很大的延迟。如果我要大胆猜测,我会说您的memory索引不是100%驻留在物理内存中,因此操作系统必须在查询完成之前从virtual->physical交换不必要的大页面。

本文将详细介绍(从Solr上下文中,但底层Lucene实现是相同的):http://blog.thetaphi.de/2012/07/use-lucenes-mmapdirectory-on-64bit.html

尝试提高系统上的内存,或者针对更少的文档进行测试,看看差异是否仍然存在。

最好的方法是在系统上完全禁用交换。你可以试试:

#sudo swapoff -a

或者编辑/etc/fstab

您还可以防止JVM被操作系统交换。在elasticsearch。yml:

bootstrap.mlockall: true

最新更新