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

文書翻訳 文書翻訳
文書番号: 968520 - 対象製品
すべて展開する | すべて折りたたむ

目次

現象

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.indexes
WHERE name = N'CRM_AsyncOperation_CleanupCompleted')
DROP Index AsyncOperationBase.CRM_AsyncOperation_CleanupCompleted
GO
CREATE NONCLUSTERED INDEX CRM_AsyncOperation_CleanupCompleted
ON [dbo].[AsyncOperationBase] ([StatusCode],[StateCode],[OperationType])
GO

declare @DeleteRowCount int
Select @DeleteRowCount = 2000
declare @DeletedAsyncRowsTable table (AsyncOperationId uniqueidentifier not null primary key)
declare @continue int, @rowCount int
select @continue = 1
while (@continue = 1)
begin
begin tran
insert into @DeletedAsyncRowsTable(AsyncOperationId)
Select top (@DeleteRowCount) AsyncOperationId
from AsyncOperationBase
ここで、OperationType in (1, 9, 12, 25, 27, 10) AND StateCode = 3 AND StatusCode in (30, 32)     
 
Select @rowCount = 0
Select @rowCount = count(*) from @DeletedAsyncRowsTable
select @continue = case when @rowCount <= 0 then 0 else 1 end     
 
if (@continue = 1)
begin
delete 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 @DeletedAsyncRowsTable
end
 
commit
end

-- 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 サイトを参照してください。
    http://code.msdn.microsoft.com/ScaleGroupJobEditor/Release/ProjectReleases.aspx?ReleaseId=676
    この操作は、スクリプトのパフォーマンスに直接影響を及ぼしません。
  • この文書に掲載した削除スクリプトのパフォーマンスを向上、および同様の削除を実行する 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])
    GO
    
    CREATE 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 FULLSCAN
    UPDATE STATISTICS [dbo].[DuplicateRecordBase] WITH FULLSCAN
    UPDATE STATISTICS [dbo].[BulkDeleteOperationBase] WITH FULLSCAN
    UPDATE STATISTICS [dbo].[WorkflowCompletedScopeBase] WITH FULLSCAN
    UPDATE STATISTICS [dbo].[WorkflowLogBase] WITH FULLSCAN
    UPDATE 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)

詳細

関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
954929 AsyncOperation エンティティが [Org]_MSCRM データベースのかなりの部分を占め、これにより、Microsoft Dynamics CRM のパフォーマンスが低下しています。
関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
957871 Workflow Expansion Task レコードが原因となり、Microsoft Dynamics CRM 4.0 で MSCRM データベース内の AsyncOperationBase テーブルが過度に増加しています。
ソフトウェア更新プログラムに関する用語の関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
824684 マイクロソフトのソフトウェアの更新で使用される一般的な用語の説明
Microsoft Business Solutions CRM のソフトウェア修正プログラムおよび更新プログラム パッケージに関する用語の詳細については、以下のサポート技術情報番号をクリックしてください。
887283 Microsoft Business Solutions CRM のソフトウェア修正プログラムおよび更新プログラム パッケージの命名規則

プロパティ

文書番号: 968520 - 最終更新日: 2009年9月23日 - リビジョン: 7.1
この資料は以下の製品について記述したものです。
  • Microsoft Dynamics CRM 4.0
キーワード:?
kbfix kbautohotfix kbexpertiseinter kbsurveynew kbmbsmigrate kbqfe kbhotfixserver KB968520
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com