一、优化方案
基于 WLFU 淘汰策略,实现精准控制的堆外 cache,堆内基于零拷贝、弱引用实现第二级 cache,性能和堆内访问基本持平。
二、开启、关闭 Off Heap 功能(默认关闭)
curl -H "Content-Type:application/json" -XPUT http://localhost:9200/_cluster/settings -d '{ "persistent" : { "indices.segment_memory.off_heap.enable" : true }}'
三、调整 Off Heap Cache 大小(默认500MB)
curl -H "Content-Type:application/json" -XPUT http://localhost:9210/_cluster/settings -d '{ "persistent" : { "indices.segment_memory.off_heap.size" : "5gb" }}'
可以设置为单节点堆外内存的1/3,最大不要超过32GB。具体示例如下:
·单节点总内存(包括 jvm 和堆外内存)共64GB,可以设置为(64-32)/3 = 10GB。
·单节点总内存(包括 jvm 和堆外内存)共96GB,可以设置为(96-32)/3 = 20GB。
四、优化效果
内存开销、数据管理能力、GC 优势明显,性能持平略有优势。
| 方案对比 | FST 存放位置 | FST 内存占用量 | 单个 FST 堆内存占用量 | 单节点最大磁盘数据量 |
| 原生方案 | 堆内内存 | 全量存储在内存中,内存占用量大 | MB 级别(源生 FST 数据结构) | 10TB(需调优) |
| 优化方案 | 堆外内存 | Cache LRU 淘汰冷数据 内存占用量小 | 100Byte左右(Cache Key 大小) | 50TB |
| 写入性能对比 | 内存使用量(MB) | GC 时长(s) | TPS | 90%时延(ms) | 99%时延(ms) |
| 原生方案 | 402.59 | 20.453 | 198051 | 463.201 | 617.701 |
| 优化方案 | 102.217 | 18.969 | 201188 | 455.124 | 618.379 |
| Diff | 优74.6% | 优7.26% | 优1.58% | 优1.74% | 劣0.11% |
| 查询性能对比 | 内存使用量(MB) | GC 时长(s) | QPS | 90%时延(ms) | 99%时延(ms) |
| 原生方案 | 401.806 | 20.107 | 200.057 | 3.96062 | 11.1894 |
| 优化方案 | 101.004 | 19.228 | 200.087 | 3.87805 | 11.2316 |
| Diff | 优74.9% | 优4.37% | – | 优2.00% | 劣0.38% |
五、支持版本
6.8.2、7.5.1、7.10.1、7.14.2