Sitecore XP 7.5以降のバージョンでは、アナリティクス データの取得と処理にMongoDBデータベースを使用しています。これらのSitecore XPバージョンは、Azureでホストすることができます。Azureはアイドル状態のMongoDBの接続を切断する場合があり、そのためアナリティクスが失敗し、ログ ファイルで以下のようなエラーが発生することがあります。
ERROR MongoDbDictionary.Store() has failed. Exception: Sitecore.Analytics.DataAccess.DatabaseNotAvailableException Message: Database not available Source: Sitecore.Analytics.MongoDB at Sitecore.Analytics.Data.DataAccess.MongoDb.MongoDbCollection.Execute(Action action, ExceptionBehavior exceptionBehavior) at Sitecore.Analytics.Data.DataAccess.MongoDb.MongoDbCollection.Save[TNominalType](TNominalType value) at Sitecore.Analytics.Data.DataAccess.MongoDb.MongoDbDictionary.Store(Object value)
ERROR Exception when executing agent aggregation/automationRangeManager
Exception: System.NullReferenceException
Message: Object reference not set to an instance of an object.
Source: Sitecore.Analytics.MongoDB
at Sitecore.Analytics.RangeScheduler.MongoDbRangeMap2.GetRightKey() at Sitecore.Analytics.Automation.Aggregation.Data.Processing.RangeManagerAgent.Execute() at Sitecore.Analytics.Core.BackgroundService.Run()
この問題を解決するには、全てのMongoDBの接続文字列でmaxIdleTimeMSパラメータを60000に設定します。MongoDBの接続文字列のフォーマットや、サポートされるパラメータの詳細に関しては、MongoDBドキュメント サイトをご参照ください。
<add name="analytics" connectionString="mongodb://user:password@host/analytics?replicaSet=rs1;ssl=true;maxIdleTimeMS=60000" /> <add name="tracking.live" connectionString="mongodb://user:password@host/tracking_live?replicaSet=rs1;ssl=true;maxIdleTimeMS=60000" /> <add name="tracking.history" connectionString="mongodb://user:password@host/tracking_history?replicaSet=rs1;ssl=true;maxIdleTimeMS=60000" /> <add name="tracking.contact" connectionString="mongodb://user:password@host/tracking_contact?replicaSet=rs1;ssl=true;maxIdleTimeMS=60000" />
これにより、Sitecore XPはAzureが接続を切断しようとする前に、アイドル状態のMongoDBの接続をリサイクルし、必要に応じて新しい接続を確立します。
注
接続文字列内のパラメータは、次の区切り記号で区切ることができます。
ある区切り記号が動作しない(設定エラーになる)場合、別の区切り記号をお試しください。