弹性搜索批量上传会随着时间的推移而变慢
本文关键字:时间 搜索 | 更新日期: 2023-09-27 17:59:09
我正在将大量数据集从动力学导出到弹性搜索。以下是步骤:
- 从SQL中获取数据(我使用的是实体框架)。让我们将主要类型命名为contact
- 然后,我按照定义的大小对数据进行分组并序列化它们
- 根据ES文档设置批量上传的格式数据
- 调用HttpPost并将数据发送到ES Endpoint
我正在大量记录它所花费的时间和任何错误。
一切正常,我的导出在一小时内导出数据。
也就是说,我观察到HttpPost的响应时间不断增加。我已经查找了任何我可能存在的内存泄漏,或者任何我应该处理但没有处理的东西。我想确保它以后不会困扰我。
那么,响应时间增加的可能原因是什么?我该如何着手调查这个问题?
我使用ES 1.7,并使用类似的场景索引大约1000万个文档。根据我的经验,如果你用力推动ES,它会减慢速度,有时会因OutOfMemory异常而失败。我不知道新版本是否仍然存在问题。
IMHO,这是因为ES需要一些时间来处理批量——它接受数据,对其进行索引,但之后它会做一些后台工作来优化索引。
为了克服这个问题,我尝试了一些参数:单个块大小(N)、索引块之间的睡眠时间(S1),以及几个块之间更长的睡眠(M)(S2)。对于我的数据集和硬件,我以N=5000、S1=1s、M=10、S2=10s结束。为了选择安全值,我观察了CPU、内存和I/O的使用情况。例如,长时间增加I/O使用可能意味着ES很快就会中断。
我相信它非常依赖于你的硬件,尤其是给ES尽可能多的内存!