我使用wiredTiger引擎设置了mongo的拓扑,分片,重新设置,这是实验,这很有意思。
插入4002条记录,数据大小如下,datasize大于storageSize,这是混乱。另一个令人困惑的事情是totalIndexSize甚至比storageSize更大。
"127.0.0.1:27020" : {
"db" : "test",
"collections" : 1,
"objects" : 4002,
"avgObjSize" : 51.694902548725636,
"dataSize" : 206883,
"storageSize" : 114688,
"numExtents" : 0,
"indexes" : 2,
"indexSize" : 147456,
"ok" : 1
2,删除所有4005条记录,数据大小如下,有意义,datasize为0,而storageSize与之前相同。删除文件后,Mongo不会释放磁盘。混淆的事情是数据删除后IndexSize没有减少。
"127.0.0.1:27020" : {
"db" : "test",
"collections" : 1,
"objects" : 0,
"avgObjSize" : 0,
"dataSize" : 0,
"storageSize" : 114688,
"numExtents" : 0,
"indexes" : 2,
"indexSize" : 147456,
"ok" : 1
3,再将100条记录添加到db中,它会转到另一个分片磁盘(端口:27018),在添加之前,StorageSize = 86016,插入后,storageSize = 73728,比之前小。这是混乱。插入后indexSize也较小。
"127.0.0.1:27018" : {
"db" : "test",
"collections" : 1,
"objects" : 100,
"avgObjSize" : 52.9,
"dataSize" : 5290,
"storageSize" : 73728,
"numExtents" : 0,
"indexes" : 2,
"indexSize" : 65536,
"ok" : 1
4,添加另外100000条记录,它进入分片端口:27020,再次dataSize大于storageSize,对于分片端口:27018,索引大小从65536减少到49152,而分片中没有任何变化。
"127.0.0.1:27018" : {
"db" : "test",
"collections" : 1,
"objects" : 100,
"avgObjSize" : 52.9,
"dataSize" : 5290,
"storageSize" : 24576,
"numExtents" : 0,
"indexes" : 2,
"indexSize" : 49152,
"ok" : 1
},
"127.0.0.1:27020" : {
"db" : "test",
"collections" : 1,
"objects" : 100000,
"avgObjSize" : 57.8889,
"dataSize" : 5788890,
"storageSize" : 2433024,
"numExtents" : 0,
"indexes" : 2,
"indexSize" : 1765376,
"ok" : 1
现在我怎么能相信mongo状态结果?它是什么背后的逻辑
答案 0 :(得分:0)
storageSize 指标等于数据库中所有数据范围的大小(以字节为单位)。如果没有压缩,则此数字大于dataSize,因为它包含尚未使用的空间(在数据范围内)和由范围内已删除或移动的文档腾出的空间。 但是,正在使用WiredTiger存储引擎时,数据会在磁盘上压缩,因此小于dataSize。
删除文档时,索引会自动删除 。请参阅此处。
存储大小的减少可能再次归因于插入新文档后压缩磁盘上的数据。
数据大小的变化:与1相同。