Entwickler verbringen oft 40–60 Stunden Entwicklungszeit damit, „langsame“ BSFNsAbkürzung für Business Functions in JD Edwards. Dies sind wiederverwendbare Code-Module, die Geschäftslogik implementieren und von Anwendungen oder Batch-Prozessen aufgerufen werden. zu jagen, basierend auf subjektivem Benutzerfeedback aus einer Auftragserfassung (P4210)Eine Standardanwendung in JD Edwards für die Eingabe und Verwaltung von Verkaufsaufträgen. P4210 ist der Programm-ID-Code.-Sitzung. Sich auf eine manuelle Stoppuhr zu verlassen, um ein Power FormEin modernerer Typ von Benutzeroberflächenformular in JD Edwards, der erweiterte Funktionen und eine verbesserte Benutzererfahrung bietet, oft mit mehreren Subformularen. zu messen, ist ein Fehler, wenn der tatsächliche Engpass ein Latenz-Spike von 500 ms oder mehr sein könnte, der im Call Object KernelEin zentraler Prozess auf dem JD Edwards Enterprise Server, der für die Ausführung von Business Functions (BSFNs) und die Kommunikation mit der Datenbank zuständig ist. oder einer schlecht indizierten benutzerdefinierten Tabelle verborgen ist. Eine echte JD Edwards BSFN-Leistungsmessung mit Logs und Timings erfordert, über die Anwendungsebene hinauszugehen und die auf Mikrosekunden genauen Zeitstempel im jdedebug.logDie primäre Protokolldatei in JD Edwards, die detaillierte Informationen über die Ausführung von Anwendungen, Business Functions und Datenbankinteraktionen enthält, oft für Debugging-Zwecke verwendet. zu analysieren.
Eine leistungsstarke BSFN wie B4200310Eine spezifische Master Business Function in JD Edwards, die oft für die Verarbeitung von Verkaufsaufträgen verwendet wird. Sie kapselt komplexe Geschäftslogik. kann leicht 100.000 Zeilen Log-Daten für einen einzelnen mehrzeiligen Auftrag ausgeben, was eine generische Log-Analyse ineffizient macht. Sie sollten spezifische jdeWriteLog APIEine Programmierschnittstelle (API) in JD Edwards, die es Entwicklern ermöglicht, benutzerdefinierte Nachrichten direkt in die jdedebug.log-Datei zu schreiben, um die Codeausführung zu verfolgen.-Aufrufe direkt in Ihren C-CodeDie Programmiersprache C, die für die Entwicklung von Business Functions (BSFNs) in JD Edwards verwendet wird, um leistungsstarke und komplexe Geschäftslogik zu implementieren. einfügen, um verdächtige Logikblöcke, wie eine rekursive Cache-SucheEin Algorithmus, der wiederholt eine Cache-Struktur durchsucht, oft indem er sich selbst aufruft, um Daten zu finden. Kann bei ineffizienter Implementierung zu Leistungsproblemen führen. oder eine komplexe F41021Eine wichtige Datenbanktabelle in JD Edwards, die Bestandsinformationen auf Artikelebene speichert, einschließlich Mengen, Standorte und Verfügbarkeit. Bestandsaktualisierung, zu umrahmen. Durch die Isolierung dieser Segmente können Sie eine statistische Baseline über 10–15 identische Ausführungen hinweg etablieren. Dieser datengesteuerte Ansatz ermöglicht es Ihnen, eine Reduzierung der Ausführungszeit um 15–20 % zu quantifizieren und dem CIOAbkürzung für Chief Information Officer. Dies ist die Führungskraft, die für die Informationstechnologie und Computersysteme eines Unternehmens verantwortlich ist. harte Beweise für die Optimierung zu liefern, anstatt anekdotische Behauptungen.
Der Trugschluss subjektiver Leistungstests
Einen Leistungstest zu starten, indem man auf einen Button klickt und die Zeit mit einem Telefon misst, ist Zeitverschwendung. Eine erstmalige Ausführung einer Master Business Function wie B4200310 zeigt oft eine 20–40 % langsamere Varianz im Vergleich zu nachfolgenden Läufen. Diese Verzögerung ist nicht auf einen Fehler in der Code-Logik zurückzuführen; es ist der Preis für das anfängliche Laden des JDE-CachesDer interne Datencache von JD Edwards, der häufig verwendete Daten im Speicher vorhält, um den schnellen Zugriff zu beschleunigen und Datenbankabfragen zu reduzieren., das Füllen der JDEBASE-MiddlewareDie Datenbankabstraktionsschicht von JD Edwards, die die Kommunikation zwischen der Anwendung und der zugrunde liegenden Datenbank verwaltet. und den Aufbau der ersten Datenbankverbindung über den OCI- oder ODBC-TreiberStandardtreiber für die Datenbankkonnektivität. OCI (Oracle Call Interface) ist spezifisch für Oracle, ODBC (Open Database Connectivity) ist ein allgemeiner Standard.. Die Messung dieses ersten Laufs als Baseline verzerrt Ihre Optimierungsmetriken, bevor Sie eine einzige Zeile C-Code geschrieben haben.
Die Leistungsmessung auf Anwendungsebene führt zu viele Variablen ein, die die tatsächliche BSFN-Ausführungszeit verschleiern. NetzwerklatenzDie Zeitverzögerung, die Daten benötigen, um von einem Punkt im Netzwerk zu einem anderen zu gelangen. Hohe Latenz kann die Anwendungsleistung beeinträchtigen., Webserver-SerialisierungDer Prozess, bei dem Datenstrukturen in ein Format umgewandelt werden, das über ein Netzwerk übertragen oder gespeichert werden kann, oft sequenziell. Kann zu Engpässen führen. und UI-RenderingDer Prozess, bei dem die Benutzeroberfläche (User Interface) einer Anwendung auf dem Bildschirm des Benutzers gezeichnet oder angezeigt wird. können einer Transaktion 200 ms bis 500 ms Rauschen hinzufügen. Wenn ein Entwickler behauptet, er habe „gespürt“, wie die Anwendung schneller wurde, ignoriert er, dass die zugrunde liegende BSFN möglicherweise nur einen nominalen Bruchteil dieser gesamten Round-Trip-Zeit ausmacht. Effektives Tuning erfordert die Isolierung der Logik von der PräsentationsschichtDie oberste Schicht einer Softwarearchitektur, die für die Darstellung der Benutzeroberfläche und die Interaktion mit dem Benutzer zuständig ist., um zu sehen, was der CallObject Kernel tatsächlich in der Laufzeitumgebung tut.
Kleine Effizienzsteigerungen in BSFNs erscheinen bei einer einzelnen Transaktion vernachlässigbar, werden aber bei der StapelverarbeitungDie Ausführung einer Reihe von Programmen oder Aufgaben ohne manuelle Interaktion, oft für große Datenmengen oder zeitintensive Operationen. entscheidend. Das Einsparen von etwa 50 ms bei einer benutzerdefinierten Berechnungs-BSFN, die in einer Schleife von 10.000 Datensätzen aufgerufen wird, führt zu einer Reduzierung der UBEAbkürzung für Universal Batch Engine in JD Edwards. Dies ist das Framework für die Ausführung von Batch-Prozessen und Berichten.-Verarbeitungszeit um fast zehn Minuten. In Umgebungen mit hohem Volumen, in denen der R42565 Print Pick SlipsEin spezifischer JD Edwards Batch-Bericht (UBE), der Kommissionierscheine für die Lagerentnahme von Artikeln basierend auf Verkaufsaufträgen druckt. gegen Tausende von Zeilen läuft, verhindern diese Mikro-Optimierungen, dass sich die Job-WarteschlangeEine Liste von Aufgaben oder Prozessen, die darauf warten, von einem System oder Server ausgeführt zu werden. während der Spitzenzeiten staut. Ohne harte Daten sieht ein Gewinn von etwa 50 ms wie ein Rundungsfehler aus; in einer massiven Schleife ist es der Unterschied zwischen dem Einhalten oder Verpassen eines Versandfensters.
Leistungsansprüche, denen logbasierte Beweise fehlen, werden bei Peer-ReviewsEin Prozess, bei dem der Code oder die Arbeit eines Entwicklers von anderen Entwicklern (Peers) überprüft wird, um Fehler zu finden und die Qualität zu verbessern. oder von CNC-TeamsTeams, die für die Konfiguration, Wartung und den Support der JD Edwards-Infrastruktur verantwortlich sind, einschließlich Servern, Datenbanken und Bereitstellungen., die Kernel-TimeoutsFehler, die auftreten, wenn ein Prozess im JD Edwards Call Object Kernel eine vordefinierte maximale Ausführungszeit überschreitet und beendet wird. untersuchen, häufig abgewiesen. Wenn ein Kernel ein 600-Sekunden-Timeout erreicht und stirbt, sucht das CNC-Team nach wiederholbaren, protokollierten Ausführungsdauern, nicht nach subjektiven Beobachtungen aus einer UAT-SitzungAbkürzung für User Acceptance Testing (Benutzerakzeptanztest). Eine Phase, in der Endbenutzer die Software testen, um sicherzustellen, dass sie die Geschäftsanforderungen erfüllt.. Eine Delta-AnalyseEin Vergleich von zwei Datensätzen oder Zuständen, um die Unterschiede oder Änderungen zwischen ihnen zu identifizieren und zu quantifizieren. basierend auf mikrosekundengenauen Logs verlagert die Diskussion von anekdotischen zu technischen Validierungen. Der Nachweis, dass eine bestimmte SQL-AnweisungEin Befehl oder eine Abfrage in der Structured Query Language (SQL), die zur Interaktion mit relationalen Datenbanken verwendet wird, z.B. zum Abrufen oder Ändern von Daten. oder ein rekursiver BSFN-Aufruf der Engpass war, erfordert die Präzision, die nur rohe Log-Timings bieten.

