索引的配置项按是否可以更改分为static属性与动态配置,所谓的静态配置即索引创建后不能修改。目录如下:生产环境中某索引结构(7.X后有变化)
索引静态配置
1、分片与压缩
- index.number_of_shards:一个索引的主分片(primary shards)数。在ES层面可以通过 es.index.max_number_of_shards 属性设置索引最大的分片数,默认为1024;index.number_of_shards 的默认值为 Math.min(es.index.max_number_of_shards,5),故通常默认值为5。
- index.codec: 数据存储的压缩算法,默认值为LZ4,可选择值 best_compression ,比LZ4可以获得更好的压缩比(即占据较小的磁盘空间,但存储性能比LZ4低)。
2、数据存储类型:index.store.type
不同的文件系统有不同的存储类型。默认情况下,Elasticsearch将根据操作环境选择最佳实现。可选的存储类型有:
- 6.0以后版本已被删除,默认为:default, 参考:https://www.elastic.co/guide/en/elasticsearch/reference/6.0/breaking_60_settings_changes.html#_store_settings
索引动态配置
1.分片相关配置
2.查询相关的设置
3.刷新索引的设置
4、translog设置
- sync_interval :如果 index.translog.durability 设置为 async,用该值来设置刷盘的频率,默认为5s。
- flush_threshold_size: es强制刷新的另外一个维度,如果translog的大小达到该值,则强制将未刷盘的数据强制刷新到Lucene中
- flush_threshold_period: 在指定的时间间隔内如果没有进行flush操作,会进行一次强制flush操作。默认是30m。
- retention.size: 保存跨日志文件的总大小。也就是一translog日志文件flush后,并不马上删除,而是保留一段时间,但最新的translog文件已存储的内容与待删除的文件的间隔不超过该参数设置的值,默认为512M。
- retention.age: 保存translog文件的最大持续时间,默认为12 h
5、查询慢日志设置
- 首先ES提供在查询阶段(query)和数据获取阶段(fetch)设置阔值,超过该阔值则记录日志。 支持如下参数:
1、index.search.slowlog.threshold.query.warn: 10s
2、index.search.slowlog.threshold.query.info: 5s
3、index.search.slowlog.threshold.query.debug: 2s
4、index.search.slowlog.threshold.query.trace: 500ms
- 上述参数定义查询阶段的阔值,分别表示,如果执行时间超过10s,打出警告日志,超过5s输出info级别日志
1、index.search.slowlog.threshold.fetch.warn: 1s
2、index.search.slowlog.threshold.fetch.info: 800ms
3、index.search.slowlog.threshold.fetch.debug: 500ms
4、index.search.slowlog.threshold.fetch.trace: 200ms
index.search.slowlog.level: info
- 上述参数定义查询获取数据(fetch)的阔值,分别表示,如果执行时间超过1s,打出警告日志,超过800ms输出info级别日志。
- index.search.slowlog.level: info 定义日志输出级别为info,也就是 debug,trace 级别的日志不输出。注意:上述日志级别为分片级日志。
- 级别(warn, info, debug, trace)可以控制哪些日志级别的日志将会被记录
- 注意,日志记录是在分片级别范围内完成的,这意味着只有在特定的分片中执行搜索请求的慢日志才会被记录。
- 日志文件配置默认在log4j2.properties
Flag:生产环境的系统配置?查询与取数?
6、Index Show Log
1、index.indexing.slowlog.threshold.index.warn: 10s
2、index.indexing.slowlog.threshold.index.info: 5s
3、index.indexing.slowlog.threshold.index.debug: 2s
4、index.indexing.slowlog.threshold.index.trace: 500ms
5、index.indexing.slowlog.level: info
6、index.indexing.slowlog.source: 1000
- index.indexing.slowlog.source:参数用来控制记录文档_souce字段字符的个数,默认为1000,表示只记录_souce字段的前1000个字符,可以设置true,表示输出_souce字段全部内容,设置为false,表示不记录_souce字段的内容
- 默认情况下,会对_souce字段的输出进行格式化,通常使用一行输出,如果想阻止格式化,可以通过 index.indexing.slowlog.reformat 设置为false来避免
- 索引慢日志文件名后缀为 _index_indexing_slowlog.log, 默认日志文件配置也是在log4j2.properties
Flag:
1、slow生产环境配置?查询与取数?级别?
2、routing 是否可尝试来提高性能?
- Re: 对于数据量较大的业务查询场景,es侧一般会创建多个shard,并将shard分配到集群中的多个实例来分摊压力,
- 正常情况下,一个查询会遍历查询所有的shard,然后将查询到的结果进行merge之后,再返回给查询端。此时,写入的时候设置routing,可以避免每次查询都遍历全量shard,而是查询的时候也指定对应的routingkey,这种情况下,es会只去查询对应的shard,可以大幅度降低合并数据和调度全量shard的开销。
4、宽表的问题?在不支持Join的前提下的解决方案?
- Re: 在索引中定义太多字段是一种可能导致映射爆炸的情况,这可能导致内存不足错误和难以恢复的情况,这个问题可能比预期更常见,index.mapping.total_fields.limit ,默认值是1000
5、7.X JVM引入了新的circuit breaker(熔断)机制,当查询或聚合的数据量超出单机处理的最大内存限制时会被截断,并抛出异常?
参考
分类:
Elasticsearch
标签:
Elasticsearch
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 全程使用 AI 从 0 到 1 写了个小工具
· 快收藏!一个技巧从此不再搞混缓存穿透和缓存击穿
· AI 插件第二弹,更强更好用
· Blazor Hybrid适配到HarmonyOS系统
2017-02-28 ML(1): 入门理论