写性能优化
优化方案:
- 客户端: 多线程写,批量写
- ES:在高质量数据建模前提下,主要在refresh,translog和flush之间做文章
写性能优化 - refresh
- 增大refresh_interval,降低实时性,增大一次refresh处理的文档树,默认是1s,设置为-1直接禁止自动refresh
- 增大index buffer size ,参数 indices.memory.index_buffer_size(静态参数,在elasticsearch.yml),默认10%
写性能优化 - translog
- index.translog.durability设置为async(异步模式),index.translog.sync_interval设置需要的大虾片,比如120s,那么translog会120s写一次磁盘
- index.translog.flush_threshold_size默认512mb,translog超过该大小会触发flush
写性能优化 - 其他
- 副本设置为0,写完再增加
- 合理设计shard数,并保证shard均匀分配在所有的node上,充分利用node资源
· index.routing.allocation.total_shards_per_node限定每个索引在每个node上可分配的总主副分片数
· 5个node,某索引10个分片,1个副本,如何设置
~ (10 + 10)/5=4
~ 实际要设置5个,防止node下线时,分片迁移失败
读性能优化
读性能优化 - 数据建模
- 高质量的数据建模
- 将需要通过script脚本动态计算的值提前算好作为字段存到文档中
- 尽量使得数据模型贴近业务模型
读性能优化 - 索引配置调优
- 根据数据规模设置合理的主分片数,可通过测试得到适合的分片数
- 设置合理的副本数
读性能优化 - 查询语句调优
- 尽量使用Filter上下文,减少算分的场景,由于Filter有缓存机制,可以极大提升查询性能
- 尽量不要使用Script进行字段计算或算分排序
- 结合profile/explain API分析慢查询进行分析