删除了大量数据后 为什么索引大小反而变大了呢?

将表中历史数据给删除了 只保留了最近一个季度的数据

删除前

"count" : 1379345, # 总数
"size" : 3823247286, # 大小
"nindexes" : 4,
"totalIndexSize" : 86913024, # 索引大小
"indexSizes" : {
    "_id_" : 12873728,
    "created_at_1" : 17534976,
    "storage_time_1" : 7397376,
    "guid_1" : 49106944
},

删除后

"count" : 453978,
"size" : 2478837459,
"nindexes" : 4,
"totalIndexSize" : 89522176,
"indexSizes" : {
    "_id_" : 12873728,
    "created_at_1" : 18096128,
    "storage_time_1" : 7397376,
    "guid_1" : 51154944
},

删除前 VS 删除后
count: 1379345 VS 453978 diff: 925,367
size: 3823247286 VS 2478837459 diff: 1,344,409,827
totalIndexSize: 86913024 VS 89522176 diff: -2,609,152

为什么删除了这么多数据后索引大小反而变大了呢?

阅读 5.5k
1 个回答

在WiredTiger引擎中,每个索引对应磁盘上一个独立的文件。删除大量数据后,这个文件中对应的索引也被删除了。但是空间是不会释放的,只会尽可能重用。因为想释放这些空间,就必须把空闲空间集中到文件尾,然后截断。没有哪个数据库会主动做这个事情,既低效又没多大意义。
如果实在想做,了解一下compact命令,既慢还阻塞。强烈不建议。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进