Docs Menu
Docs Home
/ /
管理

シャーディングされたデータ分散の分析

この手順を使用して、 シャーディングされたデータ分散 を分析します。この情報を使用して、クラスターで大量のバランシングが行われるかどうかを判断できます。

この手順では、次の方法を示します。

アップグレード プロセスとこの手順全体でバランサーをオフにしてください。 新しいバランシング ポリシーの下でのコレクションの均等性が理解できたら、バランサーをオンに戻すことができます。

1

クラスターを から5.0 6.0にアップグレードするには、 「 シャードクラスタを にアップグレードする 」を参照してください。6.0

2

クラスターのどの mongos にも接続できます。

3

コレクションのデータ分散がバランシングにどのように影響かを理解するには、$shardedDataDistribution 集計ステージを使用します。

すべてのシャーディングされたデータ分布のメトリクスを返すには、次のコマンドを実行します。

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
}
]
}
]

ownedSizeBytesが最大のシャードと が最も少ないシャードとの差が移行しきい値ownedSizeBytes 内にある場合、コレクションはバランスがとれていると見なされます。これらのコレクションでバランサーが有効になっている場合、移行は発行されません。

4

コレクションがアンバランスで、バランサーの動作を制御する場合は、次のいずれかの方法または両方を使用できます。

バランシング ウィンドウの変更

  1. コンフィギュレーションデータベースに切り替えます。

    次のコマンドを発行して、configデータベースに切り替えます。

    use config
  2. バランシングウィンドウの開始時間と終了時間を設定します。

    アクティブなウィンドウ を設定するには、 メソッドを使用します。updateOne()

    db.settings.updateOne(
    { _id: "balancer" },
    { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } },
    { upsert: true }
    )

    <start-time><end-time> を、バランシングウィンドウの開始境界と終了境界を指定する 2 桁の時間と分の値を使った時間の値に置き換えます(つまり HH:MM)。

    • HH 値には、0023 の範囲の時間の値を使用します。

    • MM 値には、0059 の範囲の分の値を使用します。

    自己管理型のシャーディングされたクラスターの場合、 MongoDB はコンフィギュレーションサーバーレプリカセット内のプライマリ ノードのタイムゾーンを基準にして、開始時間と停止時間を評価します。

    Atlas クラスターの場合、MongoDB は UTC タイムゾーンに対して開始時間と停止時間を相対的に評価します。

    注意

    バランサー ウィンドウは、その日に挿入されたすべてのデータの移行を完了するのに十分でなければなりません。

    データ挿入率はアクティビティや使用パターンによって変わる可能性があるため、選択したバランシングウィンドウが配置のニーズをサポートするのに十分であることを確認してください。

  3. 任意 )範囲の削除が同期されていることを確認します。

    範囲の削除を バランシングウィンドウに制限する場合にのみ、この手順を使用してください。

    デフォルトでは 、バランサーは進行中の移行の削除フェーズが完了するのを待たずに、次の チャンクの移行 を開始します。 削除フェーズで次の チャンク移行の開始を ブロックする には、_waitForDelete を true に設定します。

    configデータベースの settingsコレクション内にある _waitForDelete 値を更新します。 (例: )。

    use config
    db.settings.updateOne(
    { "_id" : "balancer" },
    { $set : { "_waitForDelete" : true } },
    { upsert : true }
    )

特定のコレクションのバランシングを無効化する

デフォルトでは 、すべてのコレクションでバランシングが有効になっています。

特定のコレクションのバランシングを無効にするには、mongos mongoshシェルを使用してsh.disableBalancing() に接続し、 メソッドを呼び出します。

この例では、 students.gradesコレクションのバランシングを無効にします。

sh.disableBalancing("students.grades")

sh.disableBalancing()メソッドは、コレクションの完全な名前空間をパラメータとして受け入れます。

5

バランサーを無効にし、再度有効にする準備ができたら、次の手順に従います。

  1. mongosh shellを使用して、クラスター内の任意の mongos に接続します。

  2. 次のいずれかの操作を発行して、バランサーを有効にします。

    mongosh シェルから、次を実行します。

    sh.startBalancer()

    注意

    ドライバーからバランサーを有効にするには、次のように admin データベースに対して balancerStart コマンドを使用します。

    db.adminCommand( { balancerStart: 1 } )

    MongoDB 6.0.3 以降では、自動チャンク分割は実行されません。 これはバランシング ポリシーの改善によるものです。 自動分割コマンドは引き続き存在しますが、操作は実行されません。 詳細については、「バランシング ポリシーの変更 」を参照してください。

    MongoDB バージョン 6.0.3 より前では、sh.startBalancer() によってシャーディングされたクラスターの自動分割も有効になります。

戻る

ハッシュされたシャードキーインデックスの削除

項目一覧