sqlite - 修剪旧记录后 SQLite 文件变大
问题描述
我有一个 SQLite 数据库,我的应用程序使用它来存储一些数据。它可以变得非常大(几 GB),它只有 3 列:一个自动递增计数器、一个 UUID 和一个二进制 BLOB。我的应用程序跟踪数据库中有多少行,并在超过行限制时删除最旧的行(基于增量)。
在启动时,我还运行VACUUM
压缩数据库,以防行限制发生变化并且数据库中的空间主要是空闲分配空间。
我的理解是,一个DELETE
命令会将已删除的页面简单地标记为可以再次写入的“空闲页面”。尽管如此,我发现在达到行限制后插入新行时文件大小继续增长(尽管速度较慢)。这是由于免费页面的碎片化吗?我可以期望这种碎片化积累在足够长的时间过去后停止吗?我的应用程序打算在很长一段时间内不间断地运行,如果文件大小在每个INSERT
机器的硬盘驱动器上增加,就会被填满。
解决方案
推荐阅读
- python - 使用决策树的自定义数据预测
- flask - 如何使用 Zappa 在单个域下创建多个版本化 API?
- python - python代码从列表中删除元素的重复项或子字符串
- python - 我的模型的训练/验证准确性表现奇怪
- powershell - 将字符添加到每行的 Out-File 内容?
- spring - 如何在没有 WebAppConfiguration 的集成测试中模拟 Spring 会话
- mule - DataWeave 1.0 - Mulesoft 查询
- javascript - 如何在Javascript循环中的每个项目后添加html换行符?
- python - 如何仅选择具有序列名称的列到列表中
- ruby-on-rails - 不应该工作但仍在工作的助手