TsFileResource中的DeviceTimeIndex占用了大量的内存空间,考虑在内存不够的情况下将其降级为内存占用更小的FileTimeIndex,通过牺牲查询效率换取更多的内存空间
一、配置项
名称 | time_index_memmory_proportion |
---|---|
描述 | 指定TimeIndex在Read Memory中的所占的比例(占比越高查询效率越高) |
类型 | double |
默认值 | 0.2 |
更改后的生效方式 | 重启服务器后生效 |
二、接口设计
double TIME_INDEX_MEMORY_THRESHOLD:TimeIndex可使用的内存总量,值为allocateMemoryForRead * time_index_memory_proportion
ExecutorService downgradeThreadPool:用于执行TimeIndex降级任务的线程池
PriorityQueue<TsFileResource> sealedTimeIndex:维护所有已封口的TsFileResoruce,按照TimeIndex降级的优先级从高到低排序
long totalTimeIndexMemCost:所有已封口的TimeIndex占用的内存总量(非精确值,只计入封口文件的TimeIndex大小),当该值超过TIME_INDEX_MEMORY_THRESHOLD时触发索引降级
方法 | 描述 |
---|---|
registerSealedTimeIndex | 语法:public synchronized ITimeIndex registerSealedTimeIndex(TsFileResource resource) 功能:将已封口的TsFileResoruce添加到sealedTimeIndex中,并在totalTimeIndexMemCost中添加内存占用 |
chooseTimeIndexsToFlush | |