定義
- db.collection.analyzeShardKey(key, opts)
- シャーディングされていないコレクションまたはシャーディングされたコレクションの シャードキー を評価するためのメトリクスを計算します。 メトリクスは、サンプリングされたクエリに基づいています。 - configureQueryAnalyzerを使用して、コレクションのクエリ サンプリングを構成できます。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
- MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです 
重要
このコマンドは、M0 および Flex クラスターではサポートされていません。詳細については、「 サポートされていないコマンド 」を参照してください。
- MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン 
- MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン 
構文
db.collection.analyzeShardKey() の構文は次のとおりです。
db.collection.analyzeShardKey(    <shardKey>,    {      keyCharacteristics: <bool>,      readWriteDistribution: <bool>,      sampleRate: <double>,      sampleSize: <int>    }  ) 
フィールド
| フィールド | タイプ | 必要性 | 説明 | 
|---|---|---|---|
| 
 | ドキュメント | 必須 | 分析するシャードキー。 これは、シャーディングされていないコレクションまたはシャーディングされたコレクションの候補シャードキー、またはシャーディングされたコレクションの現在のシャードキーです。 デフォルト値はありません。 | 
| 
 | ブール値 | 任意 | シャードキーの特性に関するメトリクスを計算するかどうか。 詳細については、「 キーの特性 」を参照してください。 デフォルトは  | 
| 
 | ブール値 | 任意 | 読み取りと書込みの分布に関するメトリクスを計算するかどうか。 詳しくは、「 readWriteDistribution 」を参照してください。 デフォルトは  | 
| 
 | double | 任意 | シャードキーの特性に関するメトリクスを計算するときにサンプリングするコレクション内のドキュメントの割合。  
 デフォルト値はありません。 | 
| 
 | integer | 任意 | シャードキーの特性に関するメトリクスを計算するときにサンプリングするドキュメントの数。  指定されておらず、かつ | 