jdedebug.log für Mikrosekunden-Präzision konfigurieren
Die Standard-JDE-Protokollierung wird oft als stumpfes Instrument abgetan, aber der 6-stellige Mikrosekunden-Zeitstempel im jdedebug.log-Header ist die einzige zuverlässige Methode, einen BSFN-Ausführungspfad zu profilieren. Bei der Untersuchung einer Master Business Function wie B4200310, die Dutzende von verschachtelten Aufrufen in einer Transaktion ausführt, ist die Millisekunden-Präzision unzureichend. Sie müssen die genaue Mikrosekunde sehen, in der ein Prozess den Marker Entering JDE_FreeDataSelection erreicht, um zu identifizieren, wo das Ausführungsbudget tatsächlich verbraucht wird.
Um diese Granularität zu erhalten, setzen Sie Output=FILE und DebugLevel=EXTENDED im [DEBUG]-Abschnitt der jde.iniEine wichtige Konfigurationsdatei in JD Edwards, die Einstellungen für die Laufzeitumgebung, Datenbankverbindungen und Protokollierung enthält.. Dies stellt sicher, dass die EngineIm Kontext von JD Edwards bezieht sich dies auf die Laufzeit-Engine, die für die Ausführung von Business Functions und anderen Prozessen verantwortlich ist. den vollständigen Eintritts- und Austritts-Stack jeder verschachtelten BSFN erfasst. Ohne die erweiterte Stufe unterdrückt die Engine die Timings innerer Schleifen, die oft Engpässe verbergen, wie wiederholte Aufrufe an B9800100Eine Standard-Business Function in JD Edwards, die häufig für Datumskonvertierungen und andere allgemeine Dienstprogramme verwendet wird. für Datumskonvertierungen. Sie suchen speziell nach den Zeilen „Enter BSFN“ und „Return BSFN“, um die Differenz zwischen dem Aufruf und der Antwort zu berechnen.
Das Testen auf einem ausgelasteten Enterprise ServerDer zentrale Server in einer JD Edwards-Umgebung, auf dem die Geschäftslogik (Business Functions) und Batch-Prozesse ausgeführt werden. führt zu Log-InterleavingDas Vermischen von Protokolleinträgen aus mehreren gleichzeitig laufenden Prozessen oder Threads in einer einzigen Protokolldatei, was die Analyse erschwert., was die Trace-Analyse unlesbar macht. Sie müssen die Testsitzung auf einen einzelnen Call Object Kernel isolieren. Wenn Sie auf einem Linux- oder Windows-Enterprise-Server arbeiten, verwenden Sie den Server Manager, um den Testbenutzer an eine bestimmte PIDAbkürzung für Process ID (Prozess-ID). Eine eindeutige Nummer, die einem laufenden Prozess von einem Betriebssystem zugewiesen wird. zu binden. Diese Isolation stellt sicher, dass die aufgezeichnete Wall-Clock-ZeitDie tatsächliche, verstrichene Zeit, die ein Prozess von Anfang bis Ende benötigt, gemessen an einer Uhr. Sie beinhaltet Wartezeiten und CPU-Zeit. nur den Ausführungspfad Ihrer spezifischen Transaktion widerspiegelt.
Die Spalte „Time“ im Log repräsentiert die gesamte Wall-Clock-Zeit und nicht reine CPU-ZyklenDie grundlegenden Operationen, die ein Prozessor pro Sekunde ausführen kann. Sie sind ein Maß für die Rechenleistung.. Dieses Mikrosekunden-Delta beinhaltet Wartezustände für Datenbank-SperrenMechanismen in Datenbanken, die den gleichzeitigen Zugriff auf Daten steuern, um Datenintegrität zu gewährleisten. Können zu Wartezeiten führen., Netzwerklatenz bei synchronen Aufrufen und Middleware-OverheadDer zusätzliche Rechenaufwand oder die Verzögerung, die durch die Verwendung von Middleware-Software entsteht, die die Kommunikation zwischen verschiedenen Systemen vermittelt.. Wenn Sie eine Lücke von mehreren hundert Millisekunden zwischen einem SELECTEin SQL-Befehl, der zum Abrufen von Daten aus einer oder mehreren Datenbanktabellen verwendet wird. und dem nachfolgenden FETCHEin SQL-Befehl, der verwendet wird, um die nächste Zeile aus einem Abfrageergebnis abzurufen. sehen, handelt es sich um Datenbankkonflikte und nicht um langsame Logik. Eine genaue Messung erfordert, dass Sie diese externen Wartezustände subtrahieren, um die wahre Ausführungszeit zu isolieren.
Benutzerdefinierte Log-Marker in C-BSFNs injizieren
Der Standard-JDE-Call-Stack in einem Debug-Log ist oft mit Tausenden von Overhead-Zeilen überladen, was es nahezu unmöglich macht, zu isolieren, warum ein spezifischer F0911-Fetch eine Post-Version verlangsamt. Während das Log jeden JDB_Fetch und jede BSFN-Grenze erfasst, sagt es Ihnen nicht nativ, wo eine spezifische 5.000-Iterationen-Schleife innerhalb einer benutzerdefinierten B55-Funktion beginnt oder endet. Um dies zu lösen, müssen Entwickler die jdeWriteLog API verwenden, um chirurgische Marker direkt in den Ausgabestrom einzufügen. Dieser Ansatz umgeht das Rauschen von Standard-CALL- und RET-Zeilen und ermöglicht es Ihnen, sich auf den spezifischen Codeblock zu konzentrieren, der den Engpass verursacht.
Das Einfügen einer Zeile wie jdeWriteLog(NULL, "PERF_START: F0911_Processor_Loop"); am Anfang eines Verarbeitungsblocks bietet einen grep-fähigen AnkerEin eindeutiger Textstring in einer Protokolldatei, der leicht mit dem Befehlszeilentool `grep` oder ähnlichen Suchwerkzeugen gefunden werden kann., der sich von den 20 MB anderer Daten unterscheidet, die während einer typischen Transaktion generiert werden. Durch die Kombination mit einem entsprechenden PERF_END-Marker am Austrittspunkt erstellen Sie ein messbares Fenster innerhalb der Log-Datei. Die Verwendung dieser eindeutigen Präfixe stellt sicher, dass selbst wenn Sie ein Log mit 500.000 Zeilen analysieren, eine einfache Befehlszeilensuche oder ein grundlegendes Python-SkriptEin Programm, das in der Programmiersprache Python geschrieben ist. Python-Skripte werden oft für Datenanalyse und Automatisierung verwendet. die genauen Zeitstempel für die von Ihnen geprüfte Logik extrahieren kann. Diese Methode ist weitaus zuverlässiger, als zu versuchen, die Differenz zwischen nicht verwandten JDB_Select-AufrufenInterne JD Edwards Database (JDB) API-Funktionen, die zum Auswählen von Daten aus Datenbanktabellen verwendet werden. manuell zu berechnen.
Viele Entwickler versuchen, interne JDE-Timing-Strukturen oder plattformspezifische C-Bibliotheken zur Leistungsmessung zu verwenden, aber diese brechen oft bei Tools Release-UpgradesAktualisierungen der JD Edwards Tools Release-Software, die die zugrunde liegende Plattform und Infrastruktur verbessern, aber auch Code-Anpassungen erfordern können. von 9.2.5 auf 9.2.8Spezifische Versionen des JD Edwards Tools Release. Diese Zahlen kennzeichnen verschiedene Aktualisierungsstufen der Plattform. aufgrund von Header-Datei-ÄnderungenÄnderungen an den Header-Dateien (.h) im C-Code, die Definitionen von Funktionen und Datenstrukturen enthalten. Können Kompatibilitätsprobleme verursachen. oder Compiler-VerschiebungenÄnderungen in der Compiler-Software oder -Version, die zum Kompilieren von C-Code verwendet wird. Dies kann zu unterschiedlichem Verhalten oder Kompatibilitätsproblemen führen.. Das Festhalten an der Standard-Logging-API stellt sicher, dass Ihre Performance-HooksSpezielle Code-Einfügungen oder -Mechanismen, die dazu dienen, die Leistung eines Programms zu messen oder zu überwachen. über alle 64-Bit- und 32-Bit-BereitstellungenSoftware-Installationen, die für 64-Bit- oder 32-Bit-Architekturen optimiert sind. JD Edwards unterstützt beide, was Portabilität erfordert. hinweg portabel bleiben, ohne zusätzliche Include-Dateien oder komplexe Build-Konfigurationen zu erfordern. Es ist eine sauberere, nachhaltigere Methode, Code zu instrumentieren, die das nächste Jahrzehnt der Anwendungsupdates überdauern wird.
In einem kürzlich abgeschlossenen Projekt mit einem Kunden aus dem Hochvolumen-Vertrieb haben wir diese Marker verwendet, um eine Verzögerung von etwa 400 ms zu identifizieren, die innerhalb einer verschachtelten Schleife auftrat, die 10.000 Mal pro Batch-Lauf aufgerufen wurde. Die Standardprotokollierung zeigte, dass die BSFN über eine Stunde zur Fertigstellung benötigte, aber die benutzerdefinierten Marker identifizierten einen redundanten GetAddressBookConstantEine JD Edwards Business Function, die verwendet wird, um Konstanten oder Einstellungen aus dem Adressbuch abzurufen.-Aufruf innerhalb der Schleife als Ursache. Das Entfernen dieses einzelnen Aufrufs reduzierte die gesamte Batch-LaufzeitDie Gesamtzeit, die ein Batch-Prozess oder ein Stapel von Aufgaben benötigt, um vollständig ausgeführt zu werden. um über drei Viertel, ein Erfolg, der durch das schiere Volumen der Standard-Debug-AusgabeInformationen, die von einem Programm während der Ausführung generiert werden, um Entwicklern bei der Fehlersuche und dem Verständnis des Programmverhaltens zu helfen. verdeckt worden wäre.
Eine statistische Leistungs-Baseline etablieren
Eine einzelne Ausführungsverfolgung einer BSFN wie F4211FSBeginDoc ist eine Anekdote, keine Metrik. In einer Multi-Tenant-Umgebung können vorübergehende Netzwerklatenz oder Datenbankkonflikte die Ausführungszeit eines einzelnen Aufrufs verdoppeln. Um eine zuverlässige Baseline zu etablieren, führen Sie denselben Prozess mindestens 10 Mal unter kontrollierten Bedingungen aus. Berechnen Sie die mittlere Ausführungszeit anstelle des Durchschnitts, um zu verhindern, dass ein einzelner Spike das Ziel verzerrt. Wenn Sie einen B0100066-Aufruf einmal mit 150 ms und später mit über 400 ms aufgrund einer temporären Sperre messen, ist der Durchschnitt für das Tuning nutzlos.
Verwerfen Sie AusreißerläufeTestläufe, deren Ergebnisse erheblich von der Mehrheit der anderen Läufe abweichen und oft durch externe Faktoren beeinflusst werden., die mit hoher Systemaktivität zusammenfallen. Entwickler verschwenden oft Tage damit, LeistungsregressionenEin Rückgang der Leistung einer Software oder eines Systems nach einer Änderung oder Aktualisierung. zu debuggen, die tatsächlich nur ein vollständiger Server-Paket-BuildDer Prozess des Kompilierens und Bereitstellens von JD Edwards-Code und -Objekten auf dem Enterprise Server. ist, der die CPU des Enterprise Servers sättigt, oder eine massive ESU-BereitstellungDie Installation eines Electronic Software Update (ESU) in JD Edwards, das Fehlerbehebungen oder Verbesserungen enthält., die die Datenbank belastet. Überprüfen Sie mit Server Manager-MetrikenLeistungsdaten und Statistiken, die vom JD Edwards Server Manager gesammelt und angezeigt werden, um den Zustand und die Auslastung der Server zu überwachen., ob die Systemlast über alle 10 Läufe hinweg konsistent ist. Wenn ein Lauf um mehr als 25 % abweicht, prüfen Sie, ob ein gleichzeitiger UBE wie R42520Ein spezifischer JD Edwards Batch-Bericht (UBE), der für die Generierung von Rechnungen oder ähnlichen Verkaufsdokumenten verwendet wird. um Ressourcen konkurrierte.
Äpfel-mit-Äpfeln-Vergleiche erfordern einen eingefrorenen Datensatz. Wenn Sie F4211FSEndDocEine JD Edwards Business Function, die das Ende einer Verkaufsauftragstransaktion im F4211-System markiert und oft die Daten in die Datenbank schreibt. profilieren, verwenden Sie einen spezifischen VerkaufsauftragEin Dokument, das die Details eines Kundenauftrags für Waren oder Dienstleistungen festhält, einschließlich Artikel, Mengen und Preise. mit genau 50 Zeilen. Variationen in den Daten machen Timing-Logs unvergleichbar, da die IterationslogikDie Logik in einem Programm, die wiederholt über eine Sammlung von Daten oder eine Schleife ausgeführt wird. im C-Code nicht-linear skaliert. Dokumentieren Sie die spezifische Auftragsnummer und den Typ, um sicherzustellen, dass nachfolgende Optimierungsdurchläufe dieselben Codepfade treffen.
Die Leistungsmessung verändert unweigerlich die Ergebnisse. Das Aktivieren von jdedebug.log führt zu einem messbaren OverheadDer zusätzliche Aufwand (z.B. Rechenzeit, Speicher), der für die Ausführung einer Aufgabe über die eigentliche Kernfunktionalität hinaus erforderlich ist., der typischerweise 2 % bis 5 % zur gesamten Ausführungszeit hinzufügt. Diese Strafe ist für die Mikrosekunden-Präzision nicht verhandelbar, muss aber im Abschlussbericht berücksichtigt werden. Wenn Sie eine 20%ige Geschwindigkeitsverbesserung präsentieren, stellen Sie klar, dass dieses Delta auch dann gilt, wenn die Protokollierung in der ProduktionDie Live-Umgebung, in der eine Software oder ein System von Endbenutzern für den täglichen Geschäftsbetrieb verwendet wird. deaktiviert ist.

