Microsoft Dynamics CRM에서 AsyncOperationBase 테이블이 너무 커지면 성능이 느려진다

증상

Microsoft Dynamics CRM 4.0, Microsoft Dynamics CRM 2011, Microsoft dynamics crm 2013 또는 Microsoft Dynamics crm 2015을 실행 하는 경우 AsyncOperationBase 표는 매우 커질 수 있습니다. 테이블에 수백만 개의 레코드가 포함 되어 있으면 성능이 느려집니다. 또한 다음과 유사한 오류가 Microsoft Dynamics CRM을 실행 하는 서버의 응용 프로그램 이벤트 로그에 기록 됩니다.

이벤트 유형: ErrorEvent 원본: MSCRMDeletionServiceEvent Category: Noevent ID: 16387Date: 2009/01/26Time: 11:41:54 AMUser: N/AComputer: CRMSERVERDescription: 오류: 삭제 서비스에서 table = CleanupInactiveWorkflowAssembliesProcedure을 정리 하지 못했습니다. 자세한 내용은 도움말 및 지원 센터를 참조 하세요.

해결 방법

이 문제를 해결 하려면 OrgName>_MSCRM 데이터베이스<에 대해 다음 스크립트를 실행 하 여 AsyncOperationBase 테이블의 정리를 수행 하 고,이 경우 자리 표시자<OrgName> 는 조직의 실제 이름을 나타냅니다.오류 데이터를 정리 하기 전에 완료 된 시스템 작업은 일부 경우에 비즈니스 가치를 가지 며 장기간 저장 해야 한다는 점에 유의 해야 합니다. 따라서 먼저 조직의 관리 직원과 논의 해야 합니다. 영향을 받는 시스템 작업:

  • SQM 데이터 컬렉션입니다. 소프트웨어 품질 메트릭은 사용자 환경 개선 프로그램에 대 한 데이터를 수집 합니다.

  • 계약 상태 업데이트 SQL 작업입니다. 이 작업은 매일 자정에 한 번 실행 됩니다. 이 작업에서는 만료 된 계약의 상태가 만료로 설정 됩니다.

  • 조직 전체 텍스트 카탈로그 인덱스입니다. CRM에서 Microsoft 기술 자료 문서를 검색 하기 위해 데이터베이스에 전체 텍스트 인덱스를 채웁니다.

되풀이 되는 작업이 취소 된 경우 제거 됩니다. 참고

  • For Microsoft Dynamics CRM 이 기술 자료 문서에 있는 SQL 스크립트는 일회성 작업입니다. 이를 SQL 작업으로 추가 하 여 야간, 주간 또는 월간 기준으로 실행할 수 있습니다. CRM이 실행 되는 동안 비즈니스 요구 사항에 따라이 문서를 매주 적용 하거나 사용자 지정 대량 삭제 작업을 작성 하 여 솔루션을 적용 해야 합니다. ( BulkDeleteRequest set 속성의 BulkDeleteRequest 클래스에 대 한 CRM SDK 설명서와 삭제 순서에 대 한 자세한 내용은 여기를 참조 하세요.)

  • 워크플로와 해당 레코드의 AsyncOperation 레코드가 Workflowlogbase 개체에서 삭제 되었는지 확인 합니다.

  • 해당 하는 모든 대량 삭제 실패와 대량 삭제 작업 레코드가 삭제 되었는지 확인 합니다.

  • 형식의 상태 코드가 3이 고 형식의 상태 코드가 30 또는 32 인 경우 다음 비동기 작업 유형만 삭제 되는지 확인 합니다.

    • 워크플로 확장 작업 (1)

    • SQM 데이터 수집 (9)

    • PersistMatchCode만 일치 (12)

    • FullTextCatalogIndex (25)

    • UpdateContractStates (27)

    • 워크플로 (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])GOwhile(1=1)begindeclare @DeleteRowCount int = 10000declare @rowsAffected intdeclare @DeletedAsyncRowsTable table (AsyncOperationId uniqueidentifier not null primary key)insert into @DeletedAsyncRowsTable(AsyncOperationId)Select top (@DeleteRowCount) AsyncOperationId from AsyncOperationBasewhere   OperationType in (1, 9, 12, 25, 27, 10)   AND StateCode = 3   AND StatusCode in (30, 32) select @rowsAffected = @@rowcount  delete poa from PrincipalObjectAccess poa    join WorkflowLogBase wlb on    poa.ObjectId = wlb.WorkflowLogId   join @DeletedAsyncRowsTable dart on    wlb.AsyncOperationId = dart.AsyncOperationIddelete WorkflowLogBase from WorkflowLogBase W, @DeletedAsyncRowsTable dwhere   W.AsyncOperationId = d.AsyncOperationId              delete BulkDeleteFailureBase From BulkDeleteFailureBase B, @DeletedAsyncRowsTable dwhere   B.AsyncOperationId = d.AsyncOperationIddelete BulkDeleteOperationBase From BulkDeleteOperationBase O, @DeletedAsyncRowsTable dwhere   O.AsyncOperationId = d.AsyncOperationIddelete WorkflowWaitSubscriptionBase from WorkflowWaitSubscriptionBase WS, @DeletedAsyncRowsTable dwhere   WS.AsyncOperationId = d.AsyncOperationID  delete AsyncOperationBase From AsyncOperationBase A, @DeletedAsyncRowsTable dwhere   A.AsyncOperationId = d.AsyncOperationId/*If not calling from a SQL job, use the WAITFOR DELAY*/if(@DeleteRowCount > @rowsAffected)  returnelse  WAITFOR DELAY '00:00:02.000'end

