乐趣区

关于memory:MongoDB-查看索引与存储大小qbit

前言

  • 本文试验环境为 3 台机器的 MongoDB 正本集
Using MongoDB:        5.0.5
Using Mongosh:        1.1.8
  • 官网文档:https://www.mongodb.com/docs/…

注释

列出所有数据库

> db.getMongo().getDBs()

查看单个库的统计信息

 以下统计信息是每台机器上的统计信息,不是 3 台机器的和。totalSize = storageSize + indexSize
> db.getMongo().getDB('pubmedjournal').stats()
{
  db: 'pubmedjournal',
  collections: 3,
  views: 0,
  objects: 44928355,
  avgObjSize: 36032.49960482639,
  dataSize: 1618880933783,
  storageSize: 510386745344, // 每台机器上 document 占用磁盘空间总大小
  freeStorageSize: 12275736576,
  indexes: 13,
  indexSize: 8714760192,    // 每台机器上 index 占用磁盘空间总大小
  indexFreeStorageSize: 993247232,
  totalSize: 519101505536,    // 每台机器上占用磁盘空间总大小
  totalFreeStorageSize: 13268983808,
  scaleFactor: 1,
  fsUsedSize: 9056225865728,
  fsTotalSize: 11680169852928,
  ok: 1,
  '$clusterTime': {clusterTime: Timestamp({ t: 1667097728, i: 16}),
    signature: {hash: Binary(Buffer.from("c787785abf50320f6620c282fbb5b1e080304032", "hex"), 0),
      keyId: Long("7106121282126610433")
    }
  },
  operationTime: Timestamp({t: 1667097728, i: 16})
}

列出单库下的 collection

> db.getMongo().getDB('pubmedjournal').getCollectionNames()
['publisher', 'article_data', 'article']

单个 collection 的统计信息

> collStats = db.getMongo().getDB('pubmedjournal').getCollection('article').stats()
> collStats.storageSize
Long("496281411584")
> collStats.totalIndexSize
Long("6650699776")
> collStats.totalSize
Long("502932111360")

正本集上所有数据库的统计之和

留神这里也是 1 份数据的统计值,正本集 3 份数据之和。

// 所有数据库的 document 大小总和
> var sum = 0; db.getMongo().getDBs()["databases"].forEach(function(x) {sum += db.getMongo().getDB(x.name).stats().storageSize}); print(sum)
8315051458560

// 所有数据库的 index 大小总和
rs0 [primary] test> var sum = 0; db.getMongo().getDBs()["databases"].forEach(function(x) {sum += db.getMongo().getDB(x.name).stats().indexSize}); print(sum)
607059922944

// 所有数据库的占用存储的大小总和
rs0 [primary] test> var sum = 0; db.getMongo().getDBs()["databases"].forEach(function(x) {sum += db.getMongo().getDB(x.name).stats().totalSize}); print(sum)
8914942943232

因为时间差,下面的前两个数值之和与第三个值有所出入

用上面形式计算,sum1 + sum2 == sum3

var sum1 = 0; var sum2 = 0; var sum3 = 0;
db.getMongo().getDBs()["databases"].forEach(function(x) {var stat = db.getMongo().getDB(x.name).stats();
    sum1 += stat.storageSize;
    sum2 += stat.indexSize;
    sum3 += stat.totalSize;
}); 
print('sum1:' + sum1 + ', sum2:' + sum2 + ', sum3:' + sum3)

本文出自 qbit snap

退出移动版