CompactClientDataAgentの起動時のパフォーマンスの問題


解説

Core.ClientData SQLテーブルに大量のデータが含まれている場合、CompactClientDataAgentはすべてのデータを一度にクリーンアップすることはできません。これは、ClientDataStore.CompactDataメソッドが5000件以上のレコードを削除しようとすると、SQL Serverがテーブル ロックを呼び出すためです。これにより、廃止されたエンティティがテーブルに蓄積され、Sitecore XP インスタンスのパフォーマンスの問題を引き起こします。

次の例外がSitecore XP ログに記録されます:

Exception: System.Data.DataException
Message: Error executing SQL command: SELECT [Data] FROM [ClientData] WHERE [SessionKey] = @sessionKey
Nested Exception
Exception: System.Data.SqlClient.SqlException
Message: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Source: .Net SqlClient Data Provider
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
at Sitecore.Data.DataProviders.Sql.DataProviderCommand.ExecuteReader()

解決策

本問題を解決するには、影響を受ける製品バージョンと互換性のあるパッチをダウンロードしてインストールししてください:
https://github.com/SitecoreSupport/Sitecore.Support.176278/releases

他のリリースの解決策を入手するには、Sitecore サポートにお問い合わせください。