使用 Elastic Search Nest 插入数据的性能问题

Performance Issue on Inserting Data using Elastic Search Nest

我们正在为我们的应用程序使用 Elastic Search Nest 客户端,我们对将文档插入 Elastic Search DB 进行了负载测试,我们发现存在性能问题。

索引大小 2Kb,分片数 5,副本 1,单实例数据库(无集群)

最终结果统计我们每秒只能插入 3 条记录..这是预期结果吗?

当我们增加客户端线程时,结果变为每秒 2 条记录,请建议

测试用例

5个并行线程,每个线程同步推送记录(10000条)。耗时约50分钟(每个线程),每秒插入3条记录。

我在应用程序启动时创建了 N(对于此测试用例为 5)个客户端,并将其重新用于所有请求。

服务器详细信息: 16GB RAM,64 位 OS,Intel Core i7,Windows Server 2008 R2,500 GB 硬盘

客户端机器: 16GB 内存,64 位 OS,Intel Core i7,Windows 7 professional

如果您不使用批量 API,您将无法获得良好的性能。 从 5.0 开始,我们 fsync 磁盘上的每个请求。

可以包含例如 10 000 个索引请求的批量请求将是 fsync 一次。 10 000 个索引请求将生成 10 000 个 fsync 操作。

例如,在我的数据集上,从 2.x 切换到 5.x 我观察到以下结果:

  • 单索引操作:

    • 2.x: 200 docs/s
    • 5.0: 20 docs/s
  • 批量操作:

    • 2.x: 12000-15000 docs/s
    • 5.0: 12000-16000 docs/s

如果您愿意,可以将 index.translog.durability 索引设置更改为 async,但如果出现问题,您将面临数据丢失的风险。

阅读更多关于 Translog