Microsoft Dynamics CRM 4.0 で AsyncOperationBase テーブルのサイズが過度に大きくなると、パフォーマンスが低下します。

現象
Microsoft Dynamics CRM 4.0 を実行する場合、AsyncOperationBase テーブルが増大し非常に大きくなります。テーブルに含まれるレコード数が数百万本に及ぶと、パフォーマンスが低下します。

さらに、Microsoft Dynamics CRM サーバーのアプリケーション イベント ログに以下のようなエラーが出力されます。
種類: エラー
ソース: MSCRMDeletionService
分類: なし
イベント ID: 16387
日付: 2009/01/26
時刻: 11:41:54 AM
ユーザー: N/A
コンピューター: CRMSERVER
説明: エラー: Deletion Service でテーブルをクリーンアップできませんでした=CleanupInactiveWorkflowAssembliesProcedure詳細については、http://go.microsoft.com/fwlink/events.asp のヘルプとサポート センターを参照してください。
解決方法
この問題を解決するには、<OrgName>_MSCRM データベースに対して以下のスクリプトを実行して AsyncOperationBase テーブルのクリーンアップを実行します。ここで、<OrgName> には組織の実際の名前が入ります。

警告: 完了されたシステム ジョブは、場合によっては、業務上重要で長期にわたる格納が必要な場合があるので、データのクリーンアップを行う前に、まず、組織の管理担当者と検討してください。

影響を受けるシステム ジョブ:
  • SQM データ収集- カスタマー エクスペリエンス プログラムのデータを収集するソフトウェア品質基準
  • 契約の状態の更新ジョブ。このジョブは、毎日 1 回深夜に実行されます。このジョブでは有効期限が切れている契約を、期限切れの状態に設定します。
  • 組織のフル テキスト カタログ インデックス - CRM で KB 文書を検索するために DB 内にフル テキスト インデックスを入力します。

定期的なジョブがキャンセルされている場合、それらのジョブは削除されます。

注:
  • この KB 文書内の SQL スクリプトは、1 回だけの作業となります。このジョブは、毎晩、毎週、または毎月の単位で定期的に実行する SQL ジョブとして追加することができます。CRM が実行される場合は、業務に合わせて週単位でこの KB 文書を適用するか、カスタム BULK DELETE ジョブを作成して解決方法を適用する必要があります (BulkDeleteRequest.QuerySet Property、BulkDeleteRequest Class、および Order of Deletion に関する CRM SDK ドキュメントを参照してください)。
  • ワークフローの AsyncOperation レコードおよび対応するレコードが WorkflowLogBase オブジェクトから削除されていることを確認します。
  • 対応するすべての bulkdeletefailure レコードが削除されていることを確認します。
  • 以下の非同期操作タイプの状態コードが 3 で、ステータス コードが 30 または 32 である場合に、これらの操作タイプだけが削除されることを確認します。
    • Workflow Expansion Task (1)
    • Collect SQM data (9)
    • PersistMatchCode (12)
    • FullTextCatalogIndex (25)
    • UpdateContractStates (27)
    • Workflow (10)
IF EXISTS (SELECT name from sys.indexesWHERE name = N'CRM_AsyncOperation_CleanupCompleted')DROP Index AsyncOperationBase.CRM_AsyncOperation_CleanupCompletedGOCREATE NONCLUSTERED INDEX CRM_AsyncOperation_CleanupCompletedON [dbo].[AsyncOperationBase] ([StatusCode],[StateCode],[OperationType])GOdeclare @DeleteRowCount intSelect @DeleteRowCount = 2000declare @DeletedAsyncRowsTable table (AsyncOperationId uniqueidentifier not null primary key)declare @continue int, @rowCount intselect @continue = 1while (@continue = 1)beginbegin traninsert into @DeletedAsyncRowsTable(AsyncOperationId)Select top (@DeleteRowCount) AsyncOperationIdfrom AsyncOperationBaseここで、OperationType in (1, 9, 12, 25, 27, 10) AND StateCode = 3 AND StatusCode in (30, 32)      Select @rowCount = 0Select @rowCount = count(*) from @DeletedAsyncRowsTableselect @continue = case when @rowCount <= 0 then 0 else 1 end      if (@continue = 1)begindelete WorkflowLogBase from WorkflowLogBase W, @DeletedAsyncRowsTable dここで、W.AsyncOperationId = d.AsyncOperationId            delete BulkDeleteFailureBase From BulkDeleteFailureBase B, @DeletedAsyncRowsTable dここで、B.AsyncOperationId = d.AsyncOperationId delete AsyncOperationBase From AsyncOperationBase A, @DeletedAsyncRowsTable dここで、A.AsyncOperationId = d.AsyncOperationId             delete @DeletedAsyncRowsTableend commitend-- AsyncOperationBase のインデックスを削除します。DROP INDEX AsyncOperationBase.CRM_AsyncOperation_CleanupCompleted


