$shardedDataDistribution(集計)
定義
$shardedDataDistribution
バージョン 6.0.3 で追加。
シャーディングされたコレクション内のデータの分散に関する情報を返します。
注意
この集計ステージは
mongos
でのみ使用できます。この集計ステージは
admin
データベースで実行する必要があります。 ユーザーにはshardedDataDistribution
特権アクションが必要です。
構文
shardedDataDistribution
ステージの構文は次のとおりです。
db.aggregate( [ { $shardedDataDistribution: { } } ] )
出力フィールド
$shardedDataDistribution
ステージは、 データベース内のシャーディングされた各コレクションのドキュメントの配列を出力します。 これらのドキュメントには、次のフィールドが含まれています。
フィールド名 | データ型 | 説明 |
---|---|---|
| string | シャーディングされたコレクションの名前空間。 |
| 配列 | 各シャードのデータ配信情報を含む コレクション内の シャード 。 |
| integer | シャード内の 孤立したドキュメント の数。 |
| integer | シャードが所有するドキュメントの数。 |
| integer | 非圧縮時にシャードが所有するドキュメントのサイズ(バイト単位)。 |
| integer | シャード内の 孤立したドキュメント の非圧縮時のサイズ(バイト単位)。 |
MongoDB 以降、 は、プライマリシャードに8.0 $shardedDataDistribution
チャンク または 孤立したドキュメント がある場合にのみ、コレクションの プライマリシャード の出力を返します。
動作
Wired Tigerストレージエンジンを使用してmongod
を不正にシャットダウンした後、$shardedDataDistribution
によって報告されるサイズとカウントの統計が不正確になる可能性があります。
ドリフトの量は、チェックポイントからクリーン シャットダウンまでの間に実行された挿入、アップデート、または削除操作の数によって異なります。チェックポイントは通常、60 秒ごとに発現します。ただし、デフォルト以外の --syncdelay
設定で実行されている mongod
インスタンスでは、チェックポイントの頻度が増減する可能性があります。
不正なシャットダウン後に統計を復元するには、mongod
の各コレクションに対して validate
を実行します。
不正なシャットダウン後:
例
すべてのシャーディングされたデータディストリビューションを返す
すべてのシャーディングされたデータ分布のメトリクスを返すには、次のコマンドを実行します。
db.aggregate([ { $shardedDataDistribution: { } } ])
出力例:
[ { "ns": "test.names", "shards": [ { "shardName": "shard-1", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 }, { "shardName": "shard-2", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 } ] } ]
特定のシャードのメトリクスを返す
特定のシャードのシャーディングされたデータ分布のメトリクスを返すには、次のコマンドを実行します。
db.aggregate([ { $shardedDataDistribution: { } }, { $match: { "shards.shardName": "<name of the shard>" } } ])
名前空間のメトリクスを返す
名前空間 のシャーディングされたデータ配信データを返すには、次のコマンドを実行します。
db.aggregate([ { $shardedDataDistribution: { } }, { $match: { "ns": "<database>.<collection>" } } ])
孤立したドキュメントが存在しないことを確認
MongoDB 6.0.3以降、 $shardedDataDistribution
ステージを使用して集計を実行し、孤立したドキュメントが残っていないことを確認します。
db.aggregate([ { $shardedDataDistribution: { } }, { $match: { "ns": "<database>.<collection>" } } ])
$shardedDataDistribution
には、次のような出力があります。
[ { "ns": "test.names", "shards": [ { "shardName": "shard-1", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 }, { "shardName": "shard-2", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 } ] } ]
クラスター内の各シャードで"numOrphanedDocs"
が0
であることを確認します。