如果 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
用户:不适用
计算机:CRMSERVER
描述:错误:Deletion Service failed to clean up table=CleanupInactiveWorkflowAssembliesProcedure 有关详细信息,请参阅位于 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。

解决方案

若要解决此问题,请通过对 <OrgName>_MSCRM 数据库运行下列脚本对 AsyncOperationBase 表执行清理操作,其中 <OrgName> 是组织实际名称的占位符。

警告:清理数据前,请注意已完成的系统作业在某些情况下还具有商业价值,需要储存较长时间,因此请先与组织的管理人员讨论。

受影响的系统作业:
  • SQM 数据集合。- 为客户体验计划收集数据的软件质量标准。
  • 更新合同状态 SQL 作业。该作业每天在午夜运行一次。此外,该作业会将过期合同的状态设置为“过期”。
  • 组织全文目录索引 - 在数据库中填充全文索引,用于搜索 CRM 中的知识库文章。

如果定期作业已被取消,则会将其删除。

注意
  • 此 KB 文章中的 SQL 脚本仅为一次性工作。 您可以将其添加为 SQL 作业,按每晚、每周或每月定期运行。您的 CRM 运行时,需要根据您的业务需要按周应用此 KB 文章,或通过编写自定义 BULK DELETE 作业应用解决方案(请参考我们有关 BulkDeleteRequest.QuerySet 属性、BulkDeleteRequest 类和删除顺序的 CRM SDK 文档)。
  • 确保工作流的 AsyncOperation 记录和相应的记录已从 WorkflowLogBase 对象中删除。
  • 确保已删除所有相应的 bulkdeletefailure 记录。
  • 如果类型状态代码为 3 和类型状态代码为 30 或 32,确保仅删除下列 Async 操作类型:
    • 工作流扩展任务 (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

--Drop the Index on AsyncOperationBase

DROP INDEX AsyncOperationBase.CRM_AsyncOperation_CleanupCompleted


提高删除脚本的性能

  • 若要提高 Microsoft CRM 整体性能,请安排在 Microsoft CRM 的非高峰时段运行 Microsoft CRM 删除服务。默认情况下,该服务在 Microsoft CRM 安装时运行。但是,可以在下午 10:00 而不是默认时间运行该服务。为此,请使用 Microsoft CRM ScaleGroup 作业编辑器。有关更多信息,请访问下面的 MSDN 网站:
    http://code.msdn.microsoft.com/ScaleGroupJobEditor/Release/ProjectReleases.aspx?ReleaseId=676
    注意此操作不直接影响脚本的性能。
  • 若要提高本文中删除脚本的性能,并且改善运行相似删除的 Microsoft CRM DeletionService 代码,请在运行本文中的删除脚本前,将以下三个索引添加到 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 Server 日志。对于 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 AsyncOperation 实体占用了 [Org]_MSCRM 数据库的绝大部分,并且引起 Microsoft Dynamics CRM 性能下降。
有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
957871 在 Microsoft Dynamics CRM 4.0 中,工作流扩展任务记录使 MSCRM 数据库中的 AsyncOperationBase 表变得太大
有关软件更新术语的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
824684 有关用于描述 Microsoft 软件更新标准术语的介绍
有关 Microsoft Business Solutions CRM 软件修补程序和更新软件包术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
887283 Microsoft Business Solutions CRM 软件修补程序和更新软件包命名标准

属性

文章编号: 968520 - 最后修改: 2009年9月24日 - 修订: 7.1
这篇文章中的信息适用于:
  • Microsoft Dynamics CRM 4.0
关键字:?
kbfix kbautohotfix kbexpertiseinter kbsurveynew kbmbsmigrate kbqfe kbhotfixserver KB968520
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

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