提升写入性能
使用 bulk 接口批量写入
- 节省重复创建连接的网络开销
- 通过进行基准测试来找到最佳的批处理数量
延长 refresh 的时间间隔
- 通过延长 refresh(刷新)的时间间隔可以降低段合并的频率,段合并十分耗费资源
- 默认的刷新频率为1s,对 index 修改 index.refresh_interval 即可立即生效
初始化性能的大量写入
- 比如 reindex 或是导入基础数据这种一次性批量索引操作
- 可以配置成不刷新,并且把副本数也配置成0,完了之后再设置成正常值
关闭操作系统的 swapping
- 操作系统会自动把不常用的内存交换到磁盘(虚拟内存),关闭后就不会进行交换
使用内部id
合理设置分片和副本数量
提升查询性能
给文件系统(filesystem cache)预留足够内存
- es 非常依赖操作系统的文件缓存来提高查询速度
- 预留至少一半的内存给文件系统缓存
使用 ssd 磁盘而且别用远程磁盘
- es需要频繁读取磁盘
不要使用关联关系
尽可能搜索少的字段
避免使用脚本
- 脚本非常耗性能,因为每次计算且无法缓存
- 如果非用不可,就用 painless 或者 expressions
强制合并只读索引
节省磁盘空间
数字类型用最小数字类型
byte < short < integer < long
参考博客
官网性能优化建议
[1]https://www.elastic.co/guide/en/elasticsearch/reference/8.11/how-to.html
[2]https://pdai.tech/md/db/nosql-es/elasticsearch-y-peformance.html