db.collection.stats()
带驱动程序的 MongoDB
本页面提供 mongosh
方法的相关信息。要查看 MongoDB 驱动程序中的等效方法,请参阅编程语言的相应页面:
定义
使用 $collStats
聚合阶段而不是collStats
命令及其mongosh
辅助方法db.collection.stats()
。
db.collection.stats(<option>)
重要
mongosh 方法
本页面提供
mongosh
方法的相关信息。这不是数据库命令或特定语言驱动程序(例如 Node.js)的相关文档。有关数据库命令,请参阅
collStats
命令。如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。
返回有关集合的统计信息。
方法的格式如下:
db.collection.stats({ scale: <num>, // Optional indexDetails: <boolean>, // Optional indexDetailsKey: <document>, // Optional indexDetailsName: <string>. // Optional }) 字段类型说明scale
数字可选。各种大小数据的比例因子。
scale
默认为 1,以字节为单位返回大小数据。要显示千字节而不是字节,请指定1024
的scale
值。如果指定了非整数比例因子,MongoDB 将使用该因子的整数部分。例如,如果指定比例因子为
1023.999
,MongoDB 将使用1023
作为比例因子。从版本 4.2 开始,输出包括用于缩放大小值的
scaleFactor
。indexDetails
布尔indexDetailsKey
文档可选。如果
indexDetails
为true
,可以使用indexDetailsKey
通过指定索引键规范来筛选索引详情。仅返回与indexDetailsKey
精确匹配的索引。如果未找到匹配项,
indexDetails
将显示所有索引的统计数据。使用
getIndexes()
发现索引键。不能将indexDetailsKey
与indexDetailsName
一起使用。indexDetailsName
字符串可选。如果
indexDetails
为true
,您可以通过指定索引name
使用indexDetailsName
来筛选索引详细信息。仅返回与indexDetailsName
完全匹配的索引名称。如果未找到匹配项,
indexDetails
将显示所有索引的统计数据。使用
getIndexes()
查找索引名称。不能将indexDetailsName
与indexDetailsField
一起使用。如要仅指定
scale
因素,MongoDB 支持旧格式:db.collection.stats(<number>) 返回: 一份包含指定集合的统计信息的文档。请参阅 collStats
,了解返回统计数据的明细。
行为
缩放的大小
除非指标名称另有指定(例如 "bytes
currently in the cache"
),否则与大小相关的值以字节为单位显示,并且可以被 scale
覆盖。
比例因子会将受影响的大小值四舍五入为整数。
引擎加密
根据存储引擎的不同,返回的数据可能会有所不同。有关字段的详细信息,请参阅输出详情。
意外关闭后的准确性
使用 Wired Tiger 存储引擎非正常关闭 mongod
后,db.collection.stats()
报告的计数和大小统计数据可能不准确。
偏差的大小取决于在最后一个检查点和非正常关闭之间执行的插入、更新或删除操作的次数。检查点通常每 60 秒出现一次。但是,如果 mongod
实例使用了非默认的 --syncdelay
设置,则检查点出现的次数可能会增多或减少。
在 mongod
的每个集合上运行 validate
,以在非正常关闭之后恢复统计信息。
非正常关闭后:
副本集节点状态限制
要在副本集成员上运行,collStats
操作需要成员处于 PRIMARY
或 SECONDARY
状态。如果节点处于其他状态,如 STARTUP2
,则操作错误。
索引筛选器行为
使用 indexDetailsKey
或 indexDetailsName
对 indexDetails
进行过滤只会返回一个匹配索引。如果未找到完全匹配项,indexDetails
将显示该集合所有索引的相关信息。
indexDetailsKey
字段采用以下格式的文档:
{ '<string>' : <value>, '<string>' : <value>, ... }
其中,<string>>
为对其创建索引的字段,而 <value>
为此索引的方向或是某一特殊索引类型,例如 text
或 2dsphere
。请参阅索引类型以查看索引类型的完整列表。
从 MongoDB 8.0开始,使用查询设置而不是添加索引筛选器。 从 MongoDB 8.0开始,索引筛选器已弃用。
查询设置的功能比索引筛选器更多。 此外,索引筛选器不是持久性的,您无法轻松地为所有集群节点创建索引筛选器。 要添加查询设置并探索示例,请参阅setQuerySettings
。
意外关闭和计数
对于使用 WiredTiger 存储引擎的 MongoDB 实例,在非正常关闭后,有关大小和计数的统计信息可能会最多减少 1000 份文档,如 collStats
、dbStats
、count
报告所示。要为集合恢复正确的统计信息,请对该集合运行 validate
。
进行中的索引
db.collection.stats()
包括有关当前正在构建的索引的信息。有关详细信息,请参阅:
示例
注意
可以在我们的 primer-dataset.json 中找到这些示例使用的集合数据
基本统计信息查询
以下操作将返回有关 test
数据库中的 restaurants
集合的统计信息:
db.restaurants.stats()
该操作返回:
{ "ns" : "test.restaurants", "size" : 7557340, "count" : 25359, "avgObjSize" : 298, "storageSize" : 9670656, "freeStorageSize" : 6660096, "capped" : false, "wiredTiger" : { "metadata" : { "formatVersion" : 1 }, "creationString" : "access_pattern_hint=none,allocation_size=4KB,app_metadata=(formatVersion=1),assert=(commit_timestamp=none,durable_timestamp=none,read_timestamp=none),block_allocation=best,block_compressor=snappy,cache_resident=false,checksum=on,colgroups=,collator=,columns=,dictionary=0,encryption=(keyid=,name=),exclusive=false,extractor=,format=btree,huffman_key=,huffman_value=,ignore_in_memory_cache_size=false,immutable=false,internal_item_max=0,internal_key_max=0,internal_key_truncate=true,internal_page_max=4KB,key_format=q,key_gap=10,leaf_item_max=0,leaf_key_max=0,leaf_page_max=32KB,leaf_value_max=64MB,log=(enabled=true),lsm=(auto_throttle=true,bloom=true,bloom_bit_count=16,bloom_config=,bloom_hash_count=8,bloom_oldest=false,chunk_count_limit=0,chunk_max=5GB,chunk_size=10MB,merge_custom=(prefix=,start_generation=0,suffix=),merge_max=15,merge_min=0),memory_page_image_max=0,memory_page_max=10m,os_cache_dirty_max=0,os_cache_max=0,prefix_compression=false,prefix_compression_min=4,source=,split_deepen_min_child=0,split_deepen_per_child=0,split_pct=90,type=file,value_format=u", "type" : "file", "uri" : "statistics:table:collection-43-6797839137631957852", "LSM" : { "bloom filter false positives" : 0, "bloom filter hits" : 0, "bloom filter misses" : 0, "bloom filter pages evicted from cache" : 0, "bloom filter pages read into cache" : 0, "bloom filters in the LSM tree" : 0, "chunks in the LSM tree" : 0, "highest merge generation in the LSM tree" : 0, "queries that could have benefited from a Bloom filter that did not exist" : 0, "sleep for LSM checkpoint throttle" : 0, "sleep for LSM merge throttle" : 0, "total size of bloom filters" : 0 }, "block-manager" : { "allocations requiring file extension" : 460, "blocks allocated" : 556, "blocks freed" : 420, "checkpoint size" : 2994176, "file allocation unit size" : 4096, "file bytes available for reuse" : 6660096, "file magic number" : 120897, "file major version number" : 1, "file size in bytes" : 9670656, "minor version number" : 0 }, "btree" : { "btree checkpoint generation" : 58, "column-store fixed-size leaf pages" : 0, "column-store internal pages" : 0, "column-store variable-size RLE encoded values" : 0, "column-store variable-size deleted values" : 0, "column-store variable-size leaf pages" : 0, "fixed-record size" : 0, "maximum internal page key size" : 368, "maximum internal page size" : 4096, "maximum leaf page key size" : 2867, "maximum leaf page size" : 32768, "maximum leaf page value size" : 67108864, "maximum tree depth" : 3, "number of key/value pairs" : 0, "overflow pages" : 0, "pages rewritten by compaction" : 0, "row-store empty values" : 0, "row-store internal pages" : 0, "row-store leaf pages" : 0 }, "cache" : { "bytes currently in the cache" : 19401033, "bytes dirty in the cache cumulative" : 28415209, "bytes read into cache" : 0, "bytes written from cache" : 31893695, "checkpoint blocked page eviction" : 0, "data source pages selected for eviction unable to be evicted" : 0, "eviction walk passes of a file" : 0, "eviction walk target pages histogram - 0-9" : 0, "eviction walk target pages histogram - 10-31" : 0, "eviction walk target pages histogram - 128 and higher" : 0, "eviction walk target pages histogram - 32-63" : 0, "eviction walk target pages histogram - 64-128" : 0, "eviction walks abandoned" : 0, "eviction walks gave up because they restarted their walk twice" : 0, "eviction walks gave up because they saw too many pages and found no candidates" : 0, "eviction walks gave up because they saw too many pages and found too few candidates" : 0, "eviction walks reached end of tree" : 0, "eviction walks started from root of tree" : 0, "eviction walks started from saved location in tree" : 0, "hazard pointer blocked page eviction" : 0, "in-memory page passed criteria to be split" : 4, "in-memory page splits" : 2, "internal pages evicted" : 0, "internal pages split during eviction" : 0, "leaf pages split during eviction" : 2, "modified pages evicted" : 2, "overflow pages read into cache" : 0, "page split during eviction deepened the tree" : 0, "page written requiring cache overflow records" : 0, "pages read into cache" : 0, "pages read into cache after truncate" : 1, "pages read into cache after truncate in prepare state" : 0, "pages read into cache requiring cache overflow entries" : 0, "pages requested from the cache" : 76607, "pages seen by eviction walk" : 0, "pages written from cache" : 552, "pages written requiring in-memory restoration" : 0, "tracked dirty bytes in the cache" : 0, "unmodified pages evicted" : 0 }, "cache_walk" : { "Average difference between current eviction generation when the page was last considered" : 0, "Average on-disk page image size seen" : 0, "Average time in cache for pages that have been visited by the eviction server" : 0, "Average time in cache for pages that have not been visited by the eviction server" : 0, "Clean pages currently in cache" : 0, "Current eviction generation" : 0, "Dirty pages currently in cache" : 0, "Entries in the root page" : 0, "Internal pages currently in cache" : 0, "Leaf pages currently in cache" : 0, "Maximum difference between current eviction generation when the page was last considered" : 0, "Maximum page size seen" : 0, "Minimum on-disk page image size seen" : 0, "Number of pages never visited by eviction server" : 0, "On-disk page image sizes smaller than a single allocation unit" : 0, "Pages created in memory and never written" : 0, "Pages currently queued for eviction" : 0, "Pages that could not be queued for eviction" : 0, "Refs skipped during cache traversal" : 0, "Size of the root page" : 0, "Total number of pages currently in cache" : 0 }, "compression" : { "compressed page maximum internal page size prior to compression" : 4096, "compressed page maximum leaf page size prior to compression " : 111392, "compressed pages read" : 0, "compressed pages written" : 548, "page written failed to compress" : 0, "page written was too small to compress" : 4 }, "cursor" : { "bulk loaded cursor insert calls" : 0, "cache cursors reuse count" : 74, "close calls that result in cache" : 0, "create calls" : 4, "insert calls" : 50718, "insert key and value bytes" : 24500283, "modify" : 0, "modify key and value bytes affected" : 0, "modify value bytes modified" : 0, "next calls" : 101747, "open cursor count" : 0, "operation restarted" : 0, "prev calls" : 1, "remove calls" : 0, "remove key bytes removed" : 0, "reserve calls" : 0, "reset calls" : 51000, "search calls" : 25359, "search near calls" : 25485, "truncate calls" : 0, "update calls" : 0, "update key and value bytes" : 0, "update value size change" : 0 }, "reconciliation" : { "dictionary matches" : 0, "fast-path pages deleted" : 0, "internal page key bytes discarded using suffix compression" : 1077, "internal page multi-block writes" : 1, "internal-page overflow keys" : 0, "leaf page key bytes discarded using prefix compression" : 0, "leaf page multi-block writes" : 12, "leaf-page overflow keys" : 0, "maximum blocks required for a page" : 1, "overflow values written" : 0, "page checksum matches" : 0, "page reconciliation calls" : 80, "page reconciliation calls for eviction" : 2, "pages deleted" : 0 }, "session" : { "object compaction" : 0 }, "transaction" : { "update conflicts" : 0 } }, "nindexes" : 4, "indexBuilds" : [ ], "totalIndexSize" : 704512, "totalSize" : 10375168, "indexSizes" : { "_id_" : 241664, "cuisine_1" : 147456, "borough_1_cuisine_1" : 159744, "borough_1_address.zipcode_1" : 155648 }, "scaleFactor" : 1, "ok" : 1 }
由于 stats 未提供比例参数,因此所有大小值均以bytes
为单位。
使用比例表查询统计数据
以下操作通过指定scale
为1024
将数据规模从bytes
更改为kilobytes
:
db.restaurants.stats( { scale : 1024 } )
该操作返回:
{ "ns" : "test.restaurants", "size" : 7380, "count" : 25359, "avgObjSize" : 298, "storageSize" : 9444, "freeStorageSize" : 6504, "capped" : false, "wiredTiger" : { ... }, "nindexes" : 4, "indexBuilds" : [ ], "totalIndexSize" : 688, "totalSize" : 10132, "indexSizes" : { "_id_" : 236, "cuisine_1" : 144, "borough_1_cuisine_1" : 156, "borough_1_address.zipcode_1" : 152 }, "scaleFactor" : 1024, "ok" : 1 }
附带索引详细信息的统计信息查找
以下操作创建一份 indexDetails
文档,其中包含与集合中每个索引相关的信息:
db.restaurants.stats( { indexDetails : true } )
该操作返回:
{ "ns" : "test.restaurants", "size" : 7557340, "count" : 25359, "avgObjSize" : 298, "storageSize" : 9670656, "freeStorageSize" : 6660096, "capped" : false, "wiredTiger" : { ... }, "nindexes" : 4, "indexDetails" : { "_id_" : { "metadata" : { "formatVersion" : 8 }, "creationString" : "access_pattern_hint=none,allocation_size=4KB,app_metadata=(formatVersion=8),assert=(commit_timestamp=none,durable_timestamp=none,read_timestamp=none),block_allocation=best,block_compressor=,cache_resident=false,checksum=on,colgroups=,collator=,columns=,dictionary=0,encryption=(keyid=,name=),exclusive=false,extractor=,format=btree,huffman_key=,huffman_value=,ignore_in_memory_cache_size=false,immutable=false,internal_item_max=0,internal_key_max=0,internal_key_truncate=true,internal_page_max=16k,key_format=u,key_gap=10,leaf_item_max=0,leaf_key_max=0,leaf_page_max=16k,leaf_value_max=0,log=(enabled=true),lsm=(auto_throttle=true,bloom=true,bloom_bit_count=16,bloom_config=,bloom_hash_count=8,bloom_oldest=false,chunk_count_limit=0,chunk_max=5GB,chunk_size=10MB,merge_custom=(prefix=,start_generation=0,suffix=),merge_max=15,merge_min=0),memory_page_image_max=0,memory_page_max=5MB,os_cache_dirty_max=0,os_cache_max=0,prefix_compression=true,prefix_compression_min=4,source=,split_deepen_min_child=0,split_deepen_per_child=0,split_pct=90,type=file,value_format=u", "type" : "file", "uri" : "statistics:table:index-44-6797839137631957852", "LSM" : { ... }, "block-manager" : { ... }, "btree" : { ... }, "cache" : { ... }, "cache_walk" : { ... }, "compression" : { ... }, "cursor" : { ... }, "reconciliation" : { ... }, "session" : { ... }, "transaction" : { ... } }, "cuisine_1" : { ... }, "borough_1_cuisine_1" : { ... }, "borough_1_address.zipcode_1" : { ... }, "indexBuilds" : [ ], "totalIndexSize" : 704512, "totalSize" : 10375168, "indexSizes" : { "_id_" : 241664, "cuisine_1" : 147456, "borough_1_cuisine_1" : 159744, "borough_1_address.zipcode_1" : 155648 }, "scaleFactor" : 1, "ok" : 1 }
附带筛选后索引详细信息的统计信息查找
要过滤 indexDetails
字段中的索引,您可以使用 indexDetailsKey
选项指定索引键,也可以使用 indexDetailsName
指定索引名称。若要发现集合的索引键和名称,请使用 db.collection.getIndexes()
。
给定以下索引:
{ "ns" : "test.restaurants", "v" : 1, "key" : { "borough" : 1, "cuisine" : 1 }, "name" : "borough_1_cuisine_1" }
以下操作将 indexDetails
文档过滤为由 indexDetailsKey
文档定义的单个索引。
db.restaurants.stats( { 'indexDetails' : true, 'indexDetailsKey' : { 'borough' : 1, 'cuisine' : 1 } } )
以下操作将 indexDetails
文档过滤为由 indexDetailsName
文档定义的单个索引。
db.restaurants.stats( { 'indexDetails' : true, 'indexDetailsName' : 'borough_1_cuisine_1' } )
这两个操作将返回相同的输出:
{ "ns" : "test.restaurants", "size" : 7557340, "count" : 25359, "avgObjSize" : 298, "storageSize" : 9670656, "freeStorageSize" : 6660096, "capped" : false, "wiredTiger" : { ... }, "nindexes" : 4, "indexDetails" : { "borough_1_cuisine_1" : { "metadata" : { "formatVersion" : 8 }, "LSM" : { ... }, "block-manager" : { ... }, "btree" : { ... }, "cache" : { ... }, "cache_walk" : { ... }, "compression" : { ... }, "cursor" : { ... }, "reconciliation" : { ... }, "session" : { ... }, "transaction" : { ... } } }, "indexBuilds" : [ ], "totalIndexSize" : 704512, "totalSize" : 10375168, "indexSizes" : { "_id_" : 241664, "cuisine_1" : 147456, "borough_1_cuisine_1" : 159744, "borough_1_address.zipcode_1" : 155648 }, "scaleFactor" : 1, "ok" : 1 }
有关输出的解释,请参阅输出详情。