zoukankan      html  css  js  c++  java
  • Elasticsearch 性能调优

     主要修改参数

    最近几天的主要工作是对于我们当前业务场景下,完成性能调优,主要修改了以下参数的配置,写入性能由最初的8k+,到现在基本达到10K,此时的性能瓶颈已经不在ES本身,主要受限于磁盘IO。

    "refresh_interval" : "120s",
    "index.translog.interval": "60s",
    "index.translog.durability": "async",
    "index.translog.sync_interval": "30s",
    "index.merge.scheduler.max_thread_count": "1",    //进行merge操作的最大线程数,对于FS的环境上该值应该为4,
    "index.merge.policy.max_merged_segment": "1gb",   //默认5G
    "index.merge.policy.floor_segment": "50mb"

    结论如下:

    进行这次验证部署两个实例,磁盘性能经过多次验证,取的平均值,大概写入约70M/s,单挑doc的字节书大概在400-430左右。

    机器配置:16U32G,但是给ES的配置内存为4G(由于当前机器部署的其他应用较多)

    10K写入量大约需要5+个核。

    我们使用批量写的方式进行写入,一次写入10K条数据。单次几乎是4M的数据量。

    配置说明

    refresh_interval:周期的大小,决定了此时doc被检索到的周期,主要是来确定事实实时的参数,如果并不要求足够的实时性,其实,完全可以关闭,在doc全部刷新到磁盘后仍然是可以被检索的
    index.translog.flush_threshold_ops:当发生多少次操作时进行一次flush。默认是 unlimited。
    index.translog.flush_threshold_size:当translog的大小达到此值时会进行一次flush操作。默认是512mb。
    index.translog.flush_threshold_period:在指定的时间间隔内如果没有进行flush操作,会进行一次强制flush操作。默认是30m。
    index.translog.interval:多少时间间隔内会检查一次translog,来进行一次flush操作。es会随机的在这个值到这个值的2倍大小之间进行一次操作,默认是5s。

    index.merge.scheduler.max_thread_count: segment进行merge的线程数,计算方式Math.max(1, Math.min(4, Runtime.getRuntime().availableProcessors() / 2)),如果你的磁盘不是SSD盘,就可以将其调整为1

    index.merge.policy.max_merged_segment:最大可以merge的segment,默认5G,将其改为1G,来节约IO。

    index.merge.policy.floor_segment:小于这个值的segment,均会被优先进行merge操作,将其调大,最大限度的一次多完成merge操作。

  • 相关阅读:
    内存分配略谈
    变量声明顺序和指针偏移问题示例
    解决You have to be inside an Angular CLI project in order to use the serve command
    Linux中将命令放到全局
    Linux设置vim显示行号
    根据指定的excel模板导出数据
    解决 Maven工程运行报错Failed to clean project: Failed to delete
    springcloud工作用常用到的一些注解
    cmd窗口备份mysql数据库
    调用存储过程msql
  • 原文地址:https://www.cnblogs.com/woniu4/p/9279259.html
Copyright © 2011-2022 走看看