Risoluzione dei problemi di prestazioni nelle configurazioni di ER

Questo articolo spiega come trovare e risolvere i problemi di prestazioni nelle configurazionidi Creazione di report elettronici (ER).

In genere, l'analisi delle prestazioni consiste in diversi passaggi.

  1. Raccolta dei dati.
  2. Analisi dei dati raccolti.
  3. Sulla base dei risultati dell'analisi, utilizzare le configurazioni ER per apportare modifiche oppure decidere di raccogliere più dati.

Risoluzione dei problemi

Analizzare il tempo di esecuzione

Il tempo di esecuzione può dipendere da fattori imprevedibili, quali altre attività in esecuzione nello stesso ambiente e la memorizzazione nella cache che utilizza i dati quando vengono chiamati per la prima volta. Pertanto, è necessario ripetere l'esecuzione e la misurazione più volte.

A volte, i problemi di prestazioni non sono causati da una configurazione del formato ER utilizzata per i rapporti. Sono invece causati dal codice X++ utilizzato per aprire quella configurazione del formato ER.

  1. Osservare il tempo di esecuzione del report, riportato nel Centro azioni o nel registro eventi.

  2. Confrontare il tempo di esecuzione del report con il tempo di esecuzione totale nello scenario.

  3. Se il tempo di esecuzione del report è molto inferiore al tempo di esecuzione totale, considerare la quantità di dati elaborati dal report:

    • Se il report elabora una piccola quantità di dati, il problema potrebbe riguardare il tempo di caricamento della configurazione.
    • Se il report elabora una grande quantità di dati, il problema potrebbe riguardare la preelaborazione di X++. Usare il parser di traccia per analizzare questo caso.

    Per altri casi, vedere le sezioni successive.

  4. Eseguire più test che coinvolgono diverse quantità di dati per determinare in che modo il tempo di esecuzione dipende dalla quantità di dati.

Analizzare le tracce con il parser di traccia

Preparare un piccolo esempio o raccogliere diverse tracce durante le parti casuali della generazione del rapporto.

Quindi, nel parser di traccia, esegui un'analisi dal basso verso l'alto standard e rispondi alle seguenti domande:

  • Quali sono i metodi migliori in termini di consumo di tempo?
  • Quanta parte del tempo totale utilizzano questi metodi?

Rispondere alle stesse domande per le query.

Se si nota che i metodi sono preceduti dal prefisso "ER", passare alla sezione successiva.

Se i metodi o le query hanno avuto origine nella suite di applicazioni, prendere in considerazione le ottimizzazioni generiche (ad esempio la creazione di indici).

Analizzare il numero di chiamate. Se il numero è significativamente più alto del previsto, prendere in considerazione la memorizzazione nella cache dei nodi corrispondenti della configurazione.

Analizzare le chiamate al database

Preparare un esempio che contenga una piccola quantità di dati, in modo da poter raccogliere una traccia ER.

Quindi, aprire la traccia nella soluzione di progettazione del mapping del modello ER e guardare in fondo alla pagina. Rispondere alle seguenti domande:

Analizzare le tracce di PerfView

PerfView è uno strumento per sviluppatori esperti. Per informazioni più dettagliate sui seguenti passaggi, vedere Nozioni di base sull'indagine in tempo reale.

  1. Raccogliere una traccia utilizzando il tempo di thread.

  2. Includere solo gli stack che usano runUnattended, per filtrare solo il thread che ha l'esecuzione della configurazione. (Aggiungere runUnattended alla casella di input IncPats.)

  3. Ridurre tutta la CPU, la rete e il tempo bloccato.

  4. Caricare le impostazioni ER predefinite per PerfView.

  5. Selezionare ER>Altre impostazioni predefinite.

  6. Guardare i nomi:

    • Probabilmente verrà mostrato il codice della piattaforma che consuma più tempo.

    • È possibile toccare due volte (o fare doppio clic) ed esaminare l'elenco callees.

      Se si trovano classi con il prefisso "ERExpression" e se queste sono funzioni correlate a formule, è possibile inferire il nome della funzione in base al nome della classe e guardare il repository ER per visualizzare gli attributi.

