必要なインデックスがない場合、MongoDB セッション プロバイダー使用時のMongoDBサーバーのパフォーマンスに問題が起きる


解説

MongoDB プロバイダーを、プライベート セッション状態と共有セッション状態の両方で使用すると、必要なインデックスがコレクションにない場合、MongoDBサーバーに大きな負荷がかかる可能性があります。

例えば、プライベートおよび共有のセッション状態プロバイダーが次のように構成されている場合に発生します。

Sitecore XPは、Sitecore.SessionProvider.MongoDB.MongoSessionStateProviderクラスの 2 つのインスタンスを作成しますが、最初のものだけがMongoDBのセッション コレクションをe_1__id.s_1__id.a_1インデックスで初期化します。その結果、プライベート セッション状態データベースのクエリにはインデックスが使用され、共有セッション状態データベースのクエリにはフル コレクション スキャンが使用されます。

解決策

この問題を解決するには、次の手順に従ってください:

  1. RobomongoなどのGUI ツールを使用してMongoDBサーバーに接続します。
  2. shared.sessions データベースを開き、\Collections\sessions\Indexesノードに移動します。
  3. [インデックス]ノードを右クリックし、[インデックスの追加...]コマンドをクリックします。
  4. [インデックス プロパティ]ダイアログで、次の値を[Name]フィールドと[Keys]フィールドに入力します:
    • Name: e_1__id.s_1__id.a_1
    • Keys: { "e" : 1, "_id.s" : 1, "_id.a" : 1 }
  5. [インデックス プロパティ]ダイアログで、[保存]をクリックします。