Log-Timings analysieren und Delta berechnen
Das jdedebug.log ist ein Datenstrom, aber der Call Object Kernel liefert die spezifischen Spuren, die für das Timing benötigt werden. Suchen Sie nach den Markern „Entering JDERT: [Function Name]“ und „Exiting JDERT: [Function Name]“. Das Subtrahieren des PERF_START-Zeitstempels vom PERF_END-Zeitstempel ergibt die rohe Ausführungsdauer. In einer 9.2-Umgebung werden diese Zeitstempel in Mikrosekunden protokolliert, sodass Sie Mikro-Latenzen erfassen können, die sich über einen Batch-Lauf von 50.000 Datensätzen zu Minuten summieren.
Die Rohdauer ist oft eine trügerische Metrik, wenn es um komplexe Logik wie B4201500Eine spezifische JD Edwards Business Function, die oft in komplexen Verkaufsauftragsprozessen verwendet wird. geht. Wenn die Funktion mehrere hundert Millisekunden läuft, aber GetItemPriceEine JD Edwards Business Function, die den Preis eines Artikels basierend auf verschiedenen Kriterien (z.B. Kunde, Menge, Datum) abruft. zwanzig Mal aufruft, liegt der Engpass möglicherweise nicht in der übergeordneten Logik. Sie müssen die kumulative Dauer aller untergeordneten BSFN-Aufrufe von der gesamten übergeordneten Zeit subtrahieren, um die Self TimeIn der Leistungsanalyse die Zeit, die ein Codeblock oder eine Funktion ausschließlich für seine eigene Ausführung benötigt, ohne die Zeit, die in aufgerufenen Unterfunktionen verbracht wird. zu isolieren. Diese Unterscheidung ist entscheidend; die Optimierung einer übergeordneten Funktion, wenn die überwiegende Mehrheit der Latenz in einem verschachtelten F4101Eine wichtige Datenbanktabelle in JD Edwards, die Stammdaten für Artikel speichert, wie Beschreibung, Einheit und Klassifizierung.-Fetch liegt, ist eine Verschwendung von Entwicklungsstunden.
Das manuelle Parsen einer 2 GB großen Log-Datei ist fehleranfällig. Verwenden Sie Notepad++ mit dem Compare-PluginEin Texteditor mit einer Erweiterung, die das Vergleichen von zwei Dateien nebeneinander ermöglicht, um Unterschiede visuell hervorzuheben., um Abweichungen zwischen den Läufen zu erkennen, oder ein Python-Skript, das reguläre AusdrückeMuster, die zum Suchen und Bearbeiten von Text verwendet werden. Sie ermöglichen komplexe Suchvorgänge in Zeichenketten. verwendet, um die PID und Thread-IDEine eindeutige Nummer, die einem Ausführungsthread innerhalb eines Prozesses zugewiesen wird. zu parsen. Ein Skript kann das Log durchlaufen, Zeitstempel für verschachtelte Aufrufe in einen Stack legen und eine CSV-DateiAbkürzung für Comma Separated Values. Ein einfaches Textdateiformat, das Daten in Tabellenform speichert, wobei Werte durch Kommas getrennt sind. jeder BSFN-Ausführung mit ihrer dedizierten Self Time ausgeben. Dies verwandelt eine subjektive Beschwerde in eine Rangliste der zehn teuersten Funktionen.
Das Konzentrieren auf die „Entering“- und „Exiting“-Zeilen stellt sicher, dass Sie die JDE-LaufzeitDie Umgebung und die Prozesse, die JD Edwards-Anwendungen und -Business Functions ausführen. und die BSFN-LogikDie Geschäftslogik, die innerhalb einer JD Edwards Business Function implementiert ist. messen, anstatt nur die SQL-AusführungDer Prozess, bei dem eine SQL-Anweisung von einem Datenbankmanagementsystem verarbeitet und ausgeführt wird.. Bei einer kürzlichen Migration zeigte diese Delta-Analyse eine benutzerdefinierte BSFN, die 3.000 redundante Cache-LookupsDer Vorgang des Suchens nach Daten in einem Cache, einem schnellen Speicherbereich, um den Zugriff auf häufig verwendete Daten zu beschleunigen. pro Transaktion durchführte. Diese waren in den UBE-FertigstellungszeitenDie Zeiten, die JD Edwards Universal Batch Engine (UBE)-Prozesse benötigen, um ihre Ausführung abzuschließen. unsichtbar, aber offensichtlich, sobald die verschachtelten Dauern subtrahiert wurden. Die Korrektur der Logik reduzierte die gesamte Jobdauer von vier Stunden auf weniger als dreißig Minuten.
Optimierung validieren und Anspruchsgrenzen
Eine Optimierung, die etwa 50 ms von einem Sales Order Entry (P42101) BSFN-Aufruf abzieht, ist statistisch irrelevant, wenn Ihr Baseline-Jitter etwa ±75 ms beträgt. Sie müssen den Prozess mindestens 10 Mal in einer kontrollierten Umgebung ausführen, um einen Schwellenwert für die StandardabweichungEin statistisches Maß für die Streuung von Datenpunkten um den Mittelwert. Eine geringe Standardabweichung bedeutet, dass die Datenpunkte nahe am Mittelwert liegen. festzulegen. Wenn der durchschnittliche Leistungsgewinn diese Varianz nicht übersteigt, haben Sie den Code nicht optimiert; Sie haben lediglich einen günstigen Teil der CPU-PlanungDer Prozess, bei dem das Betriebssystem entscheidet, welche Prozesse oder Threads wann und wie lange auf der CPU ausgeführt werden. oder Cache-HitsEin Ereignis, bei dem die angeforderten Daten im Cache gefunden werden, was einen schnellen Zugriff ermöglicht und die Notwendigkeit eines langsameren Zugriffs auf den Hauptspeicher oder die Festplatte vermeidet. erfasst. Die Validierung des Deltas gegen das Systemrauschen verhindert, dass das Team PhantomverbesserungenWahrgenommene Leistungsverbesserungen, die nicht real sind oder nicht reproduzierbar sind und oft auf zufällige Systembedingungen zurückzuführen sind. jagt, die verschwinden, sobald das System eine gleichzeitige Benutzerlast von 60 % erreicht.
Erfahrene Entwickler tappen oft in die Falle, C-Code zu überentwickeln, um eine nominelle Einsparung von 10 ms herauszuholen. Das Ersetzen einer lesbaren SelectEin SQL-Befehl, der zum Abrufen von Daten aus einer oder mehreren Datenbanktabellen verwendet wird.- und Fetch NextEin SQL-Befehl, der verwendet wird, um die nächste Zeile aus einem Abfrageergebnis abzurufen.-Schleife durch komplexe benutzerdefinierte ZeigerVariablen in C-Code, die Speicheradressen speichern und auf Datenstrukturen verweisen. Ihre manuelle Verwaltung kann komplex sein. oder manuelle SpeicherverwaltungDer Prozess, bei dem ein Programmierer explizit Speicher für Variablen und Datenstrukturen anfordert und freigibt. könnte die Ausführungszeit um einen vernachlässigbaren Betrag reduzieren, verdoppelt aber die Zeit, die der nächste Berater zum Debuggen eines SpeicherlecksEin Fehler in einem Programm, bei dem Speicher belegt, aber nicht mehr freigegeben wird, was zu einem allmählichen Verbrauch des verfügbaren Speichers führt. benötigt. Wenn die BSFN einmal pro Transaktion aufgerufen wird, überwiegt der Wartungsaufwand von hyperoptimiertem Code den geringen DurchsatzgewinnEine Erhöhung der Menge an Arbeit, die ein System in einer bestimmten Zeiteinheit erledigen kann. bei weitem. Sparen Sie aggressive Logik für Funktionen innerhalb der inneren Schleife eines hochvolumigen UBEEin JD Edwards Universal Batch Engine (UBE)-Prozess, der eine sehr große Menge an Daten verarbeitet oder sehr häufig ausgeführt wird. oder einer AIS-OrchestrierungDie Koordination und Automatisierung von Geschäftsprozessen über die Application Interface Services (AIS) in JD Edwards, oft für Integrationen und Automatisierung., die Tausende von Datensätzen pro Stunde verarbeitet.
Leistungsgewinne sind selten linear über verschiedene Datensätze hinweg. Eine Logikänderung, die eine einzeilige Bestandsanpassung beschleunigt, kann die Leistung beim Verarbeiten einer 1.000-zeiligen EDI-Bestellung tatsächlich verschlechtern, wenn der neue Code eine O(n²)-KomplexitätEin Maß für die Effizienz eines Algorithmus, bei dem die Ausführungszeit quadratisch mit der Größe der Eingabedaten (n) wächst. einführt. Sie müssen die Optimierung an beiden Enden des Spektrums überprüfen: die typische 10-Zeilen-Transaktion und den Edge-Case 1.000-Zeilen-Batch. Verwenden Sie Log-Timings, um zu bestätigen, dass die Zeit pro Datensatz stabil bleibt oder sich verbessert, wenn das Volumen skaliert, um sicherzustellen, dass die Korrektur während der MonatsendverarbeitungEine Reihe von Geschäftsprozessen und Systemläufen, die am Ende eines Monats durchgeführt werden, um Finanzdaten abzuschließen und Berichte zu erstellen. nicht zu einem Engpass wird.
Notieren Sie die spezifischen Leistungsmetriken im BSFN-Quell-HeaderDer obere Teil einer C-Quellcodedatei für eine Business Function, der oft Metadaten, Kommentare und Versionsinformationen enthält. und in den OWM-ProjektnotizenNotizen, die im Object Workbench Manager (OWM) in JD Edwards gespeichert werden, um Informationen zu Entwicklungsprojekten und Objektänderungen zu dokumentieren., sobald die Optimierung verifiziert ist. Dokumentieren Sie den Baseline-Durchschnitt, den optimierten Durchschnitt und die verwendeten Testbedingungen, z. B. einen 1.000-Zeilen-Batch, der von etwa 40 Sekunden auf 30 Sekunden sinkt. Dies bietet dem CNC-Team und zukünftigen Entwicklern einen klaren BenchmarkEin Standard oder Referenzpunkt, anhand dessen die Leistung oder Qualität von etwas gemessen und verglichen wird. und verhindert, dass sie die Leistung bei einem zukünftigen ESU-RetrofitDer Prozess der erneuten Anwendung von kundenspezifischen Änderungen auf JD Edwards-Objekte nach der Installation eines Electronic Software Update (ESU). oder einem Tools Release-Upgrade versehentlich verschlechtern. Eine klare Dokumentation verwandelt eine einmalige Korrektur in ein dauerhaftes architektonisches AssetEin wertvoller Bestandteil der Systemarchitektur, der langfristigen Nutzen bietet und zur Stabilität und Effizienz des Gesamtsystems beiträgt..
Dieser Leitfaden zur Profilierung der BSFN-Leistung durch Log-Analyse und präzises Timing ist Teil einer Reihe über technische Standards der JDE-Entwicklung. Wenn diese Techniken für Ihr aktuelles Optimierungsprojekt relevant sind, empfehle ich Ihnen, weitere Artikel hier zu JDE Cache-MusternDesignmuster und Strategien für die effektive Nutzung des internen Caches in JD Edwards, um die Leistung zu verbessern. und SQL-OptimierungDer Prozess der Verbesserung der Leistung von SQL-Abfragen, um Daten schneller und effizienter aus einer Datenbank abzurufen oder zu ändern. zu lesen.