Correzioni

  • Se si nota che la maggior parte del tempo della CPU viene consumato dalle query, provare a ridurre il numero di query:

    • Rivedere la traccia ER per query duplicate.
    • Guardare quanti record vengono recuperati e valutare quanti dati dovrebbero essere teoricamente recuperati.
  • Se la maggior parte del tempo della CPU viene consumato dalle funzioni utilizzate, provare a trovare il punto nella configurazione che utilizza la maggior parte delle risorse.

  • Se la maggior parte del tempo della CPU viene consumato dalle funzioni di raccolta dati, considerare la possibilità di sostituirle con SQL group by sul lato di mapping del modello.

Raccolta dei dati

A seconda dell'ambiente, esistono diversi modi per raccogliere i dati disponibili:

  • Ottenere il tempo di esecuzione totale:

    • Dal Centro azioni
    • Dal registro degli eventi
  • Creare un profilo per l'esecuzione:

    • Usando gli strumenti ER
    • Usando il parser di traccia
    • Usando PerfView

Raccolta dei dati in un ambiente di produzione

A volte, i problemi possono essere riprodotti solo in un ambiente di produzione. I dati possono essere raccolti in uno dei modi indicati di seguito:

Raccolta dei dati in un ambiente di sviluppo

Oltre agli strumenti che possono essere utilizzati in un ambiente di produzione, esistono diversi strumenti che è possibile utilizzare in un ambiente di sviluppo:

  • Registro eventi (Microsoft-Dynamics-ElectronicReporting). Questo registro può fornire il tempo di esecuzione totale.
  • Strumenti .NET comuni, come PerfView.

Inoltre, un ambiente di sviluppo offre maggiore flessibilità per sperimentare. Ad esempio, è possibile disattivare parti dei report per vedere come viene influenzato il tempo di esecuzione.

Strumenti

Tempo di esecuzione nel Centro azioni

ER può mostrare il tempo di esecuzione della configurazione nel Centro azioni. Questa opzione funziona solo per un utente specifico e un'azienda specifica e solo per sessioni interattive. Per rendere disponibile questa funzione, seguire questi passaggi.

  1. Vai a Amministrazione organizzazione>Creazione di report elettronici>Configurazioni.
  2. Nella pagina Configurazioni, nel Riquadro azioni, nella scheda Configurazioni, nel gruppo Impostazioni avanzate, selezionare Parametri utente.
  3. Nella finestra di dialogo Parametri utente, impostare l'opzione Mostra tempo di generazione file su .

Tempo di esecuzione nel registro eventi

  1. Aprire il visualizzatore eventi di Windows.
  2. In Registri applicazioni e servizi, aprire Microsoft-Dynamics-ElectronicReporting/Operativo.
  3. Cercare gli eventi FormatMapingRun in cui EventID=2, poiché questi eventi contengono informazioni sul tempo trascorso.

Tracce del parser di traccia

Poiché ER è implementato in X++, è possibile usare strumenti X++ comuni per analizzare le prestazioni. Per ulteriori informazioni, vedere Acquisire le tracce usando il parser di traccia.

Esistono alcune limitazioni a questo approccio. Poiché parte di ER è implementata in C#, non tutti i dettagli saranno disponibili. Tuttavia, è possibile visualizzare i dettagli sull'utilizzo dei dati. Inoltre, lunghe esecuzioni di report possono superare i limiti di archiviazione delle tracce.

Tracce ER

ER è in grado di raccogliere le proprie tracce e dispone di strumenti di visualizzazione e analisi per tali tracce. Per altre informazioni, vedi Tenere traccia dell'esecuzione dei formati di creazione di report elettronici per risolvere i problemi di prestazioni.

PerfView

Poiché sia X++ che ER sono implementati sulla piattaforma .NET, è possibile usare strumenti .NET comuni. Ad esempio, puoi utilizzare lo strumento gratuito PerfView.

È anche possibile raccogliere dati dalla riga di comando. Ad esempio, lo script di Windows PowerShell seguente raccoglie il tempo di esecuzione fino all'interruzione dell'esecuzione di qualsiasi formato nel computer.

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

