Beheben von Leistungsproblemen in ER-Konfigurationen
In diesem Artikel wird erläutert, wie Sie Leistungsprobleme in Konfigurationen für die elektronische Berichterstellung (EB) finden und beheben.
In der Regel besteht die Leistungsuntersuchung aus mehreren Schritten.
- Daten sammeln.
- Die gesammelten Daten analysieren.
- Verwenden Sie basierend auf den Ergebnissen der Analyse ER-Konfigurationen, um Änderungen vornehmen, oder beschließen, weitere Daten zu sammeln.
Problembehandlung
Ausführungszeit analysieren
Die Ausführungszeit kann von unvorhersehbaren Faktoren abhängen, z. B. von anderen Aufgaben, die in derselben Umgebung ausgeführt werden, und Zwischenspeichern, die beim ersten Aufruf Daten verwenden. Daher sollten Sie die Durchführung und Messung mehrmals wiederholen.
Manchmal werden Leistungsprobleme nicht durch eine ER-Formatkonfiguration verursacht, die für die Berichterstellung verwendet wird. Stattdessen werden sie durch den X++-Code verursacht, der zum Öffnen dieser ER-Formatkonfiguration verwendet wird.
Entweder im Aktionszentrum oder im Ereignisprotokoll sehen Sie sich die Ausführungszeit des Berichts an.
Vergleichen Sie die Ausführungszeit des Reports mit der Gesamtausführungszeit im Szenario.
Wenn die Ausführungszeit des Berichts viel kürzer ist als die Gesamtausführungszeit, berücksichtigen Sie die Datenmenge, die der Bericht verarbeitet:
- Wenn der Bericht eine kleine Datenmenge verarbeitet, kann das Problem an der Ladezeit der Konfiguration liegen.
- Wenn der Bericht eine große Datenmenge verarbeitet, kann das Problem die Vorverarbeitung von X++ beinhalten. Trace-Parser verwenden, um diesen Fall zu analysieren.
Für andere Fälle siehe die nächsten Abschnitte.
Führen Sie mehrere Tests mit unterschiedlichen Datenmengen aus, um zu ermitteln, wie die Ausführungszeit von der Datenmenge abhängt.
Spuren von Trace Parsern analysieren
Bereiten Sie ein kleines Beispiel vor oder sammeln Sie mehrere Traces während zufälliger Teile der Berichtserstellung.
Dann in Trace Parser führen Sie eine standardmäßige Bottom-Up-Analyse durch und beantworten Sie die folgenden Fragen:
- Was sind die Top-Methoden in Bezug auf den Zeitverbrauch?
- Welchen Teil der Gesamtzeit verwenden diese Methoden?
Beantworten Sie die gleichen Fragen für Anfragen.
Wenn Sie sehen, dass Methoden das Präfix „ER“ voranstellen, fahren Sie mit dem nächsten Abschnitt fort.
Wenn Sie feststellen, dass Methoden oder Abfragen aus der Anwendungssuite stammen, sollten Sie generische Optimierungen in Betracht ziehen (z. B. Indizes erstellen).
Analysieren Sie die Anzahl der Anrufe. Wenn die Zahl deutlich höher als erwartet ist, sollten Sie die entsprechenden Knoten der Konfiguration zwischenspeichern.
Datenbankaufrufe analysieren
Bereiten Sie ein Beispiel mit einer kleinen Datenmenge vor, damit Sie eine ER-Spur erfassen können.
Öffnen Sie dann die Ablaufverfolgung im ER-Modellzuordnungsdesigner und sehen Sie sich den unteren Teil der Seite an. Beantworten Sie folgende Fragen:
Gibt es eine doppelte Abfrage? Wenn ja, ziehen Sie eine der folgenden Korrekturen in Betracht:
- Caching verwenden, wenn Sie der Meinung sind, dass mehrere Aufrufe in einem übergeordneten Datensatz vorhanden sind.
- Verwenden Sie ein zwischengespeichertes, parametrisiertes berechnetes Feld, wenn Sie der Meinung sind, dass Aufrufe für denselben Datensatz in verschiedenen Datensätzen vorhanden sind.
- Verwenden eine JOIN-Datenquelle, wenn Sie eine beträchtliche Anzahl verschiedener Datensätze aus einer Datenbank lesen müssen.
Entspricht die Anzahl der Abfragen und geholten Datensätze der Gesamtdatenmenge? Wenn ein Dokument beispielsweise 10 Zeilen hat, zeigen die Statistiken, dass der Bericht 10 Zeilen oder 1.000 Zeilen extrahiert? Wenn Sie über eine beträchtliche Anzahl von abgerufenen Datensätzen verfügen, ziehen Sie eine der folgenden Korrekturen in Betracht:
- Verwenden Sie die FILTER-Funktion statt der WHERE-Funktion, um Daten auf der Microsoft SQL Server-Seite zu verarbeiten.
- Verwenden Sie Caching, um zu vermeiden, dass dieselben Daten abgerufen werden.
- Verwenden Sie die Funktionen für erfasste Daten, um zu vermeiden, dass dieselben Daten für die Zusammenfassung abgerufen werden.
Analysieren Sie PerfView-Traces
PerfView ist ein Tool für erfahrene Entwickler. Ausführlichere Informationen zu den folgenden Schritten finden Sie unter Grundlagen der Wanduhr-Zeitermittlung.
Sammeln Sie eine Ablaufverfolgung, indem Sie die Thread-Zeit verwenden.
Nur Stapel einschließen, die runUnattendedverwenden, um nur den Thread zu filtern, der über die Konfigurationsausführung verfügt. (runUnattended zum Eingabefeld IncPats hinzufügen.)
Falten Sie alle CPU-, Netzwerk- und blockierten Zeiten.
Wählen Sie ER>Andere Voreinstellung.
Schau dir die Namen an:
Sie werden wahrscheinlich den Plattformcode sehen, der die meiste Zeit verbraucht.
Sie können doppeltippen (oder doppelklicken) und nach oben zu Angerufene gehen.
Wenn Sie Klassen mit dem Präfix „ERExpression“ finden und es sich um Funktionen handelt, die sich auf Formeln beziehen, können Sie den Funktionsnamen anhand des Klassennamens erraten und im ER-Repository nach den Attributen suchen.
Korrekturen
Wenn Sie feststellen, dass die meiste CPU-Zeit von Abfragen verbraucht wird, versuchen Sie, die Anzahl der Abfragen zu reduzieren:
- Überprüfen Sie die ER-Spur auf doppelte Abfragen.
- Sehen Sie, wie viele Datensätze abgerufen werden, und bewerten Sie, wie viele Daten theoretisch abgerufen werden sollten.
Wenn Sie feststellen, dass die meiste CPU-Zeit von den verwendeten Funktionen verbraucht wird, versuchen Sie, die Stelle in der Konfiguration zu finden, die die meisten Ressourcen verbraucht.
Wenn Sie feststellen, dass die meiste CPU-Zeit von Datenerfassungsfunktionen verbraucht wird, sollten Sie sie durch them ersetzen SQL-Gruppe nach auf der Modellzuordnungsseite.
Datenerfassung
Abhängig von Ihrer Umgebung gibt es mehrere Möglichkeiten, verfügbare Daten zu sammeln:
Die Gesamtlaufzeit abrufen:
- Aus dem Aktionszentrum
- Aus dem Ereignisprotokoll
Profil der Ausführung:
- Durch die Verwendung von ER-Tools
- Mit dem Trace Parser
- Durch die Verwendung von PerfView
Sammeln von Daten in einer Produktionsumgebung
Manchmal können Probleme nur in einer Produktionsumgebung reproduziert werden. Sie können Daten auf folgende Arten sammeln:
- Mit Trace Parser-Spuren
- Durch die Nutzung von ER-Ausführung-Spuren
- Durch Nutzung der gesamten Ausführungszeit
Sammeln von Daten in einer Entiwcklungsumgebung
Neben den Tools, die in einer Produktionsumgebung verwendet werden können, gibt es mehrere Tools, die Sie in einer Entwicklungsumgebung verwenden können:
- Ereignisprotokoll (Microsoft-Dynamics-ElectronicReporting). Dieses Protokoll kann Ihnen die Gesamtausführungszeit anzeigen.
- Gängige .NET-Tools wie PerfView.
Darüber hinaus bietet Ihnen eine Entwicklungsumgebung mehr Flexibilität beim Experimentieren. Sie können beispielsweise Teile von Berichten deaktivieren, um zu sehen, wie sich dies auf die Ausführungszeit auswirkt.
Extras
Ausführungszeit im Action Center
ER kann die Ausführungszeit der Konfiguration im Action Center anzeigen. Diese Option funktioniert nur für einen bestimmten Benutzer und ein bestimmtes Unternehmen und nur für interaktive Sitzungen. Gehen Sie folgendermaßen vor, um diese Funktion verfügbar zu machen.
- Gehen Sie zu Organisationsverwaltung>Elektronisches Berichtswesen>Konfigurationen.
- Auf der Seite Konfigurationen im Aktivitätsbereich, auf der Registerkarte Konfigurationen in der Gruppe Erweiterte Einstellungen wählen Sie Benutzerparameter aus.
- Im Dialogfeld Benutzerparameter setzen Sie die Option Dateierstellungszeit anzeigen auf Ja.
Ausführungszeit im Ereignisprotokoll
- Öffnen Sie die Windows-Ereignisanzeige.
- Öffnen Sie unter Anwendungs- und Dienstprotokolle die Option Microsoft-Dynamics-ElectronicReporting/Operational.
- Suchen Sie nach FormatMappingRun-Ereignissen, bei denen Ereignis-ID=2, da diese Ereignisse die Informationen über die verstrichene Zeit enthalten.
Spuren von Trace Parsern
Da ER in X++ implementiert ist, können Sie gängige X++-Tools verwenden, um die Leistung zu analysieren. Weitere Informationen finden Sie unter Erfassen von Spuren mit dem Trace Parser.
Dieser Ansatz unterliegt einigen Einschränkungen. Da ein Teil von ER in C# implementiert ist, sind nicht alle Details verfügbar. Sie können jedoch die Datennutzungsdetails anzeigen. Darüber hinaus können lange Berichtsausführungen die Speicherbeschränkungen für Traces überschreiten.
ER-Spuren
ER kann seine eigenen Spuren sammeln und verfügt über Visualisierungs- und Analysetools für diese Spuren. Weitere Informationen finden Sie unter Überwachen der Ausführung von EB-Formaten zur Behebung von Leistungsproblemen.
PerfView
Da sowohl X++ als auch ER auf der .NET-Plattform implementiert sind, können Sie gängige .NET-Tools verwenden. Sie können zum Beispiel das kostenlose PerfView-Tool verwenden.
Sie können auch Daten über die Befehlszeile sammeln. Das folgende Windows PowerShell-Skript erfasst beispielsweise die Ausführungszeit, bis die Formatausführung auf dem Computer beendet wird.
c:\programs\PerfView collect "e:\traces\$(date -format "ddMMyyyy_hhmm").etl" `
-CircularMB:20000 -ThreadTime `
-NoNGenRundown `
-StopOnEtwEvent:Microsoft-Dynamics-ElectronicReporting/FormatMappingRun/Stop
Dieser Ansatz unterliegt einigen Einschränkungen. Sie müssen Administratorzugriff auf den Computer besitzen. Darüber hinaus müssen Sie ein erfahrener Entwickler sein, da die Lernkurve steil ist.
Änderungen vornehmen
Caching verwenden
Das Caching verkürzt zwar die Zeit, die zum erneuten Abrufen von Daten erforderlich ist, kostet jedoch Speicher. Verwenden Sie Caching in Fällen, in denen die Menge der abgerufenen Daten nicht sehr groß ist. Weitere Informationen und ein Beispiel zur Verwendung von Caching finden Sie unter Verbessern der Modellzuordnung basierend auf Informationen aus dem Ausführungsspur.
Die Menge der abgerufenen Daten reduzieren
Sie können den Speicherverbrauch für das Zwischenspeichern reduzieren, indem Sie die Anzahl der Felder in den Datensätzen einer Anwendungstabelle begrenzen, die Sie zur Laufzeit abrufen. In diesem Fall rufen Sie nur die Feldwerte einer Anwendungstabelle ab, die Sie in Ihrer ER-Modellzuordnung benötigen. Andere Felder in dieser Tabelle werden nicht abgerufen. Daher wird das Speichervolumen, das zum Zwischenspeichern abgerufener Datensätze erforderlich ist, reduziert. Weitere Informationen finden Sie unter Verbessern der Leistung von ER-Lösungen, indem die Anzahl der Tabellenfelder reduziert wird, die zur Laufzeit abgerufen werden
Verwenden Sie ein zwischengespeichertes, parametrisiertes berechnetes Feld
Manchmal müssen Werte wiederholt nachgeschlagen werden. Beispiele sind Kontonamen und Kontonummern. Um Zeit zu sparen, können Sie ein berechnetes Feld mit Parametern auf der obersten Ebene erstellen und das Feld dann zum Cache hinzufügen.
Es wird empfohlen, diesen Ansatz nur zu verwenden, wenn die Größe der zwischengespeicherten Daten gering ist. Weitere Informationen finden Sie unter Verbessern der Leistung von ER-Lösungen durch Hinzufügen parametrisierter CALCULATED FIELD-Datenquellen.
JOIN-Datenquelle verwenden
Eine JOIN-Datenquelle ermöglicht das Abrufen mehrerer verbundener Datensätze mit einer Abfrage. Es muss nicht eine separate Abfrage verwendet werden, um jeden verbundenen Datensatz abzurufen. Wenn Sie beispielsweise 1.000 Zeilen haben und Artikeldaten für jede Zeile nach Relation abrufen, haben Sie 1.001 Abfragen (= 1.000 + 1). Wenn Sie eine JOIN-Datenquelle verwenden, verwenden Sie nur eine Abfrage, um dieselben Daten abzurufen. Weitere Informationen finden Sie unter JOIN-Datenquellenzuordnungen verwenden, um Daten aus mehreren Anwendungstabellen abzurufen.
Verwenden Sie die FILTER-Funktion anstelle der WHERE-Funktion
Die FILTER-Funktion führt Bedingungen auf SQL Server aus, während die WHERE-Funktion alle Daten aus der Liste abruft, einen Datensatz nach dem anderen, und die Bedingung für jeden Datensatz anwendet. Sie möchten beispielsweise einen Datensatz aus 1.000 Datensätzen auswählen. Wenn Sie WHERE verwenden, werden alle 1.000 Datensätze abgerufen. Wenn Sie jedoch FILTER verwenden, wird genau ein Datensatz geholt. FILTER kann auch datenbankseitig Indizes verwenden.
Verwenden von Funktionen für gesammelte Daten oder einer Datenquelle für gesammelte Daten
Wenn Ihre Konfiguration ein gruppiere nach-Komponente hat, die zuvor abgerufene Daten nach Bericht zusammenfasst, ruft die Komponente alle Daten erneut ab. Durch die Verwendung von Funktionen für gesammelte Daten ermöglichen Sie ER, Daten während des ersten Abrufs zu sammeln. Weitere Informationen finden Sie unter Konfigurieren des ER-Formats für Inventuren und Summierungen.
Teile der Konfiguration in X++ umschreiben
ER unterstützt Aufrufmethoden von Tabellen und Klassen, einschließlich Erweiterungen. Ziehen Sie in Betracht, Teile der Modellzuordnung in X++ umzuschreiben, um die Leistung zu verbessern.
ER kann Daten aus den folgenden Quellen verbrauchen:
- Klassen (Datenquellen Objekt und Klasse)
- Tabellen (Datenquellen Tabelle und Tabellendatensätze Datenquellen)
Das ER-Schnittstelle für die Anwendungsprogrammierung API bietet auch eine Möglichkeit, vorberechnete Daten aus dem aufrufenden Code zu senden. Die Anwendungssuite enthält zahlreiche Beispiele für diesen Ansatz.