Desempenho for lento se a tabela AsyncOperationBase ficar demasiado grande no Microsoft Dynamics CRM 4.0

Traduções de Artigos Traduções de Artigos
Artigo: 968520 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Quando executa o Microsoft Dynamics CRM 4.0, a tabela AsyncOperationBase aumenta seja muito grande. Quando a tabela contém milhares de registos, o desempenho é lento.

Além disso, os erros semelhantes aos seguintes são registados no servidor do Microsoft Dynamics CRM no registo de eventos de aplicações:
Tipo de evento: erro
Origem do evento: MSCRMDeletionService
Categoria do evento: nenhum
ID do evento: 16387
Data: 2009/01/26
Hora: 11:41:54 AM
Utilizador: N/d
Computador: SERVIDOR_CRM
Descrição: Erro: o serviço de eliminação não conseguiu limpar tabela = CleanupInactiveWorkflowAssembliesProcedure para obter mais informações, consulte Centro de ajuda e suporte em http://go.microsoft.com/fwlink/events.asp.

Resolução

Para resolver este problema, execute uma limpeza da tabela AsyncOperationBase executando o seguinte script contra o <OrgName> base de dados _MSCRM, onde <orgname> é um marcador para o nome real da sua organização.

Aviso: tarefas antes de limpar os dados, nota que concluída sistema têm valor de negócio em alguns casos e necessitam de ser armazenados durante um longo período, por isso, consulte primeiro a discutir com administração pessoal o orgnization.

Tarefas do sistema afectado.
  • Recolha de dados do SQM. Métrica de qualidade - software que recolhe dados para o cliente detecta um programa.
  • Tarefa SQL de actualização contrato estados. Esta tarefa é executada uma vez por dia à meia-noite. Esta tarefa define os contratos expirados num estado de expirado.
  • Organização completa o índice de catálogo de texto - preenche índice em texto completo na base de dados para procurar artigos da kb no CRM.

Se tem sido canceladas tarefas periódicas serão removidos.

notas
  • O script SQL neste artigo KB é apenas esforço único. Pode adicionar isto como uma tarefa SQL para ser executada numa base periódica numa base efectuadas durante a noite, semanal ou mensal. conforme executa a CRM , terá um aplica neste artigo KB numa base semanal dependendo da sua empresa necessita ou aplicar a solução writting personalizadas BULK DELETE tarefas (por favor consulte nossa documentação SDK do CRM na propriedade BulkDeleteRequest.QuerySet, classe BulkDeleteRequest e ordem de eliminação).
  • Certifique-se que os registos AsyncOperation de fluxos de trabalho e os registos correspondentes são eliminados do objecto WorkflowLogBase .
  • Certifique-se de que são eliminados todos os registos bulkdeletefailure correspondente.
  • Certifique-se de que apenas os seguintes assíncrona operação tipos são eliminados se o código de estado dos tipos é 3 e o código de estado dos tipos é 30 ou 32:
    • Tarefas de expansão de fluxo de trabalho (1)
    • Recolher dados do 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 eliminação

  • Para melhorar o desempenho global do Microsoft CRM, agende serviço de eliminação do Microsoft CRM para executar durante as horas de menor volume de trabalho para o Microsoft CRM. Por predefinição, o serviço é executado na altura em que foi instalado o Microsoft CRM. No entanto, pode executar o serviço para ser executado às 10: 00 em vez de ao tempo predefinido. Para o fazer, utilize o Editor de projecto do Microsoft CRM ScaleGroup. Para mais informações, visite o seguinte site da Web MSDN:
    http://code.msdn.microsoft.com/ScaleGroupJobEditor/Release/ProjectReleases.aspx?ReleaseId=676
    Nota Esta acção não afecta directamente o desempenho do script.
  • Para melhorar o desempenho dos scripts de eliminação deste artigo e para melhorar o código de Microsoft CRM DeletionService que é executado elimina semelhante, adicione os índices three seguintes na base de dados OrganizationName_MSCRM antes de executar o script de eliminação deste 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
    
    NOTA: se não adicionar estes índices, o script de eliminação pode demorar horas para ser executado.
  • Pare o serviço do Microsoft assíncrona processamento CRM enquanto executa este script.
  • OPTIONAL: reconstruir índices seguintes e actualizar 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: Actualizar estatísticas com verificação total em todas as tabelas envolvidas através desta consulta a abaixo comandos (preferencialmente em Desactivar horas 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 da base de dados MSCRM para simples evitar o excesso de geração de registos do servidor SQL. Para SQL server 2005, início de sessão para o Microsoft SQL Server Management Studio como administrador, botão direito do rato clique em base de dados <org_name> _MSCRM, clique em Propriedades , clique em Opções e clique em Modelo de recuperação . Marcar simples e, em seguida, clique em OK . Depois de executar este script a hora inicial, o modelo de recuperação do <org_name> _MSCRM base de dados deve ser mudado para FULL para o melhor modelo de recuperação de dados.




Para determinar o número de registos seja eliminada pelo script neste artigo, execute o seguinte script contagem na base 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ção

Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
954929A entidade AsyncOperation consome uma parte significativa da base de dados [organização] _MSCRM e provoca um fraco desempenho no Microsoft Dynamics CRM
Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
957871Os registos de tarefas de expansão de fluxo de trabalho fazer com que a tabela AsyncOperationBase na base de dados MSCRM aumentar demasiado grande no Microsoft Dynamics CRM 4.0
Para obter mais informações sobre a terminologia de actualização de software, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
824684Descrição da terminologia padrão utilizada para descrever actualizações de software da Microsoft
Para obter mais informações sobre a Microsoft Business Solutions CRM hotfix e atualização pacote terminologia de software, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
887283Padrões de nomenclatura do pacote de Microsoft Business Solutions CRM software hotfix e atualização

Propriedades

Artigo: 968520 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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