Elasticsearch Merge合并操作与配置
来源:互联网 发布:数学专业程序员 编辑:程序博客网 时间:2024/06/05 18:49
在elasticsearch中,一个分片就是一个完整的Lucene索引,一个Lucene索引又分解为很多segment,segment作为索引存储数据的底层单位,是不可变的。为了保证segment个数在一定范围之内和物理删除已打删除标记的文档,一些小的segment会周期性的合并为更大的segment。合并线程会根据硬件配置,自动平衡合并操作和其他一些操作(比如查询)。
Merge 调度任务
合并任务调度实例(ConcurrentMergeScheduler)控制着合并操作的进程。合并操作使用不同的线程
来进行合并操作,当线程数已达最大时,后面合并操作只能等待前面的线程执行完并可用时,才会进行合并;
合并调度程序支持动态配置最大线程数,配置参数为index.merge.scheduler.max_thread_count ,
参数值为 Math.max(1, Math.min(4, Runtime.getRuntime().availableProcessors() / 2)),机械硬盘读写速度慢,如果配置太大,IO消耗太大,可能影响其他的操作,所以最好配置为1;
对应源代码为:
类文件:org.apache.lucene.index.ConcurrentMergeScheduler.java
/** Used for testing. * @lucene.internal */ public static final String DEFAULT_CPU_CORE_COUNT_PROPERTY = "lucene.cms.override_core_count"; /** Sets max merges and threads to proper defaults for rotational * or non-rotational storage. * 根据磁盘类型来设置最大合并线程数和最大正在合并的segment数 * @param spins true to set defaults best for traditional rotatational storage (spinning disks), * else false (e.g. for solid-state disks) */ public synchronized void setDefaultMaxMergesAndThreads(boolean spins) { if (spins) {//机械的默认配置 maxThreadCount = 1;//最大合并线程数 maxMergeCount = 6; } else {//固态硬盘时 int coreCount = Runtime.getRuntime().availableProcessors(); // Let tests override this to help reproducing a failure on a machine that has a different // core count than the one where the test originally failed: try { String value = System.getProperty(DEFAULT_CPU_CORE_COUNT_PROPERTY); //如果环境变量有这个DEFAULT_CPU_CORE_COUNT_PROPERTY值,就用这个,否则用coreCount if (value != null) { coreCount = Integer.parseInt(value); } } catch (Throwable ignored) { } maxThreadCount = Math.max(1, Math.min(4, coreCount/2)); maxMergeCount = maxThreadCount+5; } }
org.elasticsearch.index.engine.ElasticsearchConcurrentMergeScheduler.java
void refreshConfig() { if (this.getMaxMergeCount() != config.getMaxMergeCount() || this.getMaxThreadCount() != config.getMaxThreadCount()) { this.setMaxMergesAndThreads(config.getMaxMergeCount(), config.getMaxThreadCount()); } boolean isEnabled = getIORateLimitMBPerSec() != Double.POSITIVE_INFINITY; if (config.isAutoThrottle() && isEnabled == false) { enableAutoIOThrottle(); } else if (config.isAutoThrottle() == false && isEnabled) { disableAutoIOThrottle(); } }
org.elasticsearch.index.MergeSchedulerConfig.java 变量配置:
public static final Setting<Integer> MAX_THREAD_COUNT_SETTING = new Setting<>("index.merge.scheduler.max_thread_count", (s) -> Integer.toString(Math.max(1, Math.min(4, EsExecutors.boundedNumberOfProcessors(s) / 2))), (s) -> Setting.parseInt(s, 1, "index.merge.scheduler.max_thread_count"), Property.Dynamic, Property.IndexScope); public static final Setting<Integer> MAX_MERGE_COUNT_SETTING = new Setting<>("index.merge.scheduler.max_merge_count", (s) -> Integer.toString(MAX_THREAD_COUNT_SETTING.get(s) + 5), (s) -> Setting.parseInt(s, 1, "index.merge.scheduler.max_merge_count"), Property.Dynamic, Property.IndexScope); public static final Setting<Boolean> AUTO_THROTTLE_SETTING = Setting.boolSetting("index.merge.scheduler.auto_throttle", true, Property.Dynamic, Property.IndexScope); private volatile boolean autoThrottle; private volatile int maxThreadCount; private volatile int maxMergeCount;
本地4个的PC机刚好算出是2个线程
- Elasticsearch Merge合并操作与配置
- svn merge 分支与合并
- SVN 分支与合并(branch、merge)
- (五)RxJava操作符:merge合并操作符
- Elasticsearch 安装与集群配置
- Elasticsearch Cluster 安装与配置
- centos elasticsearch安装与配置
- 增量合并操作Delta Merge Operation之过程
- 增量合并操作Delta Merge Operation之触发
- SVN merge的主干,分支的相互合并操作
- RxJava合并Observable——merge和mergeDelayError操作符
- SVN merge的主干,分支的相互合并操作
- RxJava2 / RxAndroid2的merge操作合并多个Observable
- RxJava合并Observable——merge和mergeDelayError操作符
- GIT 分支的合并 与 分支删除 (merge与delete)
- broadleaf电商文档翻译 Merge Configuration 合并配置
- Elasticsearch segments merge
- Araxis Merge基本配置及操作
- Introduction to Programming with c++ 13-3 文件结束符的一点小问题
- 常用vim命令
- nginx php-fpm安装配置
- tcp/ip简介------tcp/ip背景介绍
- 【html5】Web存储_locaStorage对象的应用
- Elasticsearch Merge合并操作与配置
- function, new function, new Function之间的区别
- UVA - 10487 Closest Sums
- 级联分类器人脸检测
- java程序的种类
- 这个星期的错误总结反思
- 人脸、人眼检测与跟踪
- tcp/ip简介------链路层介绍
- yi 2.0 安装(一)