db.stats()
和db.$collection_name.stats()
分析磁盘空间使用情况。具体信息,请参见下表。分析命令 | 命令含义 |
该命令用于获取当前数据库的统计信息。执行 db.stats() 命令将返回一个文档,其中包含有关当前数据库的各种信息,如:数据库名称、数据大小、索引大小、集合数量等。 | |
该命令用于获取指定集合的统计信息。执行 db.collection.stats() 命令将返回一个文档,其中包含有关指定集合的各种信息,如:集合名称、文档数量、数据大小、索引数量等。 | |
该命令用于获取指定集合占用的存储空间大小。执行 db.collection.storageSize() 命令将返回指定集合的存储空间大小,单位为字节。该命令所返回的存储空间大小包括集合中的数据和索引等占用的空间,但不包括 MongoDB 实例的其他开销,如日志文件和临时文件等。 | |
该命令用于获取指定集合的所有索引占用的存储空间大小。执行 db.collection.totalIndexSize() 命令将返回指定集合的所有索引占用的存储空间大小,单位为字节。该命令所返回的存储空间大小不包括集合中的数据占用的空间,只包括集合的所有索引占用的空间。 | |
该命令用于获取指定集合占用的总存储空间大小。执行 db.collection.totalSize() 命令将返回指定集合占用的总存储空间大小,单位为字节。该命令所返回的存储空间大小包括集合中的数据和索引等占用的空间,以及 MongoDB 实例的其他开销,如日志文件和临时文件等。 |
##生成查看碎片率的函数function getCollectionDiskSpaceFragRatio(dbname, coll) { var res = db.getSiblingDB(dbname).runCommand({ collStats: coll }); var totalStorageUnusedSize = 0; var totalStorageSize = res['storageSize'] + res['totalIndexSize']; Object.keys(res.indexDetails).forEach(function(key) { var size = res['indexDetails'][key]['block-manager']['file bytes available for reuse']; print("index table " + key + " unused size: " + size); totalStorageUnusedSize += size; }); var size = res['wiredTiger']['block-manager']['file bytes available for reuse']; print("collection table " + coll + " unused size: " + size); totalStorageUnusedSize += size; print("collection and index table total unused size: " + totalStorageUnusedSize); print("collection and index table total file size: " + totalStorageSize); print("Fragmentation ratio: " + ((totalStorageUnusedSize * 100.0) / totalStorageSize).toFixed(2) + "%"); }##指定数据库,查看所有集合的碎片率 use xxxdb db.getCollectionNames().forEach((c) => {print("\\n\\n" + c); getCollectionDiskSpaceFragRatio(db.getName(), c);});
db.runCommand({compact:"collectionName"})
对指定的集合文档进行压缩来释放磁盘空间。其中,collectionName
为集合名称,请根据实际情况替换。compact
,会阻塞实例的所有请求,可能会出现 Compact 索引无效的问题,解决方案如下:compact
操作,因为 MongoDB 会复用这部分空间。此时请扩容磁盘空间,具体操作,请参见 变更 Mongod 节点配置规格。
本页内容是否解决了您的问题?