sh.status()
定义
sh.status()
在
mongos
实例上运行时,打印分片配置的格式化报告以及有关分片分片集群中现有数据段的信息。 如果数据段总数大于或等于20 ,则默认行为会抑制详细的数据数据块信息。sh.status()
方法具有以下参数:Parameter类型说明verbose
布尔
可选。确定详细级别。
如果
true
,则该方法将显示:即使您有 20 个或更多数据段,也可以查看跨分片数据段分布的完整详情以及每个分片上的数据段个数。
如果
false
,则该方法将显示:仅当数据段少于 20 个时,才会显示跨分片数据段分布的完整详情。如果有 20 个或更多数据段,该方法会返回
too many chunks to print ...
消息,仅显示每个分片上的数据段个数。
默认的详细值为
false
。
兼容性
此方法可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
重要
M 0 、M 2和 M 5集群不支持此命令。 有关更多信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
输出示例
--- Sharding Status --- sharding version: { "_id" : <num>, "minCompatibleVersion" : <num>, "currentVersion" : <num>, "clusterId" : <ObjectId> }
分片部分列出了有关分片的信息。对于每个分片,该部分显示名称、主机和关联的标签(如果有)。
shards: { "_id" : <shard name1>, "host" : <string>, "tags" : [ <string> ... ], "state" : <num> } { "_id" : <shard name2>, "host" : <string>, "tags" : [ <string> ... ], "state" : <num> } ...
默认情况下,活动 mongos
实例部分显示在过去 60 秒内处于活动状态的 mongos
实例的版本和数量信息:
active mongoses: <version> : <num>
如果在 verbose
参数设置为 true 的情况下运行该方法,活动 mongos
实例部分将显示其他信息:
active mongoses: { "_id" : "<hostname:port>", "advisoryHostFQDNs" : [ "<name>" ], "mongoVersion" : <string>, "ping" : <ISODate>, "up" : <long>, "waiting" : <boolean> }
自动分割显示有关是否启用自动分割的信息:
autosplit: Currently enabled: <yes|no>
负载均衡器部分列出有关负载均衡器状态的信息。这可以深入了解当前负载均衡器的操作,在对不均衡的分片集群进行故障排除时非常有用。
balancer: Currently enabled: yes Currently running: yes Collections with active migrations: config.system.sessions started at Fri May 15 2020 17:38:12 GMT-0400 (EDT) Failed balancer rounds in last 5 attempts: 0 Migration Results for the last 24 hours: 416 : Success 1 : Failed with error 'aborted', from shardA to shardB
数据库部分列出了有关数据库的信息。它显示了数据库名称和每个数据库的主分片。
databases: { "_id" : <dbname1>, "primary" : <string>, "version": <document> } { "_id" : <dbname2>, "primary" : <string>, "version": <document> } ...
分片集合部分提供有关分片集合的分片详细信息。对于每个分片集合,该部分显示分片键、每个分片的数据块数量、数据块在分片上的分布 [1] 以及分片键范围的标签信息(如果有)。
<dbname>.<collection> shard key: { <shard key> : <1 or hashed> } unique: <boolean> balancing: <boolean> chunks: <shard name1> <number of chunks> <shard name2> <number of chunks> ... { <shard key>: <min range1> } -->> { <shard key> : <max range1> } on : <shard name> <last modified timestamp> { <shard key>: <min range2> } -->> { <shard key> : <max range2> } on : <shard name> <last modified timestamp> ... tag: <tag1> { <shard key> : <min range1> } -->> { <shard key> : <max range1> } ...
输出字段
分片版本
sh.status.sharding-version._id
_id
是版本详情的标识符。
sh.status.sharding-version.minCompatibleVersion
minCompatibleVersion
是配置服务器的最低兼容版本。在比 6.2 更早的 MongoDB 版本中,该字段包含在
config.version
集合中,但在mongosh
2.0.0 及更高版本中,该字段不会在sh.status()
输出中返回。从 MongoDB 6.2 开始,此字段已被删除,并且不会在任何mongosh
版本或其他客户端应用程序中返回。如要获取版本信息,请参阅特征兼容性版本(fcv)。
sh.status.sharding-version.currentVersion
currentVersion
是配置服务器的当前版本。在比 6.2 更早的 MongoDB 版本中,该字段包含在
config.version
集合中,但在mongosh
2.0.0 及更高版本中,该字段不会在sh.status()
输出中返回。从 MongoDB 6.2 开始,此字段已被删除,并且不会在任何mongosh
版本或其他客户端应用程序中返回。如要获取版本信息,请参阅特征兼容性版本(fcv)。
sh.status.sharding-version.clusterId
clusterId
是分片集群的标识。
活动mongos
实例
sh.status.active-mongoses
如果
verbose
为false
,sh.status.active-mongoses
会列出活动mongos
实例的版本和数量。活动的mongos
实例是在过去 60 秒内网络探测到的mongos
实例。如果
verbose
为true
,sh.status.active-mongoses
会为每个活跃的mongos
实例返回一个包含以下字段的文档:字段数据类型说明_id
字符串
运行
mongos
的主机名和端口。_id
的格式为<hostname>:<port>
。advisoryHostFQDNs
字符串数组
mongos
的完全限定域名(FQDN)的数组。created
Date
当
mongos
启动时。5.2 版本中的新增功能。
mongoVersion
字符串
正在运行
mongos
的 MongoDB 版本。ping
Date
up
NumberLong
截至上次 ping 时
mongos
已启动的秒数。waiting
布尔
此字段始终为
true
,并且仅为向后兼容而包含。active mongoses: { "_id" : "<hostname:port>", "advisoryHostFQDNs" : [ "<name>" ], "created" : <ISODate>, "mongoVersion" : <string>, "ping" : <ISODate>, "up" : <long>, "waiting" : <boolean> } ...
Autosplit
sh.status.autosplit
sh.status.autosplit
指示当前是否启用自动分割。
注意
从 MongoDB 6.0.3 开始,不再执行自动数据块分割。这是因为均衡策略的改进。自动分割命令仍然存在,但不执行操作。
在 MongoDB 6.1 以前的版本中:
balancerStart
命令以及mongo
Shell 助手方法sh.startBalancer()
和sh.setBalancerState(true)
还会启用分片集群自动分割。To disable auto-splitting when the balancer is enabled, you can usesh.disableAutoSplit()
.balancerStop
命令以及mongo
Shell 助手方法sh.stopBalancer()
和sh.setBalancerState(false)
还会禁用分片集群自动分割。To enable auto-splitting when the balancer is disabled, you can usesh.enableAutoSplit()
.
mongo
方法 sh.enableBalancing(namespace)
和 sh.disableBalancing(namespace)
对自动分割没有影响。
分片
sh.status.shards._id
_id
显示分片的名称。
sh.status.shards.host
host
会显示分片的托管位置。
sh.status.shards.tags
tags
会显示分片的所有标签。该字段仅在分片具有标签时显示。
sh.status.shards.state
state
会显示:0
如果该分片不具备分片感知性。1
如果该分片具备分片感知性。
平衡器
注意
从 MongoDB 6.0.3 开始,不再执行自动数据块分割。这是因为均衡策略的改进。自动分割命令仍然存在,但不执行操作。
在 MongoDB 6.1 以前的版本中:
balancerStart
命令以及mongo
Shell 助手方法sh.startBalancer()
和sh.setBalancerState(true)
还会启用分片集群自动分割。To disable auto-splitting when the balancer is enabled, you can usesh.disableAutoSplit()
.balancerStop
命令以及mongo
Shell 助手方法sh.stopBalancer()
和sh.setBalancerState(false)
还会禁用分片集群自动分割。To enable auto-splitting when the balancer is disabled, you can usesh.enableAutoSplit()
.
mongo
方法 sh.enableBalancing(namespace)
和 sh.disableBalancing(namespace)
对自动分割没有影响。
sh.status.balancer.currently-enabled
currently-enabled
指示分片集群当前是否已启用负载均衡器。
sh.status.balancer.currently-running
currently-running
指示负载均衡器当前是否正在运行,因此当前是否正在均衡集群。
sh.status.balancer.collections-with-active-migrations
collections-with-active-migrations
列出所有正在进行迁移的集合的名称,并指定迁移的开始时间。如果没有正在进行的迁移,则该字段不会出现在sh.status()
输出中。
sh.status.balancer.failed-balancer-rounds-in-last-5-attempts
failed-balancer-rounds-in-last-5-attempts
显示最近五轮尝试中失败的负载均衡器轮数。当数据段迁移失败时,负载均衡器轮次将失败。
sh.status.balancer.last-reported-error
last-reported-error
列出最近的负载均衡器错误信息。如果没有错误,该字段不会出现在sh.status()
输出中。
sh.status.balancer.time-of-reported-error
time-of-reported-error
提供最近所报告错误的日期和时间。
sh.status.balancer.migration-results-for-the-last-24-hours
migration-results-for-the-last-24-hours
显示最近 24 小时内迁移的次数以及来自失败迁移的错误消息。如果最近没有迁移,migration-results-for-the-last-24-hours
会显示No recent migrations
。migration-results-for-the-last-24-hours
包括所有迁移(含并非由负载均衡器启动的迁移)。
Databases
sh.status.databases._id
_id
将显示数据库名称。
sh.status.databases.version
version
显示数据库版本信息:{ "uuid" : UUID("cc250b66-8638-49f7-a2e8-c6f1220b9d7a"), "lastMod" : 1 } 其中:
uuid
是数据库标识符。lastMod
是数据库版本。
分片集合
sh.status.databases.<collection>.shard-key
shard-key
显示分片键规范文档。
sh.status.databases.<collection>.unique
unique
显示 MongoDB 是否强制分片键值具备唯一性(即底层分片键索引是否唯一)。
sh.status.databases.<collection>.balancing
显示负载均衡器是否可以对集合进行负载均衡。 如果负载均衡器已启用并且此状态返回
true
,则负载均衡器会在负载均衡操作中包含此集合。 如果状态返回false
,则表示负载均衡器器未平衡此集合中的数据。
sh.status.databases.<collection>.chunks
chunks
列出所有分片以及每个分片上的数据块数。
sh.status.databases.<collection>.chunk-details
chunk-details
列出数据块的详情 [1]:定义该数据段的分片键值的范围,
该数据段所在的分片,以及
该数据段的最后修改时间戳。
sh.status.databases.<collection>.tag
tag
列出了与一系列分片键值关联的标签的详情。
[1] | (1,2) 在默认情况下,如果数据块总数小于 20,那么分片集合部分会显示数据块信息。要在有 20 个或更多数据块时显示信息,请调用 sh.status() 方法,将 verbose 参数设置为 true ,即 sh.status(true) 。 |