为啥我的磁盘大小减小了,而没有使用 storageSize 的可用空间? ongodb

Posted

技术标签:

【中文标题】为啥我的磁盘大小减小了,而没有使用 storageSize 的可用空间? ongodb【英文标题】:Why is my disk size reduced and not using the free space of storageSize? ongodb为什么我的磁盘大小减小了,而没有使用 storageSize 的可用空间? ongodb 【发布时间】:2021-03-20 20:54:47 【问题描述】:

"db" : "nameDatabase",
"collections" : 2,
"views" : 0,
"objects" : 2104394,
"avgObjSize" : 459217.714875161,
"dataSize" : 966375003877.0,
"storageSize" : 466821181440.0,
"numExtents" : 0,
"indexes" : 2,
"indexSize" : 36229120.0,
"ok" : 1.0

dataSize = 数据库中信息的实际大小

storageSize = dataSize + 已删除的文档(可用空间)

storageSize - dataSize = 499553822437.0 *可用空间重写新文档。对吗?

虽然 db.stats() 表示这些值,但如果我查阅我的硬盘,collectionXXX.wt 文件占用 394GB 并继续增长...我只有 11GB 可用空间(关键)。

怎么可能?有什么解决办法吗?

我使用了compact,但它没有释放硬盘空间。

(MongoDB版本3.4.7版)

【问题讨论】:

【参考方案1】:

dataSize 是原始数据的大小。例如文档a: false 的大小为 9 字节

storageSize 是数据的物理已用磁盘空间大小(不含索引)。如您所见,您的数据是 compressed 大约 50%

indexSize 是索引的物理已用磁盘空间大小。

因此,您所有的 collectionXXX.wt + indexXXX.wt 文件的大小应该在 434.8 GiByte 左右

解决方案:放入更大的磁盘或删除未使用的数据。

【讨论】:

谢谢!现在我正在应用以下“补丁”:我选择 10,000 个早于 X 日期(过时)的文档并将它们从 Robo 3T 中删除,但这需要 30 多分钟......我使用“限制”而不是直接执行“选定日期之前的所有内容”,以免数据库饱和或损坏。数据库处于生产/活动状态。您是否认为正在使用中(每分钟都有新记录),我可以删除多年前的所有文档而不影响(停止使用或损坏数据库)吗?我没有太多想法,我担心会造成灾难。 您可以简单地删除旧数据,但这需要一些时间。未来看看Expire Data from Collections by Setting TTL

以上是关于为啥我的磁盘大小减小了,而没有使用 storageSize 的可用空间? ongodb的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我减小图像大小时,球体特征大小不会同时减小?

回形针:为啥尽管质量降低了,图像的大小却没有太大变化?

Ubuntu 16.04下减小VirtualBox虚拟硬盘文件的大小

虚拟机的硬盘怎么改小

如何修改vmware虚拟机硬盘大小

在 android 中减小图像大小而不损失其质量