當您執行 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 網站:注意 此動作不會直接影響指令碼的效能。
- 若要改善本文中的刪除指令碼效能,並改善執行類似刪除的「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 和更新套件命名標準