Esistono alcune limitazioni a questo approccio. È necessario disporre dell'accesso al computer. Inoltre, occorre essere uno sviluppatore esperto, perché la curva di apprendimento è particolarmente ripida.

Apportare modifiche

Usare la memorizzazione nella cache

Sebbene la memorizzazione nella cache riduca la quantità di tempo necessaria per recuperare nuovamente i dati, ha un costo significativo in termini di memoria. Usare la memorizzazione nella cache nei casi in cui la quantità di dati recuperati non è molto grande. Per ulteriori informazioni e un esempio che mostra come utilizzare la memorizzazione nella cache, vedere Migliorare il mapping del modello in base alle informazioni della traccia di esecuzione.

Ridurre il volume dei dati recuperati

È possibile ridurre il consumo di memoria per la memorizzazione nella cache limitando il numero di campi nei record di una tabella dell'applicazione che si recupera in fase di esecuzione. In questo caso, recupererai solo quei valori di campo di una tabella dell'applicazione di cui hai bisogno nel mapping di modello ER. Gli altri campi in quella tabella non verranno recuperati. Pertanto, il volume di memoria necessario per memorizzare nella cache i record recuperati viene ridotto. Per ulteriori informazioni, vedi Migliorare le prestazioni delle soluzioni ER riducendo il numero di campi della tabella recuperati in fase di esecuzione.

Usare un campo calcolato memorizzato nella cache e parametrizzato

A volte, i valori devono essere cercati ripetutamente. Gli esempi includono nomi di account e numeri di conto. Per risparmiare tempo, è possibile creare un campo calcolato con parametri al livello più alto, quindi aggiungere il campo alla cache.

Si consiglia di utilizzare questo approccio solo quando la dimensione dei dati memorizzati nella cache è ridotta. Per ulteriori informazioni, vedere Migliorare le prestazioni delle soluzioni ER aggiungendo origini dati CAMPO CALCOLATO parametrizzate.

Usare un'origine dati JOIN

Un'origine dati JOIN permette di recuperare più record connessi tramite un'unica query. Non è necessario utilizzare una query separata per recuperare ogni record connesso. Ad esempio, se si dispone di 1.000 righe e si recuperano i dati dell'articolo per ogni riga per relazione, si avranno 1.001 query (= 1.000 + 1). Se si usa un'origine dati JOIN, sarà sufficiente un'unica query per recuperare gli stessi dati. Per maggiori informazioni, vedere Usare le origini dati JOIN nei mapping di modello ER per ottenere dati da più tabelle dell'applicazione.

Usare la funzione FILTER anziché la funzione WHERE

La funzione FILTER esegue condizioni su SQL Server, mentre la funzione WHERE recupera tutti i dati dall'elenco, un record alla vota, e applica la condizione per ciascun record. Ad esempio, si desidera selezionare un record su 1.000 record. Se si usa WHERE, verranno recuperati tutti i 1.000 record. Se invece si usa FILTER, verrà recuperato un singolo record. FILTER può anche usare gli indici sul lato database.

Utilizzo delle funzioni dei dati raccolti o di un'origine dati accumulata

Se la configurazione ha un componente group by che riepiloga i dati precedentemente recuperati per report, il componente recupererà nuovamente tutti i dati. Utilizzando le funzioni dei dati raccolti, si abilite ER ad accumulare dati durante il primo recupero. Per ulteriori informazioni, vedere Configurare il formato ER per eseguire il conteggio e la sommatoria.

Riscrivere parti della configurazione in X++

ER supporta i metodi di chiamata di tabelle e classi, incluse le estensioni. Considerare la possibilità di riscrivere parti del mapping del modello in X++ per migliorare le prestazioni.

ER può utilizzare dati dalle seguenti origini:

  • Classi (origini dati oggetto e classe)
  • Tabelle (origini dati tabella e record di tabella)

L'API ER fornisce inoltre un modo per inviare dati precalcolati dal codice chiamante. La suite di applicazioni contiene numerosi esempi di questo approccio.