削除スクリプトのパフォーマンスの向上

  • 全体的な Microsoft CRM パフォーマンスを向上するには、Microsoft CRM のオフピーク時間中に実行されるように Microsoft CRM Deletion Service をスケジュールします。既定では、Microsoft CRM がインストールされた時刻にサービスが実行されます。しかし、既定の時刻ではなく、午後 10:00 にサービスを実行することもできます。そのためには、Microsoft CRM ScaleGroup Job Editor を使用します。詳細については、次の MSDN Web サイトを参照してください。 この操作は、スクリプトのパフォーマンスに直接影響を及ぼしません。
  • この文書に掲載した削除スクリプトのパフォーマンスを向上、および同様の削除を実行する Microsoft CRM DeletionService コードを向上するには、この文書の削除スクリプトを実行する前に以下の 3 つのインデックスを OrganizationName_MSCRM データベースに追加します。
    CREATE NONCLUSTERED INDEX CRM_WorkflowLog_AsyncOperationID ON [dbo].[WorkflowLogBase] ([AsyncOperationID])GO CREATE NONCLUSTERED INDEX CRM_DuplicateRecord_AsyncOperationID ON [dbo].[DuplicateRecordBase] ([AsyncOperationID])GOCREATE NONCLUSTERED INDEX CRM_BulkDeleteOperation_AsyncOperationID ON [dbo].[BulkDeleteOperationBase](AsyncOperationID)GO
    上記の 3 つのインデックスを追加しなかった場合、削除スクリプトの実行には数時間を要する場合があります。
  • このスクリプトの実行中は、Microsoft CRM Asynchronous Processing Service を停止します。
  • オプション: 次のインデックスを再生成し、統計を更新します。
    -- インデックスの再生成& AsyncOperationBase テーブル上の統計の更新 ALTER INDEX ALL ON AsyncOperationBase REBUILD WITH (FILLFACTOR = 80, ONLINE = OFF,SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = OFF)GO -- インデックスの再生成& WorkflowLogBase テーブル上の統計の更新 ALTER INDEX ALL ON WorkflowLogBase REBUILD WITH (FILLFACTOR = 80, ONLINE = OFF,SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = OFF)GO
  • オプション: 以下のコマンドを使用して、このクエリに関係するすべてのテーブルで統計にフル スキャンを反映します (ピーク時以外の時間帯が好ましい)。
    UPDATE STATISTICS [dbo].[AsyncOperationBase] WITH FULLSCANUPDATE STATISTICS [dbo].[DuplicateRecordBase] WITH FULLSCANUPDATE STATISTICS [dbo].[BulkDeleteOperationBase] WITH FULLSCANUPDATE STATISTICS [dbo].[WorkflowCompletedScopeBase] WITH FULLSCANUPDATE STATISTICS [dbo].[WorkflowLogBase] WITH FULLSCANUPDATE STATISTICS [dbo].[WorkflowWaitSubscriptionBase] WITH FULLSCAN
  • オプション:MSCRM データベースの復旧モデルを「シンプル」へ変更して、SQL サーバー ログの過度な生成を回避します。SQL Server 2005 の場合は、Microsoft SQL Server Management Studio に管理者としてログインし、使用する <org_name>_MSCRM データベースを右クリックして、[プロパティ] をクリックし、[オプション] をクリックし、[復旧モデル] をクリックします。[シンプル] にマークを付け、[OK] をクリックします。このスクリプトを最初に実行した後で、<org_name>_MSCRM データベース復旧モデルを FULL に戻して、最良のデータ回復可能性モデルを実現します。




この文書のスクリプトで削除するレコード数を決定するには、OrganizationName_MSCRM データベースに対して以下のカウント スクリプトを実行します。
Select Count(AsyncOperationId)from AsyncOperationBase WITH (NOLOCK)ここで、OperationType in (1, 9, 12, 25, 27, 10) AND StateCode = 3 AND StatusCode IN (30,32)
詳細
関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
954929AsyncOperation エンティティが [Org]_MSCRM データベースのかなりの部分を占め、これにより、Microsoft Dynamics CRM のパフォーマンスが低下しています。
関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
957871 Workflow Expansion Task レコードが原因となり、Microsoft Dynamics CRM 4.0 で MSCRM データベース内の AsyncOperationBase テーブルが過度に増加しています。
ソフトウェア更新プログラムに関する用語の関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
824684 マイクロソフトのソフトウェアの更新で使用される一般的な用語の説明
Microsoft Business Solutions CRM のソフトウェア修正プログラムおよび更新プログラム パッケージに関する用語の詳細については、以下のサポート技術情報番号をクリックしてください。
887283Microsoft Business Solutions CRM のソフトウェア修正プログラムおよび更新プログラム パッケージの命名規則
プロパティ

文書番号:968520 - 最終更新日: 09/23/2009 07:54:09 - リビジョン: 7.1

Microsoft Dynamics CRM 4.0

  • kbfix kbautohotfix kbexpertiseinter kbsurveynew kbmbsmigrate kbqfe kbhotfixserver KB968520
フィードバック