elasticSearch 读写性能调优
elasticSearch作为java后端和大数据核心的技术之一,肯定在面试当中它的性能调优肯定是要问的,看了好多人整理的性能调优方案,确实受益匪浅。自己整理一份简单的性能调优,能应付面试就行了。哈哈哈!!!
一、写入调优
- 增加flush时间间隔,目的是减少数据写入磁盘的频率,减少磁盘的IO
- 增加buffer到segment file 的refresh的时间间隔,默认是1s。目的是减少segment文件的创建,减少segment的merge的次数,merge是发生在jvm中的,可能导致full GC。增加refresh的时间间隔的缺点就是降低了搜索的时效性。
- 增加Buffer大小,本质也是减少refresh的时间间隔,因为导致segment文件创建的原因不仅有时间的阈值,还有Buffer空间的大小,写满了也会创建。默认Buffer的大小是 48MB<默认值堆大小的10%<默认最大无限制
- 大批量的数据写入尽量控制在低检索请求的时间段,大批量的写入请求越集中越好。
- 减小读写之间的资源抢占,读写分离
- 当检索请求数量很少的时候,可以减少甚至完全删除副本的分片,关闭segment的自动创建以达到高效利用内存的目的,因为副本的存在会导致主从之间频繁的进行数据同步,大大增加服务器的资源占用
-
Lucene的数据的fsync是发生在OS cache的,要给OS cache 预留足够的内存大小。
-
通用最小的算法,能用更小的字段就用更小的,keyword类型比int更快。
-
ignore_above:字段保留的长度,越小越好
-
调整_source字段,通过include和exclude过滤
-
store:开辟另一块存储空间,可以节省带宽。
注意:_source设置为false则不存储元数据,可以节省磁盘,并不影响搜索,但是禁用source也会存在弊端。
- update,update_by_query 和reindex 不可用
- 高亮失效
- reindex失效,原本可以修改的mappingde 部分参数将无法修改,并且无法升级索引
- 无法查看元数据和聚合搜索
- 影响索引的容灾能力
-
禁用all字段:all字段的包含所有的字端分词后的Term,作用是可以在搜索时不指定特定字段,从所有字段中检索,es 6.0之前需要手动的关闭
-
关闭Norms字段:计算评分用,如果你确定当前字段将来不需要计算评分,设置为false可以节省大量的磁盘空间,有助于提升性能。常见的比如filter和agg字段,都可以设为关闭文章来源:https://www.toymoban.com/news/detail-639526.html
-
关闭index_options(谨慎使用,高端操作):词设置用于index time 过程中那些内容会被添加到倒排索引文件中。例如TF,docCount、postion、offset,减少option的选项可以减少在创建索引的CPU占用率,不过在实际场景中很难确定业务是否会用到这些信息,除非是在一开始就非常确定用不到,否则不建议删除。文章来源地址https://www.toymoban.com/news/detail-639526.html
二、搜索速度调优
- 禁用swap
- 使用filter 代替query
- 避免深度分页,避免单页数据过大,可以参考百度或者淘宝的做法。es 提供两种解决方案scroller search 和search after
- 注意关于index type的使用
- 避免使用稀疏数据
- 避免使用单索引业务重耦合
- 命名规范
- 冷热分离的架构设计
- fileddata:搜索时正派索引,doc_value 为index time正排索引
- enable :是否创建倒排索引
- doc_values:正排索引,对于不需要聚合的字段,关闭正排索引可节省资源,提高查询速度
- 开启自适应副本(ARS),6.1版本支持,7.0默认开启
到了这里,关于elasticsearch 读写性能调优的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!