Partilhar via


Resolução de problemas de desempenho em configurações de ER

Este tópico explica como encontrar e resolver problemas de desempenho em configurações de Relatórios eletrónicos (ER).

Tipicamente, a investigação de desempenho consiste em vários passos.

  1. Recolher dados.
  2. Analisar os dados recolhidos.
  3. Com base nos resultados da análise, utilizar configurações de ER para fazer alterações ou decidir recolher mais dados.

Resolução de Problemas

Analisar o tempo de execução

O tempo de execução pode depender de fatores imprevisíveis, como outras tarefas que estão em execução no mesmo ambiente e a colocação em cache que utiliza dados quando estes são chamados pela primeira vez. Assim, deve repetir a execução e a medição várias vezes.

Às vezes, os problemas de desempenho não são causados por uma configuração de formato de ER que é utilizada para os relatórios. Em vez disso, são causados pelo código X++ que é utilizado para abrir a configuração de formato de ER.

  1. No Centro de ação ou no registo de eventos, veja o tempo de execução do relatório.

  2. Compare o tempo de execução do relatório com o tempo total de execução no cenário.

  3. Se o tempo de execução do relatório for muito inferior ao tempo total de execução, considere a quantidade de dados que o relatório processa:

    • Se o relatório processar uma pequena quantidade de dados, o problema pode envolver o tempo de carregamento da configuração.
    • Se o relatório processar uma grande quantidade de dados, o problema pode envolver o pré-processamento de X++. Utilize o Parser de rastreio para analisar este caso.

    Para outros casos, consulte as secções seguintes.

  4. Execute vários testes que envolvam diferentes quantidades de dados para determinar como o tempo de execução depende da quantidade de dados.

Analisar rastreios do Parser de rastreio

Prepare um pequeno exemplo ou recolha vários rastreios durante partes aleatórias da geração do relatório.

Em seguida, em Parser de rastreio, faça uma análise padrão de baixo para cima e responda às seguintes perguntas:

  • Quais são os principais métodos em termos de consumo de tempo?
  • Que parte do tempo total estes métodos utilizam?

Responda às mesmas perguntas para consultas.

Se vir que os métodos têm o prefixo "ER", avance para a secção seguinte.

Se vir que os métodos ou consultas originados no conjunto de aplicações, considere otimizações genéricas (por exemplo, crie índices).

Analise o número de chamadas. Se o número for significativamente superior ao esperado, considere colocar em cache os nós correspondentes da configuração.

Analisar chamadas de base de dados

Prepare um exemplo que tenha uma pequena quantidade de dados, para que possa recolher um rastreio de ER.

Em seguida, abra o rastreio no estruturador de mapeamento de modelos de ER e observe a parte inferior da página. Responda às seguintes perguntas:

Analisar rastreios de PerfView

PerfView é uma ferramenta para programadores experientes. Para obter informações mais detalhadas sobre os seguintes passos, consulte Noções básicas de investigação do tempo de relógio.

  1. Recolha um rastreio utilizando a hora de thread.

  2. Inclua apenas pilhas que utilizam runUnattended para filtrar apenas o thread que tenha execução da configuração. (Adicione runUnattended à caixa de entrada IncPats.)

  3. Dobre toda a CPU, a rede e o tempo bloqueado.

  4. Carregue as Predefinições de ER para PerfView.

  5. Selecione ER > Outra predefinição.

  6. Veja os nomes:

    • Provavelmente verá o código da plataforma que consome mais tempo.

    • Pode fazer duplo toque (ou clicar duas vezes) e subir até funções invocadas.

      Se encontrar classes que tenham o prefixo "ERExpression" e se forem funções relacionadas com fórmulas, poderá supor o nome da função com base no nome da classe e poderá analisar o repositório de ER para ver os atributos.

Correções

  • Se vir que as consultas consomem a maior parte do tempo da CPU, tente reduzir o número de consultas:

    • Reveja os rastreios de ER para consultas duplicadas.
    • Veja quantos registos são obtidos e avalie quantos dados devem teoricamente ser obtidos.
  • Se vir que a maior parte do tempo da CPU é consumido pelas funções que são utilizadas, tente encontrar o local na configuração que consome mais recursos.

  • Se vir que a maior parte do tempo da CPU é consumido por funções de recolha de dados, considere substituí-las por SQL group by no lado do mapeamento do modelo.

Recolha de dados

Dependendo do ambiente, existem várias formas de recolher os dados disponíveis:

  • Obtenha o tempo total de execução:

    • A partir do Centro de Ação
    • A partir do registo de eventos
  • Perfile a execução:

    • Através de ferramentas de ER
    • Através do Parser de rastreio
    • Através do PerfView

Recolha de dados num ambiente de produção

Às vezes, os problemas só podem ser reproduzidas num ambiente de produção. Os dados podem ser recolhidos das seguintes formas:

Recolha de dados num ambiente de desenvolvimento

Além das ferramentas que podem ser utilizadas num ambiente de produção, existem várias ferramentas que pode utilizar num ambiente de desenvolvimento:

  • Registo de eventos (Microsoft-Dynamics-ElectronicReporting). Este registo pode dar-lhe o tempo total de execução.
  • Ferramentas .NET comuns, como PerfView.

Além disso, um ambiente de desenvolvimento dá-lhe mais flexibilidade para experimentar. Por exemplo, pode desativar partes de relatórios para ver como o tempo de execução é afetado.

Ferramentas