삭제 스크립트의 성능 개선

  • 전체 Microsoft dynamics CRM 성능을 향상 시키려면 microsoft Dynamics crm 용 사용량이 적은 시간에 Microsoft Dynamics CRM 삭제 서비스를 실행 하도록 예약 합니다. 기본적으로 Microsoft Dynamics CRM이 설치 된 시점에 서비스가 실행 됩니다. 그러나 기본 시간 대신 10:00 PM에서 실행 되도록 서비스를 설정할 수 있습니다. 이렇게 하려면 Microsoft Dynamics CRM ScaleGroup 작업 편집기를 사용 합니다. 자세한 내용은 다음 CodePlex 웹 사이트를 방문 하세요.

    http://crmjobeditor.codeplex.com/참고

    1. 이 작업은 스크립트의 성능에 직접적인 영향을 주지 않습니다.

    2. Microsoft Dynamics CRM 4.0의 작업 편집기에는. m a 평가 기간이 지정 되어 있으며 더 이상 사용할 수 없습니다.

  • 이 문서의 삭제 스크립트 성능을 개선 하 고 유사한 삭제를 실행 하는 Microsoft Dynamics CRM 삭제 서비스 코드를 개선 하려면이 문서의 삭제 스크립트를 실행 하기 전에 다음 세 개의 인덱스를 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

    참고 이러한 인덱스를 추가 하지 않으면 삭제 스크립트를 실행 하는 데 몇 시간이 걸릴 수 있습니다.

  • 이 스크립트를 실행 하는 동안 Microsoft Dynamics CRM 비동기 처리 서비스를 중지 합니다.

  • ) 다음 인덱스를 다시 작성 하 고 통계를 업데이트 합니다.

    -- Rebuild Indexes & Update Statistics on AsyncOperationBase Table ALTER INDEX ALL ON AsyncOperationBase REBUILD WITH (FILLFACTOR = 80, ONLINE = OFF,SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = OFF)GO -- Rebuild Indexes & Update Statistics on WorkflowLogBase Table 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
  • ) Microsoft SQL Server 로그가 과도 하 게 생성 되지 않도록 MSCRM 데이터베이스의 복구 모델을 단순하게 변경 합니다. SQL Server 2005의 경우 Microsoft SQL Server Management Studio에 관리자로 로그온 하 고 <org_name>_MSCRM 데이터베이스를 마우스 오른쪽 단추로 클릭 하 고 속성을 클릭 한 다음 옵션을 클릭 하 고 복구 모델을 클릭 합니다. 간단하 게 표시 한 다음 확인을 클릭 합니다. 이 스크립트를 처음 실행 한 후에는 최상의 데이터 복구 모델을 위해 <org_name>_MSCRM 데이터베이스 복구 모델을 FULL로 다시 전환 해야 합니다.

  • 스크립트의 성능을 높이려면 1만의 @DeleteRowCount 값을 줄일 수 있습니다.

