文章編號: 968520 - 上次校閱: 2009年9月24日 - 版次: 7.1

如果 Microsoft Dynamics CRM 4.0 中的 AsyncOperationBase 資料庫過大,則會使效能變慢

可以下載 Hotfix下載 Hotfix
檢視和要求下載 hotfix
系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

徵狀

當您執行 Microsoft Dynamics CRM 4.0 時,AsyncOperationBase 資料表過大。當資料表包含數百萬筆記錄時,效能就會變慢。

此外,應用程式事件記錄檔的 Microsoft Dynamics CRM 伺服器上會記錄類似下列的錯誤:
事件類型:錯誤
事件來源:MSCRMDeletionService
事件類別:無
事件識別碼: 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 資料集合。- 收集客戶經驗計劃資料的軟體品質標準。
  • 更新合約狀態 SQL 工作。此工作會在每天午夜執行一次。此工作會將過期的合約狀態設為「已過期」。
  • 組織全文類別目錄索引- 在 DB 中填入全文檢索索引,以在 CRM 中搜尋知識庫文件。

若已取消週期性工作,則會移除這些工作。

注意
  • 知識庫文件中的 SQL 指令碼是只需設定一次的工作。 您可以將 SQL 指令碼新增為以每晚、每週或每月為基礎而執行的週期性 SQL 工作。執行 CRM 時,您必須依據您的業務需求每週套用一次此知識庫文件,或撰寫自訂的 BULK DELETE 工作來套用解決方案 (請參閱有關 BulkDeleteRequest.QuerySet 屬性、BulkDeleteRequest 類別與刪除順序的 CRM SDK 文件)。
  • 確定已從 WorkflowLogBase 物件中刪除工作流程的 AsyncOperation 記錄以及對應的記錄。
  • 確定已刪除所有對應的 bulkdeletefailure 記錄。
  • 如果類型的州/省代碼為 3 且類型的狀態碼為 30 或 32,請確定只刪除下列非同步處理作業類型:
    • 工作流程擴充工作 (1)
    • 收集 SQM 資料 (9)
    • PersistMatchCode (12)
    • FullTextCatalogIndex (25)
    • UpdateContractStates (27)
    • 工作流程 (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
where 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
where W.AsyncOperationId = d.AsyncOperationId
            
delete BulkDeleteFailureBase From BulkDeleteFailureBase B, @DeletedAsyncRowsTable d
where B.AsyncOperationId = d.AsyncOperationId
 
delete AsyncOperationBase From AsyncOperationBase A, @DeletedAsyncRowsTable d
where A.AsyncOperationId = d.AsyncOperationId            
 
delete @DeletedAsyncRowsTable
end
 
commit
end

--丟棄 AsyncOperationBase 上的索引

DROP INDEX AsyncOperationBase.CRM_AsyncOperation_CleanupCompleted


改善刪除指令碼的效能

  • 若要改善整體的 Microsoft CRM 效能,請將 Microsoft CRM Deletion Service 排定在 Microsoft CRM 的離峰時間執行。根據預設,該服務會在安裝 Microsoft CRM 時執行。但是,您可以在下午 10:00 (而非預設時間) 執行該服務。若要執行此操作,請使用 Microsoft CRM ScaleGroup 工作編輯器。如需詳細資訊,請造訪下列 MSDN 網站:
    http://code.msdn.microsoft.com/ScaleGroupJobEditor/Release/ProjectReleases.aspx?ReleaseId=676 (http://code.msdn.microsoft.com/ScaleGroupJobEditor/Release/ProjectReleases.aspx?ReleaseId=676)
    注意 此動作不會直接影響指令碼的效能。
  • 若要改善本文中的刪除指令碼效能,並改善執行類似刪除的「Microsoft CRM 刪除服務」程式碼,請在執行本文的刪除指令碼之前,將下列三個索引新增至 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
    
    注意 如果您不新增這些索引,刪除指令碼可能會花費幾小時的執行時間。
  • 在執行此指令碼時請停止「Microsoft CRM 非同步處理服務」。
  • 選用: 重新建置下列索引並更新統計資料:
    -- 重新建置索引並更新 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 資料庫,依序按一下 [內容][選項],然後按一下 [復原模式]。標記 [簡單],然後按一下 [確定]。首次執行此指令碼之後,<org_name>_MSCRM 資料庫復原模式應該會切換回最佳的資料復原模式「完整」。




若要判斷本文中由指令碼刪除的記錄數目,請針對 OrganizationName_MSCRM 資料庫執行下列計數指令碼:
Select Count(AsyncOperationId)
from AsyncOperationBase WITH (NOLOCK)
where OperationType in (1, 9, 12, 25, 27, 10) 
AND StateCode = 3 AND StatusCode IN (30,32)

其他相關資訊

如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
954929? (http://support.microsoft.com/kb/954929/ ) AsyncOperation 實體會耗用大量的 [Org]_MSCRM 資料庫資源,並導致 Microsoft Dynamics CRM 的效能不佳
如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
957871? (http://support.microsoft.com/kb/957871/ ) 「工作流程擴充工作」記錄會造成 MSCRM 資料庫的 AsyncOperationBase 資料表在 Microsoft Dynamics CRM 4.0 中變太大
如需有關軟體更新術語的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
824684? (http://support.microsoft.com/kb/824684/TW/ ) 說明 Microsoft 軟體更新的標準術語
如需有關 Microsoft Business Solutions CRM 軟體 Hotfix 和更新套件術語的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
887283? (http://support.microsoft.com/kb/887283/ ) Microsoft Business Solutions CRM 軟體 Hotfix 和更新套件命名標準

這篇文章中的資訊適用於:
  • Microsoft Dynamics CRM 4.0
關鍵字:?
kbfix kbautohotfix kbexpertiseinter kbsurveynew kbmbsmigrate kbqfe kbhotfixserver KB968520
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。