我在弹性搜索中有2个索引,其中一个在默认存储类型上运行,另一个在内存存储类型上运行。我已经为这两个索引中的每一个插入了100,000个文档,默认存储索引比ram索引快1秒。那是为什么?
并且在搜索时,默认索引也很快。
我的ES服务器正在SSD上运行。 有人可以解释一下为什么内存索引比SSD上的一个商店慢吗?
答案 0 :(得分:1)
您必须在负载测试期间监控JVM和系统内存的运行情况,以便真正了解正在发生的事情。
memory
索引选项可以对操作系统内存管理器起作用。它还可以通过使JVM更加努力地释放空间来增加垃圾收集暂停。
default
选项(64位Linux系统上的mmapfs
)允许操作系统以更有效的方式管理缓存/交换内存页面。
1秒是针对小索引的查询的大量增加的延迟。如果我冒险猜测,我会说你的memory
索引不是100%驻留在物理内存中,因此操作系统必须在查询之前从虚拟>物理中交换不必要的大页面完整。
本文详细介绍(来自Solr上下文,但底层的Lucene实现是相同的):http://blog.thetaphi.de/2012/07/use-lucenes-mmapdirectory-on-64bit.html
尝试增加系统内存,或者针对较少数量的文档进行测试,看看是否存在差异。
答案 1 :(得分:1)
最好的办法是在系统上完全禁用交换。 你可以尝试:
#sudo swapoff -a
或编辑您的/ etc / fstab
您还可以阻止操作系统交换JVM。在elasticsearch.yml:
bootstrap.mlockall: true