Tempo de execução no Centro de Ação

ER pode mostrar o tempo de execução da configuração no Centro de Ação. Esta opção funciona apenas para um utilizador específico e uma empresa específica, e apenas para sessões interativas. Para que esta funcionalidade fique disponível, siga estes passos.

  1. Vá para Administração da organização > Relatórios eletrónicos > Configurações.
  2. Na página Configurações, no Painel de Ações, no separador Configurações, no grupo Definições avançadas, selecione Parâmetros de utilizador.
  3. Na caixa de diálogo Parâmetros do utilizador, defina a opção Mostrar tempo de geração de ficheiro como Sim.

Tempo de execução no registo de eventos

  1. Abra o Visualizador de eventos do Windows.
  2. Em Registos de Aplicações e Serviços, abra Microsoft-Dynamics-ElectronicReporting/Operacional.
  3. Procure eventos FormatMapingRun onde EventID=2, porque estes eventos contêm a informação sobre o tempo decorrido.

Rastreios do Parser de rastreio

Como ER está implementado em X++, pode utilizar ferramentas X++ comuns para analisar o desempenho. Para obter mais informações, consulte Obter rastreios utilizando o Parser de rastreio.

Há algumas limitações para esta abordagem. Como parte do ER é implementado em C#, nem todos os detalhes estarão disponíveis. No entanto, pode ver os detalhes de utilização de dados. Além disso, longas execuções de relatórios podem exceder as limitações de armazenamento de rastreios.

Rastreios de ER

ER pode recolher os seus próprios rastreios e tem ferramentas de visualização e análise para esses rastreios. Para obter mais informações, consulte Rastrear a execução de formatos de ER para resolver problemas de desempenho.

PerfView

Como X++ e ER são implementados na plataforma .NET, pode utilizar ferramentas .NET comuns. Por exemplo, pode utilizar a ferramenta PerfView gratuita.

Também pode recolher dados da linha de comandos. Por exemplo, o seguinte script do Windows PowerShell recolhe o tempo de execução até que qualquer execução de formato seja interrompida na máquina.

c:\programs\PerfView collect "e:\traces\$(date -format "ddMMyyyy_hhmm").etl" `
    -CircularMB:20000 -ThreadTime `
    -NoNGenRundown `
    -StopOnEtwEvent:Microsoft-Dynamics-ElectronicReporting/FormatMappingRun/Stop

Há algumas limitações para esta abordagem. Tem de ter acesso administrativo à máquina. Além disso, tem de ser um programador experiente, porque há uma curva de aprendizagem acentuada.

Fazer alterações

Utilizar colocação em cache

Embora a colocação em cache reduza a quantidade de tempo necessário para obter novamente dados, consome memória. Utilize a colocação em cache em casos em que a quantidade de dados obtidos não é muito grande. Para obter mais informações e um exemplo que mostre como utilizar a colocação em cache, consulte Melhorar o mapeamento do modelo com base em informações do rastreio de execução.

Utilizar um campo calculado parametrizado e colocado em cache

Às vezes, os valores têm de ser analisados repetidamente. Os exemplos incluem nomes de contas e números de contas. Para ajudar a economizar tempo, pode criar um campo calculado que tenha parâmetros no nível superior e adicionar o campo à cache.

Recomendamos que utilize esta abordagem apenas quando o tamanho dos dados em cache for pequeno. Para obter mais informações, consulte Melhorar o desempenho das soluções de ER adicionando origens de dados de CAMPO CALCULADO parametrizadas.

Utilizar uma origem de dados JOIN

Uma origem de dados JOIN permite que uma consulta obtenha vários registos ligados. Não é necessário utilizar uma consulta separada para obter cada registo ligado. Por exemplo, se tiver 1.000 linhas e obtiver dados de itens para cada linha por relação, terá 1.001 consultas (= 1.000 + 1). Se utilizar uma origem de dados JOIN, utilizará apenas uma consulta para obter os mesmos dados. Para obter mais informações, consulte Utilizar origens de dados JOIN em mapeamentos de modelos de ER para obter dados de várias tabelas de aplicação.

Utilizar a função FILTER em vez da função WHERE

A função FILTER executa as condições no SQL Server, enquanto a função WHERE obtém todos os dados da lista, um registo de cada vez, e aplica a condição a cada registo. Por exemplo, quer selecionar um registo de 1.000 registos. Se utilizar WHERE, todos os 1.000 registos serão obtidos. No entanto, se utilizar FILTER, será obtido exatamente um registo. FILTER também pode utilizar índices no lado da base de dados.

Utilizar funções de dados recolhidos ou uma origem de dados de dados acumulados

Se a sua configuração tiver um componente agrupar por que resume dados previamente obtidos por relatório, o componente irá obter todos os dados novamente. Ao utilizar funções de dados recolhidas, permite que ER acumule dados durante a primeira obtenção. Para obter mais informações, consulte ER Configurar formato para fazer contagem e soma.

Reescrever partes da configuração em X++

ER suporta métodos de chamada de tabelas e classes, incluindo extensões. Considere reescrever partes do mapeamento do modelo em X++ para ajudar a melhorar o desempenho.

ER pode consumir dados a partir das seguintes origens:

  • Classes (origens de dados objeto e classe)
  • Tabelas (origens de dados tabela e registos de tabela)

A API de ER também fornece uma forma de enviar dados pré-calculados a partir do código de chamada. O conjunto de aplicações contém inúmeros exemplos desta abordagem.