Workboxアプリケーションのパフォーマンスは、ソリューション内のコンテンツ量とアイテム アクセス構成によって決定されます。Workboxが表示するアイテムが多ければ多いほど、Sitecoreが実行しなければならない計算処理が増え、アプリケーションのロード遅延につながります。
アイテム ワークフロー情報は、[VersionedFields]テーブルに格納されます。特定のワークフロー状態にあるアイテムを探すためのデフォルトのSQLクエリは、以下のとおりです:
SELECT TOP (maxVersionToLoad) [ItemId], [Language], [Version] FROM [VersionedFields] WITH (NOLOCK) WHERE [FieldId]='3e431de1-525e-47a3-b6b0-1ccbec3a8c98' AND [Value]= '{WorkflowStateID}' ORDER BY [Updated] desc
SQL エンジンはクエリの実行計画を選択する責任がありますが、特定の条件下では、クエリは高価な [VersionedFields] テーブル スキャンにつながる可能性があります。
CREATE NONCLUSTERED INDEX IX_Versioned_Workflow_Filtered ON VersionedFields (itemid,FieldId) INCLUDE (Value,language,version, updated) WHERE FieldId='{3E431DE1-525E-47A3-B6B0-1CCBEC3A8C98}'
これにより、SQL エンジンのクエリ プランナーが [VersionedFields] テーブルの代わりにインデックスを使用できるようになりました。SQL インデックスを追加すると、Workbox が高速化されますが、アイテムの挿入/更新/削除の速度が若干遅くなります。
<setting name="Workbox.SingleWorkflowStateVersionLoad.Threshold" value="100"/>
Sitecoreは、デフォルトでWorkboxに2000バージョン以上をロードしません。このデフォルト値は、人が妥当な時間でレビューできる量よりもはるかに多く、レガシー システムの動作を維持するために追加されました。
<setting name="Caching.AccessResultCacheSize" value="100MB" />ワークフロー状態間でアイテムを移動できるのは、十分なアクセス権限を持つユーザーのみなので、Sitecoreはアイテムごとにアクセス ルールを評価します。Sitecoreでは、アクセス権を何度も計算するのを避けるために、キャッシュ レイヤーを使用しています。データ量が増えると、キャッシュのサイズが足りなくなる可能性があり、次のような警告メッセージが表示されます:
WARN AccessResultCache cache is cleared by Sitecore.Caching.Generics.Cache`1+DefaultScavengeStrategy[[Sitecore.Caching.AccessResultCacheKey, Sitecore.Kernel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null]] strategy. Cache running size was 9 MB.