TDengine的缓存策略是LRU、LFU还是其他?如何配置相关参数?
TDengine缓存相关问题解答
缓存机制类型
TDengine没有采用通用的LRU、LFU缓存策略,而是针对时序数据访问特征设计了专属的块级最近时间优先缓存策略:
- 所有数据按时间分片划分为固定大小的内存块管理,最新写入的时间块会优先驻留内存
- 缓存不足时会优先淘汰最久未访问的旧时间块,完全贴合时序数据"热数据集中在最近时间段、冷数据几乎不访问"的访问特性,命中率远高于通用缓存策略。
三个相关配置项说明
你在taos.cfg中找到的三个参数就是TDengine核心的缓存配置,具体配置规则如下:
cache:单vnode允许使用的最大内存缓存空间,单位为MB,默认值16。配置时需要结合节点上的vnode总数估算总内存占用:总缓存占用=节点vnode总数 *cache取值,建议总缓存占用不超过节点可用内存的50%,预留足够内存给写入缓冲区、系统页缓存使用。比如节点规划承载200个vnode,可用内存为32GB的话,cache可以设置为64,总缓存占用为12.8GB,属于合理区间。blocks:单个vnode的缓存空间划分为多少个数据块,默认值6。单个数据块的大小=cache/blocks,该参数不建议随意调整:块数太少会导致缓存换入换出粒度太大,频繁触发IO;块数太多会增加元数据管理开销。如果你的业务需要同时查询跨多个时间区间的热数据,可以适当调到8~10,其余场景保持默认即可。cacheLast:是否开启单表最新记录缓存,取值为0/1,默认值1(开启)。开启后会单独为每个子表缓存最新一条写入记录,针对物联网、监控场景高频查询设备最新状态的需求,能把查询延迟降低到毫秒级,不需要访问数据块甚至磁盘。如果你的业务没有大量最新点位查询需求,可以设为0关闭,节省少量内存开销。
注意:以上参数修改后需要重启taosd进程生效,集群部署时所有数据节点都需要同步配置。
内容的提问来源于stack exchange,提问作者bruce
相关产品推荐
相关产品推荐

