es 插入索引的正常性能应该是多少? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
winRain
V2EX    Elasticsearh

es 插入索引的正常性能应该是多少?

  •  
  •   winRain 2022-06-15 21:59:56 +08:00 3740 次点击
    这是一个创建于 1213 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:由于公司业务需要,引入了 es 。于是,我在公司内网虚拟机( 8c8g ,固态硬盘)上用 docker compose 启动了一个 es 和 kibana ,并给 es 的 jvm 分配了 6g ,并配置了一些 jvm 参数。

    当我用 spring data elasticsearch 的 repository saveAll 操作去批量插入 100 条数据时,发现耗时在 200 ms 左右。其实我感觉这个速度跟正常用公有云的 rds 批量插入数据是差不多了。

    那么问题来了,es 这个插入速度是正常的吗,是不是还有其他优化参数可以配置,用来提升这个插入性能?如果这样是正常的,那么 es 在插入和查询上相比于 rds ,在实际应用中,优势体现在哪些地方呢?

    11 条回复    2022-06-18 19:58:04 +08:00
    DonaldY
        1
    DonaldY  
       2022-06-15 22:25:29 +08:00
    100 条插入要 200ms ,那 qps 是 500 。

    优化的话,内存明显不够。ES 堆内存 6G ,总内存 8G ,那么就剩 2G ,要给 kibana 、docker 、机器本身,剩下给 os cache 就没多少。

    详细优化可以看官网,很全了: https://www.elastic.co/guide/en/elasticsearch/reference/7.9/tune-for-indexing-speed.html#tune-for-indexing-speed


    优势写入快,近实时查询,且能分词。
    strawberryBug
        2
    strawberryBug  
       2022-06-15 23:16:50 +08:00 via Android
    不正常。
    生产单实例平均每秒写入 8k 条,每条约 0.7kb 。
    MIUIOS
        3
    MIUIOS  
       2022-06-16 08:52:57 +08:00
    es 和 kibana 两个内存猛兽你全跑了,剩给系统的时间不多了
    billlee
        4
    billlee  
       2022-06-16 15:09:09 +08:00
    1. es 需要使用系统 page cache, 一般配置 jvm 堆只能使用一半的系统内存,也就是说 8g 机器配置 4g 的堆,剩下的内存也不能用来跑 kibana 了
    2. 延迟 != 吞吐量,提高并发可以增大吞吐量
    3. 有两个关键参数影响 es 的写入速度:translog 的 flush 间隔和 reindex 间隔
    4. 数据库系统对磁盘 I/O 性能敏感,没有人会在生产环境拿虚拟机来跑 es 或 rdbms 的,即使公有云的服务也是直接在物理机上跑
    mosliu
        5
    mosliu  
       2022-06-16 15:52:58 +08:00
    刚才看了眼
    用的 bulkProcessor 240 多条用大约 200ms 吧。
    平均插入的数据单条在 40+ kB
    折合每秒能力在 1k 以上

    分析:这个的内存分配极为不合理啊
    es6G
    kibana 和系统 还有 es 的 cache 一起去分 2G ???
    winRain
        6
    winRain  
    OP
       2022-06-17 10:27:59 +08:00
    @mosliu 其实我 200 多条的数据插入速度也跟你这个差不多。但是 kibana 和 es cache 分 2G 这个我之前确实不太懂,没考虑到,那如果按这个 8g 的虚拟机来的话,内存应该怎么分配呢
    winRain
        7
    winRain  
    OP
       2022-06-17 10:28:56 +08:00
    @DonaldY 感谢大佬回复,我看过这篇帖子,也试了里面说的一些方法,但是提升仍然也是不明显
    winRain
        8
    winRain  
    OP
       2022-06-17 10:55:03 +08:00
    @billlee 我后面也试过公有云的 es ,用的免费版那种,对比下来跟我虚拟机搭的这个环境也差不了多少。在我最刚开始的想法中,es 的 bulkindex 应该是可以类比为 MySQL 的批量插入的,而我用公有云的 rds 批量插入几十条数据,实际可能几十 ms 肯定不到 100 ms ,那么我刚开始觉得,es 既然是专门用来做搜索的,批量插入这种应该不慢,起码我在公有云上随便搭个 redis ,性能也就几十 ms 。所以我一直想说,有没有什么办法可以让 es 的批量插入 几十 条数据的速度也能在几十 ms
    mosliu
        9
    mosliu  
       2022-06-17 11:01:25 +08:00
    @winRain 嗯 我这边同时有 10+ 个程序同时在操作 es 吧...

    记得新插入的数据是放在内存里面的。等定时再去持久化。这个时间可配置,我忘了是啥了。

    你这内存分配确实不合理。一般至少留和 heap 一样的内存给 es 。

    我没用过很大的集群。只是十几个节点( 12C ,64G )的小集群的情况 仅供参考
    winRain
        10
    winRain  
    OP
       2022-06-18 15:46:31 +08:00
    @mosliu 我在另一台 32 g 内存的云服务器也按同样的方式搭了 es 和 kibana ,这样来看的话,应该不存在上面说的没有 os cache 的问题,但速度还是 100 多 ms 。这样的话,抛去硬件因素,es 有没有可能通过一种搭建方式,能够达到 20 多条用 bulk index 也能达到 50 ms 以下的插入速度?
    mosliu
        11
    mosliu  
       2022-06-18 19:58:04 +08:00
    开 20 线程 不用 bulk 直接 indexrequest
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     887 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 20:56 PVG 04:56 LAX 13:56 JFK 16:56
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86