es - 关于es的优化

178 阅读1分钟

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

1. 写入速度优化 :
	0. 缺点 :牺牲可靠性和实时性
	1. 加大translog flush间隔 :
		1. 默认 :请求一次flush一次
				index.translog.durability : request
		2. 手动 :
			index.translog.durability : async
			index.translog.sync_interval : 120s
			index.translog.flush_threshold_size : 1024mb
	2. 加大索引刷新间隔 :
		1. 默认 :12. 手动 :
			index.refresh_interval : 120s
	3. 段合并优化 :
		1. index.merge.scheduler.max_thread_count
		2. index.merge.policy.*
	4. 索引缓存 :
		1. indices.memory.index_buffer_size
	5. 批量并发写入
	6. 磁盘间均衡的分配任务 :
		1. 轮询
		2. 根据可用空间加权轮询
	7. 节点间任务均衡,均衡的写入到各个节点
	8. 索引优化:
		1. 自动生成doc id
		2. 调整字段:
			1. 减少字段数量
			2. 不需要分词的字段不分词
			3. 选择合适的分析器
			4. 减少字段内容长度
			5. 不需要评分禁用 Norms
		3. 禁用 _all
2. 搜索速度优化:
	1. 为系统缓存预留一半的物理内存
	2. 使用固态硬盘,提高IO能力
	3. 合理文档建模,避免嵌套
	4. 只读索引合并为单个分段
	5. 预加载文件系统
	6. 优化查询表达式:
	7. batched_reduce_size :指定数量的分片结果返回后可以处理一部分
	8. 使用近似聚合
	9. 选择聚合方式 : 深度优先(默认) 或 广度优先
	10. 限制请求的分片数:
		action.search.shard_count
	11. 利用自适应副本ARS提升响应速度
	12. 字段映射,如标识符映射为keyword
	13. 避免使用脚本
	14. 优化日期搜索 :日期四舍五入
3. 实践:
	1. 关闭swap
	2. 设置oom killer, oom_score_adj

在这里插入图片描述