数据库缓存在提升数据库性能和响应速度方面起着至关重要的作用。然而,不必要的缓存可能会占用过多的内存资源,影响系统效率。
为了优化资源利用、提高系统性能,我们将从维度表、共享表、OLAP、TSDB、流数据五大方面,向大家介绍如何高效清理 DolphinDB 缓存。
(注:具体执行代码可前往 https://zhuanlan.zhihu.com/p/26058985554 查看。)
维度表是分布式数据库中没有进行分区的表,查询时会将表中所有数据加载到内存,适用于存储不频繁更新的小数据集。
从 2.00.11 和 1.30.23 版本开始,维度表引入了自动回收机制,当内存使用超过系统配置参数 warningMemSize 设定的阈值时,系统会根据 LRU(Least Recently Used)策略尝试释放部分维度表缓存; 从 2.00.11 和1.30.23 版本开始,clearAllCache 函数也可以清理维度表缓存; 调用 clearCachedDatabase 手动释放维度表缓存。
内存表等本地对象默认在其他会话中不可见。通过 share 函数共享后,表可在其他会话中访问。
使用 undef 函数,并通过指定 objType=SHARED 来释放共享变量占用的内存。

在 TSDB 中,我们从写入、levelFile 索引、symbolBase 三方面介绍缓存机制与清理方式。

DolphinDB 为流数据发送节点提供持久化队列缓存和发送队列缓存,为订阅节点提供接收数据队列缓存。
当数据进入流数据系统时,首先写入流数据表,然后写入持久化队列和发送队列。假设用户设置为异步持久化,则持久化队列异步写入磁盘,发送队列发送到订阅端。当订阅端收到数据后,先放入接收队列,然后用户定义的 handler 从接收队列中取数据并处理。如果 handler 处理缓慢,会导致接收队列有数据堆积,占用内存。
StreamingPubQueue 为流数据发布队列里未处理的消息数, 其大小与 maxPubQueueDepthPerSite 配置项有关; StreamingSubQueue 为流数据订阅队列里未处理的消息数, 其大小与 maxSubQueueDepth 配置项有关。这两个类型的缓存只能等待消费完成后释放。
Explore More


文章转载自DolphinDB智臾科技,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。