이 문서의 스크립트에서 삭제할 레코드 수를 결정 하려면 OrganizationName_MSCRM 데이터베이스에 대해 다음 count 스크립트를 실행 합니다.

Select Count(AsyncOperationId)from AsyncOperationBase WITH (NOLOCK)where OperationType in (1, 9, 12, 25, 27, 10) AND StateCode = 3 AND StatusCode IN (30,32) 

스크립트 오류정리 스크립트를 실행할 때 다음과 같은 오류 메시지가 나타날 수 있습니다.

DELETE 문이 참조 제약 조건 "asyncoperation_workflowwaitsubscription"과 충돌 했습니다. 데이터베이스 "Contoso_MSCRM", 테이블 "dbo에서 충돌이 발생 했습니다. WorkflowWaitSubscriptionBase ", ' AsyncOperationId ' 열입니다. 문이 종료 되었습니다.

이 오류 메시지가 표시 되는 경우 정리 스크립트를 중지 하 고 다음 단계에 따라 완료 되거나 취소 된 워크플로에 존재 하는 남은 WorkflowWaitSubscription 레코드를 제거 합니다. 이러한 레코드는 워크플로가 완료 되거나 취소 될 때 삭제 되기 때문에 더 이상 존재 하지 않아야 합니다. 이 쿼리에서 반환 되는 레코드는 표시 되지 않아야 합니다. 이 쿼리에 표시 되는 WorkflowWaitSubscriptionBase 테이블에 남아 있는 모든 항목은 고아 레코드입니다. Microsoft CRM 비동기 프로세스가 취소 되거나 완료 된 상태 이므로 UI를 통해 이러한 레코드를 삭제할 수 없습니다. 다음 스크립트는 완료 및 취소 된 워크플로 레코드에 대해 존재 하는 고아 WorkflowWaitSubscriptionBase 레코드 수를 확인 합니다.

select count(*) from workflowwaitsubscriptionbase WITH (NOLOCK) where asyncoperationid in (Select asyncoperationid from AsyncOperationBase WITH (NOLOCK) where OperationType in (1, 9, 12, 25, 27, 10) AND StateCode = 3 AND StatusCode IN (30,32)) 

다음 스크립트는 완료 및 취소 된 워크플로 레코드에 대 한 ' 남겨진 ' WorkflowWaitSubscriptionBase 레코드의 WorkflowWaitSubscriptionBase 레코드를 삭제 합니다.

delete from workflowwaitsubscriptionbase where asyncoperationid in(Select asyncoperationidfrom AsyncOperationBasewhere OperationType in (1, 9, 12, 25, 27, 10) AND StateCode = 3 AND StatusCode IN (30,32))

이 delete 문을 실행 하면 AsyncoperationBase 및 워크플로 정리 스크립트가 성공적으로 완료 됩니다.

추가 정보

자세한 내용은 다음 문서 번호를 클릭 하 여 Microsoft 기술 자료 문서를 참조 하세요.

954929 AsyncOperation 엔터티는 [Org] _MSCRM 데이터베이스의 상당 부분을 소모 하 여 Microsoft Dynamics CRM에서 성능이 저하 됩니다.

957871 워크플로 확장 작업 레코드가 Microsoft Dynamics CRM 4.0에서 MSCRM 데이터베이스의 AsyncOperationBase 테이블을 너무 크게 증가 시킵니다. 소프트웨어 업데이트 용어에 대 한 자세한 내용은 다음 문서 번호를 클릭 하 여 Microsoft 기술 자료 문서를 참조 하세요.

824684 Microsoft 소프트웨어 업데이트를 설명하는 데 사용되는 표준 용어에 대한 설명Microsoft 비즈니스 솔루션 CRM 소프트웨어 핫픽스 및 업데이트 패키지 용어에 대 한 자세한 내용은 다음 문서 번호를 클릭 하 여 Microsoft 기술 자료 문서를 참조 하세요.

887283 Microsoft 비즈니스 솔루션 CRM 소프트웨어 핫픽스 및 업데이트 패키지 명명 표준

추가 도움이 필요하신가요?

기술 향상
교육 살펴보기
새로운 기능 우선 가져오기
Microsoft Insider 참가

이 정보가 유용한가요?

소중한 의견에 감사드립니다.

피드백을 주셔서 감사합니다. Office 지원 에이전트와 연락하는 것이 도움이 될 것 같습니다.

×