如何解决Apache Ignite 2.7.5 删除缓存并释放内存
我们将 Apache Ignite(版本 2.7.5)用作启用了 ignite 持久性的 2 节点分区集群。
这 2 个 ignite 实例中的每一个都有一个缓存(例如,名为 XYZ),每个实例占用约 250 GB 的空间。该表有 1.5 亿条记录。
今后我们不再需要这个缓存,我想删除这个缓存并回收每个实例中的空间(磁盘空间以及堆外内存)。
我尝试了以下方法:
-
尝试编写 API 以从缓存中删除所有数据并将其销毁。
@DeleteMapping(path = "/delete-cache") public String deleteCache() { try { IgniteCache<XYZId,XYZ> cache = ignite.cache("XYZCache"); cache.removeAll(); cache.destroy(); } catch (Exception e) { LOG.error("Exception while destroying cache: ",e); return "Fail"; } return "Success"; }
但在点击此 API 时,Ignite 挂起,我的服务与 Ignite 失去连接。
-
尝试通过进入 ignite 实例并执行
rm cache-XYZ
来删除缓存。执行此操作后,由 ignite 实例回收的磁盘空间永远无法作为一个集群一起启动。点燃日志中没有特定错误,但执行以下操作:
./control.sh --baseline
没有给出任何结果,终端挂了。
目前,有一个 API 可以根据记录的 id
逐个删除对象,但以当前速度删除 1.5 亿个条目需要 8 周时间。
有没有更好的方法来实现这一目标?
解决方法
您可以只运行 cache.destroy();
(无需删除每个条目)
它将破坏缓存并回收磁盘上的空间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。