Sitecore Content Searchのインデックスが頻繁に更新されると、Content ManagementおよびContent Deliveryサーバーの両方でパフォーマンスの問題が発生する可能性があります。
この問題が発生した場合の症状は、次の通りです:
ManagedPoolThread #5 04:44:59 INFO Job started: Sitecore.Tasks.CleanupEventQueue Heartbeat 04:48:00 ERROR Exception in alarm clock event subscriber. Exception: System.Exception Message: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. Source: Sitecore.Kernel at Sitecore.Data.DataProviders.Sql.DataProviderCommand.ExecuteReader() at Sitecore.Data.DataProviders.Sql.DataProviderReader..ctor(DataProviderCommand command) at Sitecore.Data.DataProviders.Sql.SqlDataApi.CreateReader(String sql, Object[] parameters) at Sitecore.Data.DataProviders.Sql.SqlDataApi.<CreateObjectReader>d__0`1.MoveNext() at Sitecore.Eventing.EventQueue.ProcessEvents(Action`2 handler) at Sitecore.Eventing.EventProvider.RaiseQueuedEvents() at Sitecore.Services.AlarmClock.Heartbeat_Beat(Object sender, EventArgs e)
SELECT COUNT(*) as 'Number of entries' FROM [EventQueue] WHERE InstanceType='Sitecore.Data.Eventing.Remote.PropertyChangedRemoteEvent, Sitecore.Kernel, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null' AND InstanceData LIKE '%last_updated%'
この問題は、Sitecore Content Search機能によって、EventQueueデータベース テーブルにPropertyChangeRemoteEventレコードが過剰に生成されることに起因している可能性があります。
これは、Sitecore Content Searchがインスタンス固有の検索インデックスのメタデータを格納するために、Propertiesデータベース テーブルを使用することにより発生します(例えば、最後にインデックスが更新された時刻などが格納されます)。
Propertiesテーブルが変更されるたびに、PropertyChangedRemoteEventがEventQueueテーブルに記録され、他の接続されているSitecoreインスタンスに対して、Propertiesテーブル周辺のキャッシング層を更新するよう通知します。
インデックスの更新が頻繁に実施されると、当該の挙動によって、キャッシュが過剰に再生成され、Content ManagementおよびContent Deliveryサーバーの両方にパフォーマンスの問題が継続して発生する恐れがあります。
本問題を対処するための利用可能なオプションとして、次の解決策を実施することができます:
パッチの詳細情報:
Sitecore Content SearchがPropertiesテーブルを使用して記録した情報はインスタンス固有であるため、他のSitecoreインスタンス間でプロパティ変更イベントを共有する必要はありません。このパッチは、EventDisablerを使用してEventQueueテーブルへの過剰なデータの入力を防止します。
本問題を対処するためのもう1つのオプションとして、次の解決策を適用することができます:
パッチの詳細情報:
このパッチにより、Sitecore Content Searchはファイル ベースのプロパティを使用し、EventQueueテーブルにリモート イベントを記録しないようになります。関連の情報は、/<datafolder>/indexes/propertiesフォルダでファイルとして保存されます。