您目前已離線,請等候您的網際網路重新連線

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

徵狀
當您執行 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.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 AsyncOperationBasewhere 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 dwhere W.AsyncOperationId = d.AsyncOperationId            delete BulkDeleteFailureBase From BulkDeleteFailureBase B, @DeletedAsyncRowsTable dwhere B.AsyncOperationId = d.AsyncOperationId delete AsyncOperationBase From AsyncOperationBase A, @DeletedAsyncRowsTable dwhere A.AsyncOperationId = d.AsyncOperationId             delete @DeletedAsyncRowsTableend commitend--丟棄 AsyncOperationBase 上的索引DROP INDEX AsyncOperationBase.CRM_AsyncOperation_CleanupCompleted


改善刪除指令碼的效能

  • 若要改善整體的 Microsoft CRM 效能,請將 Microsoft CRM Deletion Service 排定在 Microsoft CRM 的離峰時間執行。根據預設,該服務會在安裝 Microsoft CRM 時執行。但是,您可以在下午 10:00 (而非預設時間) 執行該服務。若要執行此操作,請使用 Microsoft CRM ScaleGroup 工作編輯器。如需詳細資訊,請造訪下列 MSDN 網站:注意 此動作不會直接影響指令碼的效能。
  • 若要改善本文中的刪除指令碼效能,並改善執行類似刪除的「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])GOCREATE 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 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 資料庫,依序按一下 [內容][選項],然後按一下 [復原模式]。標記 [簡單],然後按一下 [確定]。首次執行此指令碼之後,<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 知識庫」中的文件:
954929AsyncOperation 實體會耗用大量的 [Org]_MSCRM 資料庫資源,並導致 Microsoft Dynamics CRM 的效能不佳
如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
957871 「工作流程擴充工作」記錄會造成 MSCRM 資料庫的 AsyncOperationBase 資料表在 Microsoft Dynamics CRM 4.0 中變太大
如需有關軟體更新術語的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
824684 說明 Microsoft 軟體更新的標準術語
如需有關 Microsoft Business Solutions CRM 軟體 Hotfix 和更新套件術語的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
887283Microsoft Business Solutions CRM 軟體 Hotfix 和更新套件命名標準
內容

文章識別碼:968520 - 最後檢閱時間:09/24/2009 16:30:51 - 修訂: 7.1

  • Microsoft Dynamics CRM 4.0
  • kbfix kbautohotfix kbexpertiseinter kbsurveynew kbmbsmigrate kbqfe kbhotfixserver KB968520
意見反應