Cache的设置及使用
- QueryCache: ES查询的时候,使用filter查询会使用query cache, 如果业务场景中的过滤查询比较多,建议将querycache设置大一些,以提高查询速度 。
当然也可以禁用查询缓存(默认是开启), 通过index.queries.cache.enabled:false设置 。
- FieldDataCache: 在聚类或排序时 , field data cache会使用频繁,因此,设置字段数据缓存的大小,在聚类或排序场景较多的情形下很有必要,可通过indices.fielddata.cache.size:30% 或具体值10GB来设置 。但是如果场景或数据变更比较频繁,设置cache并不是好的做法,因为缓存加载的开销也是特别大的 。
- ShardRequestCache: 查询请求发起后,每个分片会将结果返回给协调节点(Coordinating Node), 由协调节点将结果整合 。如果有需求 , 可以设置开启; 通过设置index.requests.cache.enable: true来开启 。不过,shard request cache只缓存hits.total, aggregations, suggestions类型的数据,并不会缓存hits的内容 。也可以通过设置indices.requests.cache.size: 1%(默认)来控制缓存空间大小 。
- query_string 或 multi_match的查询字段越多 , 查询越慢 。可以在mApping阶段 , 利用copy_to属性将多字段的值索引到一个新字段,multi_match时,用新的字段查询 。
- 日期字段的查询 , 尤其是用now 的查询实际上是不存在缓存的,因此,可以从业务的角度来考虑是否一定要用now, 毕竟利用query cache 是能够大大提高查询效率的 。
- 查询结果集的大小不能随意设置成大得离谱的值, 如query.setSize不能设置成 Integer.MAX_VALUE, 因为ES内部需要建立一个数据结构来放指定大小的结果集数据 。
- 避免层级过深的聚合查询 , 层级过深的aggregation , 会导致内存、CPU消耗 , 建议在服务层通过程序来组装业务,也可以通过pipeline的方式来优化 。
- 复用预索引数据方式来提高AGG性能:
通过开启慢查询配置定位慢查询不论是数据库还是搜索引擎,对于问题的排查,开启慢查询日志是十分必要的,ES 开启慢查询的方式有多种,但是最常用的是调用模板 API 进行全局设置:
PUT/_template/{TEMPLATE_NAME}{"template":"{INDEX_PATTERN}","settings" : {"index.indexing.slowlog.level": "INFO","index.indexing.slowlog.threshold.index.warn": "10s","index.indexing.slowlog.threshold.index.info": "5s","index.indexing.slowlog.threshold.index.debug": "2s","index.indexing.slowlog.threshold.index.trace": "500ms","index.indexing.slowlog.source": "1000","index.search.slowlog.level": "INFO","index.search.slowlog.threshold.query.warn": "10s","index.search.slowlog.threshold.query.info": "5s","index.search.slowlog.threshold.query.debug": "2s","index.search.slowlog.threshold.query.trace": "500ms","index.search.slowlog.threshold.fetch.warn": "1s","index.search.slowlog.threshold.fetch.info": "800ms","index.search.slowlog.threshold.fetch.debug": "500ms","index.search.slowlog.threshold.fetch.trace": "200ms"},"version": 1} PUT {INDEX_PAATERN}/_settings{"index.indexing.slowlog.level": "INFO","index.indexing.slowlog.threshold.index.warn": "10s","index.indexing.slowlog.threshold.index.info": "5s","index.indexing.slowlog.threshold.index.debug": "2s","index.indexing.slowlog.threshold.index.trace": "500ms","index.indexing.slowlog.source": "1000","index.search.slowlog.level": "INFO","index.search.slowlog.threshold.query.warn": "10s","index.search.slowlog.threshold.query.info": "5s","index.search.slowlog.threshold.query.debug": "2s","index.search.slowlog.threshold.query.trace": "500ms","index.search.slowlog.threshold.fetch.warn": "1s","index.search.slowlog.threshold.fetch.info": "800ms","index.search.slowlog.threshold.fetch.debug": "500ms","index.search.slowlog.threshold.fetch.trace": "200ms"}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 新站SEO优化如何实现“漂亮”流量翻一番的目标
- 麒麟960相当于骁龙多少
- 如何进行Python代码的代码重构和优化?
- 网站开发中的内链策略:如何理解并有效运用内链优化?
- 10大SEO技巧揭秘:让你的网站优化事半功倍,流量飙升
- 黑帽SEO揭秘:为何选择正规优化而非非法手段?
- 元素p和s对钢的性能有哪些影响
- 为什么高性能场景选用Postgres SQL 而不是 MySQL
- 如何优化网页 如何优化网页关键词
- 网页如何优化下载 网页如何优化