elasticsearch 优化点
所属分类 elasticsearch
浏览量 1064
indices.memory.index_buffer_size
默认 jvm大小的10% ,可增大
segment merge
增加 Index Refresh 间隔 , 减少 Segment Merge 次数
only_expunge_deletes设置为true ,合并过程会把删除的数据清理掉
SearchType
默认 QUERY_THEN_FETCH
QUERY_THEN_FETCH
先向所有的分片发请求,各分片只返回文档的相似度得分和文档的ID,然后协调节点按照各分片返回的分数进行重新排序和排名
根据文档ID获取文档的详细信息
QUERY_AND_FETCH
协调节点向所有分片发送查询请求,各分片将文档的相似度得分和文档的详细信息一起返回
协调节点进行重新排序,取出需要返回给客户端的数据
只需要在分片中查询一次,性能较好
DFS_QUERY_THEN_FETCH
与 QUERY_THEN_FETCH 类似,但它包含一个额外的阶段,在初始查询中执行全局的词频计算,以使得更精确地打分,从而让查询结果更相关。
QUERY_THEN_FETCH 使用的是分片内部的词频信息,而 DFS_QUERY_THEN_FETCH 使用公共的词频信息,相比 QUERY_THEN_FETCH 性能更低
DFS_QUERY_AND_FETCH 与 QUERY_AND_FETCH 类似,不过使用的是全局的词频
search_type=query_and_fetch
bool 查询的 filter 筛选
filter 不参与相关性评分,查询子句可以被系统缓存,性能高于普通的query查询
bool查询中支持4种子句,分别是filter must must_not should
filter和must_not属于过滤器,过滤器查询先于其它查询执行
预排序 IndexSorting
ES 6.x之后新增预排序功能,索引在创建之前可以指定数据写入后的排序方式,
当query时指定的排序方式和预排序逻辑一致时将能够很快获得排序结果,需要注意的是查询时不能开启total值
磁盘 尽量使用SSD盘 或者挂载多块盘提升io性能
设置独立的聚合节点
# 查询聚合节点配置
node.master:false
node.data:false
node.ingest:false
查询中断
teminate_after 指定每个 shard 匹配 N 条记录后返回,设置查询超时时间 timeout
{
"timeout": "10s",
"terminate_after": 1000,
"query": {
}
}
调整聚合方式
默认深度优先聚合
"collect_mode" : "breadth_first"
depth_first 直接进行子聚合的计算
breadth_first 先计算出当前聚合的结果,针对这个结果在对子聚合进行计算
索引冷热分离
# cat elasticsearch.yml // 配置文件设置tag区分
node.attr.tag: cold/hot
# bin/elasticsearch -d -Enode.attr.box_type=hot //启动设置
其他配置说明
cluster.name
集群名 自动发现同一网段下集群名相同的节点
node.nam:"node1"
节点名,同一个集群中不能重复。名称设置后,不能改
noed.master:true
指定节点是否有资格被选举成为 Master 默认 True
node.data:true
指定节点是否存储索引数据,默认 True
index.number_of_shards:5
索引分片个数,默认 5 。可以在创建索引时设置 ,如果数据量不大,设置成 1 效率最高。
index.number_of_replicas:1
索引副本个数,默认为1 个
path.conf:/path/to/conf
配置文件存储路径,默认 conf 目录
path.data:/path/to/data1,/path/to/data2
设置索引数据存储路径,默认 data 目录 ,注意不要使用默认值,若 ES 升级,有可能丢失数据
path.logs:/path/to/logs
设置日志文件的存储路径,默认 logs
path.plugins:/path/to/plugins
设置第三方插件的路径,默认 plugins
bootstrap.mlockall:true
锁定内存,保证不 Swap
network.bind_host:192.168.0.1
绑定的 IP 地址 , 默认 0.0.0.0
network.publish_host:192.168.0.1
network.host:192.168.0.1
同时设置 bind_host 和 publish_host 这两个参数
http.port:9200
对外服务的 HTTP 端口,默认 9200
节点需要配置两个端口,对外提供服务端口,集群内部使用的端口
transport.tcp.port:9300
集群节点间通讯的 TCP 端口,默认 9300
transport.tcp.compress:true
节点间传输数据时是否压缩,默认 false
index.merge.scheduler.max_thread_count:1
索引merge最大线程数
index.translog.durability:async
异步写硬盘,提升写性能
index.translog.sync_interval:120s
translog 间隔时间
thread_pool.bulk.size:20
写入线程个数
thread_pool.bulk.queue_size:1000
写入线程队列大小
index.refresh_interval:300s
index刷新间隔
discovery.zen.minimum_master_nodes:1
选举 Master 节点时需要参与的最少的候选主节点数,默认 1
建议设置为(master_eligible_nodes/2)+1 , master_eligible_nodes 表示集群中的候选主节点数
discovery.zen.ping.timeout:3s
自动发现其他节点时 Ping 连接的超时时间,默认 3 秒
上一篇
下一篇
kafka核心知识点
java中的list
arthas 异常排查技巧
Java异常知识点
mysql explain 简介
mysql中的浮点数