Desempenho é lento se tabela AsyncOperationBase se tornar muito grande no Microsoft Dynamics CRM 4.0

Traduções deste artigo Traduções deste artigo
ID do artigo: 968520 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Quando você executa o Microsoft Dynamics CRM 4.0, a tabela AsyncOperationBase aumenta para ser muito grande. Quando a tabela contém milhões de registros, o desempenho é lento.

Além disso, erros semelhantes aos seguintes são registrados no servidor do Microsoft Dynamics CRM no log de eventos do aplicativo:
Tipo de evento: erro
Origem do evento: MSCRMDeletionService
Categoria do evento: nenhum
IDENTIFICAÇÃO de evento: 16387
Data: 2009/01/26
Tempo: 11:41:54 AM
Usuário: N/d
Computador: SERVIDOR_CRM
Descrição: Erro: o serviço de exclusão falhou ao limpar tabela = CleanupInactiveWorkflowAssembliesProcedure para obter mais informações, consulte o Centro de Ajuda e suporte em http://go.microsoft.com/fwlink/events.asp.

Resolução

Para resolver esse problema, execute uma limpeza da tabela AsyncOperationBase executando o script a seguir em relação a <OrgName> _MSCRM, onde <orgname> é um espaço reservado para o nome real da sua organização.

Aviso: antes limpando os dados, observe que concluída sistema trabalhos têm valor comercial em alguns casos e precisam ser armazenados por um longo período, portanto, por favor discutir primeiro com a equipe de administração da sua organização.

Trabalhos de sistema afetados:
  • Coleta de dados SQM. Métrica de qualidade de software - que coleta dados para o cliente enfrentar o programa.
  • Estados do contrato de atualização SQL trabalho. Este trabalho será executado uma vez por dia à meia-noite. Este trabalho define os contratos expirados em um estado de expirado.
  • Organização total índice de catálogo de texto - preenche o índice de texto completo no banco de dados para pesquisar artigos de kb no CRM.

Se trabalhos recorrentes foram cancelados eles serão removidos.

anotações
  • O script SQL neste artigo é apenas esforço único. Você pode adicionar isso como um trabalho SQL a ser executado em uma base recorrente em uma base noturna, semanal ou mensal. como a execução CRM , você precisará de um se aplicam a este artigo em uma base semanal dependendo de sua empresa precisa, ou aplicar a solução por writting trabalhos de BULK DELETE personalizados (consulte nossa documentação do SDK do CRM na propriedade BulkDeleteRequest.QuerySet, classe BulkDeleteRequest e ordem de exclusão).
  • Certifique-se que os registros de AsyncOperation para fluxos de trabalho e os registros correspondentes são excluídos do objeto WorkflowLogBase .
  • Certifique-se que todos os registros correspondentes bulkdeletefailure são excluídos.
  • Verifique se que somente os seguintes tipos de operação de assíncrono serão excluídos se o código de estado dos tipos é 3 e o código de status dos tipos é 30 ou 32:
    • Tarefa de expansão de fluxo de trabalho (1)
    • Coletar dados SQM (9)
    • PersistMatchCode (12)
    • FullTextCatalogIndex (25)
    • UpdateContractStates (27)
    • Fluxo de trabalho (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


Melhorar o desempenho do script de exclusão

  • Para melhorar o desempenho geral do Microsoft CRM, agende o serviço de exclusão do Microsoft CRM para executar durante horários de menor movimento para o Microsoft CRM. Por padrão, o serviço é executado no momento em que Microsoft CRM foi instalado. No entanto, você pode executar o serviço seja executado às 10: 00 em vez de ao tempo padrão. Para fazer isso, use o Editor de trabalho do Microsoft CRM ScaleGroup. Para obter mais informações, visite o seguinte site da MSDN:
    http://code.msdn.microsoft.com/ScaleGroupJobEditor/Release/ProjectReleases.aspx?ReleaseId=676
    Observação Esta ação não afeta diretamente o desempenho do script.
  • Para melhorar o desempenho dos scripts de exclusão neste artigo e melhorar o código do Microsoft CRM DeletionService que executa exclusões semelhantes, adicionar os seguintes índices three para o banco de dados OrganizationName_MSCRM antes de executar o script de exclusão neste artigo:
    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
    
    Observação se você não adicionar esses índices, o script de exclusão pode levar horas para ser executado.
  • Parar o serviço processamento do Microsoft CRM assíncrona enquanto você executar esse script.
  • OPTIONAL: reconstruir os seguintes índices e atualizar estatísticas:
    -- 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
  • OPTIONAL: Atualizar estatísticas com verificação total em todas as tabelas envolvidas com esta consulta usando o abaixo comandos (preferencialmente em fora de pico):
    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
  • OPTIONAL : alterar o modelo de recuperação do banco de dados MSCRM para simples evitar o excesso de geração de logs do servidor SQL. Para SQL server 2005, logon para o Microsoft SQL Server Management Studio como administrador, direito clique em seu _MSCRM <org_name>, clique em Propriedades , clique em Opções e clique em Modelo de recuperação . Marcar simples e, em seguida, clique em OK . após executar esse script tempo inicial, o modelo de recuperação <org_name> _MSCRM banco de dados deve ser alternado para FULL para o melhor modelo de recuperação de dados.




Para determinar o número de registros a ser excluído pelo script neste artigo, execute o seguinte script contagem no banco de dados 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) 

Mais Informações

Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
954929A entidade de AsyncOperation consome uma parte significativa do banco de dados [Org] _MSCRM e causa baixo desempenho no Microsoft Dynamics CRM
Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
957871Os registros de tarefas do fluxo de trabalho expansão causar tabela AsyncOperationBase no banco de dados MSCRM para crescer muito grande no Microsoft Dynamics CRM 4.0
Para obter mais informações sobre terminologia de atualização de software, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
824684Descrição da terminologia padrão que é usada para descrever as atualizações de software
Para obter mais informações sobre terminologia para pacote de hotfix e atualização do software do Microsoft Business Solutions CRM, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
887283Padrões de nomenclatura do pacote de Microsoft Business Solutions CRM software hotfix e atualização

Propriedades

ID do artigo: 968520 - Última revisão: terça-feira, 1 de setembro de 2009 - Revisão: 7.0
A informação contida neste artigo aplica-se a:
  • Microsoft Dynamics CRM 4.0
Palavras-chave: 
kbmt kbfix kbautohotfix kbexpertiseinter kbsurveynew kbmbsmigrate kbqfe kbhotfixserver KB968520 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 968520

Submeter comentários

 

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