mongo db.stats()dbsize不正确

时间:2015-11-16 19:43:54

标签: mongodb

我使用wiredTiger引擎设置了mongo的拓扑,分片,重新设置,这是实验,这很有意思。

  1. 插入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. 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状态结果?它是什么背后的逻辑

1 个答案:

答案 0 :(得分:0)

您寻求什么:

  1. storageSize 指标等于数据库中所有数据范围的大小(以字节为单位)。如果没有压缩,则此数字大于dataSize,因为它包含尚未使用的空间(在数据范围内)和由范围内已删除或移动的文档腾出的空间。  但是,正在使用WiredTiger存储引擎时,数据会在磁盘上压缩,因此小于dataSize。

  2. 删除文档时,索引会自动删除 。请参阅此处。

  3. 存储大小的减少可能再次归因于插入新文档后压缩磁盘上的数据。

  4. 数据大小的变化:与1相同。