動作
動作については、 analyzeShardKey の動作 を参照してください。
アクセス制御
詳細については、「 analyzeShardKey アクセス制御 」を参照してください。
出力
出力の例については、「 analyzeShardKey 出力 」を参照してください。
例
ソーシャル メディア アプリの簡素化されたバージョンを検討してください。 シャーディングしようとしているコレクションはpostコレクションです。
postコレクション内のドキュメントには次のスキーマがあります。
{    userId: <uuid>,    firstName: <string>,    lastName: <string>,    body: <string>,  // the field that can be modified.    date: <date>,    // the field that can be modified. } 
バックグラウンド情報
- このアプリのユーザーは 1500 人です。 
- 姓は 30 件、名は 45 件あり、一部は他のユーザーよりも一般的です。 
- 3 人のプライベートユーザーがいます。 
- 各ユーザーは他の 5 人のユーザーに依存し、少なくとも 1 人のアイドルユーザーに従う可能性が非常に高くなります。 
サンプル ワークロード
- 各ユーザーは 1 日に約 2 回の投稿をランダムに書き込みます。 彼らは各投稿が送信された直後に、1 回編集します。 
- 各ユーザーは 6 時間ごとにログを記録して、自分のプロファイルと過去 24 時間から追跡するユーザーによる投稿を読み取ります。 過去 3 時間のランダムな投稿 でも応答します。 
- アプリはすべてのユーザーに対して、3 日以上経過した投稿を午前 0 時に削除します。 
ワークロード クエリ パターン
このワークロードには次のクエリ パターンがあります。
- findフィルター付きコマンド- { userId: , firstName: , lastName: }
- findフィルター付きコマンド- { $or: [{ userId: , firstName: , lastName:, date: { $gte: }, ] }
- findAndModifyフィルター- { userId: , firstName: , lastName: , date: }を使用して コマンドを実行し、本体と日付フィールドを更新します。
- updateコマンドと- multi: falseおよびフィルター- { userId: , firstName: , lastName: , date: { $gte: , $lt: } }を使用して、本体と日付フィールドを更新します。
- deleteコマンドと- multi: trueおよびフィルター- { userId: , firstName: , lastName: , date: { $lt: } }
以下は、7 日間のワークロードから収集されたサンプリングされたクエリを使用して、いくつかの候補シャードキーに対して db.collection.analyzeShardKey メソッドによって返されるメトリクスの例です。
注意
db.collection.analyzeShardKeyメソッドを実行する前に、 サポートされているインデックス のセクションをお読みください。分析対象のシャードキーにサポート用インデックスが必要な場合は、db.collection.createIndex() メソッドを使用してインデックスを作成します。
{ _id: 1 } キーの特徴
この例では、 db.collection.analyzeShardKey メソッドを使用して、social.postコレクションの { _id: 1 }シャードキーに関するメトリクスを提供します。
次のコード ブロックでは、 を使用してクエリdb.collection.configureQueryAnalyzer() サンプリングを有効にします。
use social db.post.configureQueryAnalyzer(    {       mode: "full",       samplesPerSecond: 5    } ) 
db.collection.configureQueryAnalyzer() がクエリ サンプルを収集した後、次のコード ブロックは db.collection.analyzeShardKey メソッドを使用して 10、000 ドキュメントをサンプル、結果を計算します。
use social db.post.analyzeShardKey(    { _id: 1 },    {       keyCharacteristics: true,       readWriteDistribution: false,       sampleSize: 10000    } ) 
{ lastName: 1 } key characters
このdb.collection.analyzeShardKeyメソッドは、 social.postコレクションの{ lastName: 1 }シャードキーに関するメトリクスを提供します。
use social db.post.analyzeShardKey(    { lastName: 1 },    {       keyCharacteristics: true,       readWriteDistribution: false    } ) 
この例の出力は、次のようになります。
{    "keyCharacteristics": {      "numDocsTotal" : 9039,      "avgDocSizeBytes" : 153,      "numDocsSampled" : 9039,      "isUnique" : false,      "numDistinctValues" : 30,      "mostCommonValues" : [          {            "value" : {                "lastName" : "Smith"            },            "frequency" : 1013          },          {            "value" : {                "lastName" : "Johnson"            },            "frequency" : 984          },          {            "value" : {                "lastName" : "Jones"            },            "frequency" : 962          },          {            "value" : {                "lastName" : "Brown"            },            "frequency" : 925          },          {            "value" : {                "lastName" : "Davies"            },            "frequency" : 852          }      ],      "monotonicity" : {        "recordIdCorrelationCoefficient" : 0.0771959161,        "type" : "not monotonic"    },  } } 
{ userId: 1 } key characters
このdb.collection.analyzeShardKeyメソッドは、 social.postコレクションの{ userId: 1 }シャードキーに関するメトリクスを提供します。
use social db.post.analyzeShardKey(    { userId: 1 },    {       keyCharacteristics: true,       readWriteDistribution: false    } ) 
この例の出力は、次のようになります。
{   "keyCharacteristics": {     "numDocsTotal" : 9039,     "avgDocSizeBytes" : 162,     "numDocsSampled" : 9039,     "isUnique" : false,     "numDistinctValues" : 1495,     "mostCommonValues" : [       {         "value" : {           "userId" : UUID("aadc3943-9402-4072-aae6-ad551359c596")         },         "frequency" : 15       },      {        "value" : {          "userId" : UUID("681abd2b-7a27-490c-b712-e544346f8d07")        },        "frequency" : 14      },      {        "value" : {          "userId" : UUID("714cb722-aa27-420a-8d63-0d5db962390d")        },        "frequency" : 14      },      {        "value" : {          "userId" : UUID("019a4118-b0d3-41d5-9c0a-764338b7e9d1")        },        "frequency" : 14      },      {        "value" : {          "userId" : UUID("b9c9fbea-3c12-41aa-bc69-eb316047a790")        },        "frequency" : 14      }    ],    "monotonicity" : {      "recordIdCorrelationCoefficient" : -0.0032039729,      "type" : "not monotonic"    },  } } 
{ userId: 1 } readWriteDistribution
このdb.collection.analyzeShardKeyメソッドは、 social.postコレクションの{ userId: 1 }シャードキーに関するメトリクスを提供します。
use social db.post.analyzeShardKey(    { userId: 1 },    {       keyCharacteristics: false,       readWriteDistribution: true    } ) 
この例の出力は、次のようになります。
{    "readDistribution" : {      "sampleSize" : {        "total" : 61363,        "find" : 61363,        "aggregate" : 0,        "count" : 0,        "distinct" : 0      },      "percentageOfSingleShardReads" : 50.0008148233,      "percentageOfMultiShardReads" : 49.9991851768,      "percentageOfScatterGatherReads" : 0,      "numReadsByRange" : [        688,        775,        737,        776,        652,        671,        1332,        1407,        535,        428,        985,        573,        1496,        ...        ],      },    "writeDistribution" : {      "sampleSize" : {        "total" : 49638,        "update" : 30680,        "delete" : 7500,        "findAndModify" : 11458      },      "percentageOfSingleShardWrites" : 100,      "percentageOfMultiShardWrites" : 0,      "percentageOfScatterGatherWrites" : 0,      "numWritesByRange" : [        389,        601,        430,        454,        462,        421,        668,        833,        493,        300,        683,        460,        ...       ],       "percentageOfShardKeyUpdates" : 0,       "percentageOfSingleWritesWithoutShardKey" : 0,       "percentageOfMultiWritesWithoutShardKey" : 0     } }