e - MIDRANGE SHOP

bin.midrange.shop.com

e - MIDRANGE SHOP

Vorwort – Seite 19VorwortWenn man seine Geldbörse in seinem Kopf entleert, kann sieeinem niemand mehr wegnehmen. Eine Investition in Wissenbringt immer die höchsten Zinsen.(Benjamin Franklin)Die Autoren dieses Buchs, Doug Pence und Ron Hawkins, habenden Großteil der letzten zwei Jahre damit verbracht, Tipps, Toolsund Techniken zu sammeln, von denen jeder AS/400-Programmierer profitieren kann. Unser Ziel war es, eineSammlung zusammenzustellen, die für alle RPG/400-Programmierer etwas bietet, egal ob Jungprogrammierer, diefrisch aus der Ausbildung kommen, oder erfahrene Programmierermit 10 Jahren Erfahrung.Ein I.T.P.-Fachbuch


Seite 20 – VorwortRPG IV at WorkGemeinsam mit V3R1 des Betriebssystems der AS/400 wurdeRPG IV eingeführt, das eine Lawine neuer Informationen undFunktionen mit sich brachte. Dieses Buch öffnet Ihnen die Tür zudiesen Informationen und macht sie zugänglich, so dass Sie diebreite Palette der Funktionalität der AS/400 vollständig nutzenkönnen.In diesem Buch wird eine große Auswahl von wichtigen Themenangesprochen – von der Entwicklung der Software für maximaleLeistung bis hin zum Einsatz moderner Tools für dieProblemlösung. Grundlegende Themen – wie z.B.Datenstrukturen, Stringverarbeitung und Subfiles – werden ausführlichbesprochen. Darüber hinaus erhalten Sie Informationenzu komplizierteren Gebieten, wie z.B. die Anwendungsprogrammschnittstellen.(APIs), die Integrated Language Environment (ILE) und dieVerwendung der Journalerstellung als Debugging-Tool. ImMittelpunkt der Kapitel stehen integrierte Funktionen,Datentypen und ILE-Subprozeduren. Von der Programmierungbis hin zur Kompilierung finden Sie hier Tipps für RPG-Programmierer aller Stufen. Sie erhalten eine Vielzahl von Tools,mit denen die Produktivität und Effizienz der Programmierungverbessert werden kann.Wenn Sie alle Tools kennen, die Sie nutzen können, werden Sieschnell feststellen, welche Methode für eine bestimmte Aufgabeam besten geeignet ist. Aus diesem Grund sollte dieses BuchBestandteil jeder RPG-Referenzbibliothek sein.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 211Leistung beginnt mit derProgrammentwicklungIn diesem Kapitel erfahren Sie, wie Sie die I/O-Aktivität im Systemreduzieren und die Nutzung des Haupt spei chers maximierenkönnen. Nachdem Sie sich mit diesem Kapitel beschäftigt haben,wissen Sie, wie sich die Integrated Language Environment (ILE)auf die Leistung auswirkt und wie Sie diese Auswirkungenbei der Pro gramm ent wick lung berücksichtigten sollten. Wirvergleichen die Vor- und Nachteile dynamischer und sta ti scherPro gramm auf ru fe, und Sie erhalten eine Vielzahl von Tipps zurMaximierung Ihrer Systemressourcen.Ein I.T.P.-Fachbuch


Seite 22 – Kapitel 1RPG IV at WorkJede Reise beginnt mit dem erstenSchritt...Bevor Sie Programme schreiben können, die auf der AS/400 einegute Leistung zeigen, müssen Sie verstehen, wel che Funktionendie Systemleistung am stärksten beeinträchtigen. Der größte Flaschenhalsauf den meisten Midrange-Systemen ist entweder dieI/O-Verarbeitung oder die Speicherverwaltung. Die Erstellungvon sowie das Löschen, Öffnen, Schließen, Lesen und Schreibenin Datendateien wirkt sich negativ auf die Systemleistung ausund führt dazu, dass sich die Ausführung der Programme verlangsamt.Die übermäßige Nutzung des Systemspeichers führtzum „Thrashing“ (Überlastung) sowie dazu, dass die Mehrzahlder Ressourcen ständig mit dem Auslagern von Objekten – vomSpeicher auf die Festplatte und vice versa – beschäftigt ist. Diemeisten Programme auf der AS/400 sind von dem einen oderanderen dieser Probleme betroffen.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 23I/O-Prozesse und ihre Auswirkungen aufdie Leistung der AS/400Die I/O-Prozesse sind langsam, weil sie nach wie vor von einemmechanischen Prozess abhängig sind. Die Daten werden aufeinem magnetischem Medium gespeichert und müssen unterVerwendung der beweglichen Kom po nen ten des Speichergerätsabgerufen oder geschrieben werden.Trotz großer technischer Errungenschaften in diesem Bereichinnerhalb des letzten Jahrzehnts ist die I/O-Ver ar bei tung dahernach wie vor für die meisten Leistungsprobleme auf der AS/400verantwortlich. Das Betriebssystem wur de mit Features wieJournalerstellung, RAID und Spiegelung (Mirroring) ausgestattet,um die Stabilität zu ver bes sern und den Einsatz zuverlässigerSoftware-Systeme zu ermöglichen. Allerdings kann ihreVerwendung dazu füh ren, dass das Flaschenhalsproblem bei denI/O-Prozessen noch größer wird. Die gute Nachricht ist, dassSie als Pro gram mie rer etwas tun können, um dieses Problem zulösen. Beginnen wir mit den Grundlagen.Kein Bedarf? Dann verwenden Sie es auch nicht!Vom Standpunkt der Leistung aus gesehen gehört das Öffnenund Schließen der Dateien zu den Ereignissen, die auf derAS/400 am meisten Zeit in Anspruch nehmen. Wenn ein RPG-Programm aufgerufen wird, werden die Da ten da tei en normalerweisevom System automatisch geöffnet. Wenn die Programme,mit denen Sie arbeiten, über eine große Anzahl von Dateienverfügen (manchmal ist das unvermeidbar), ist es möglich, dassSie lange warten müssen, bis das Programm gestartet wurde undalle Dateien geöffnet sind.Ein I.T.P.-Fachbuch


Seite 24 – Kapitel 1RPG IV at WorkDiese Wartezeit kann reduziert werden, wenn das Öffnen derDateien benutzergesteuert erfolgt, wenn die Da tei en bereitsmit einem Shared Data Path (Gemeinsam genutzten Datenpfad)geöffnet wurden – oder wenn beides der Fall ist.Dateien benutzergesteuert öffnenWenn Sie Dateien benutzergesteuert öffnen (benutzergesteuerteFile Opens), erhalten Sie die Möglichkeit, eine Datei nur dann zuöffnen, wenn Sie sie verwenden möchten. Wie Sie in Abbildung1.1 sehen, können Sie Ihr Programm so kodieren, dass Dateienbei Bedarf geöffnet werden – anstatt beim Laden des Programms.Ab V4R4 von OS/400 können Sie die integrierte Funktion%OPEN verwenden, um festzustellen, ob eine Datei geöffnet ist.Eine weitere Option wäre die Verwendung eines Fehlerindikatorsin der Open-Anweisung, wie in Abbildung 1.2 gezeigt.Wenn Sie vergessen, einen dieser Schritte auszuführen, erhaltenSie einen ärgerlichen kleinen RPG-Fehler.Wenn Sie Ihre Routinen für das Öffnen von Dateien an strategischenPunkten innerhalb Ihres Programms einfügen, ist esmöglich, dass bestimmte Dateien nicht geöffnet werden. Wenndas Programm z.B. mehrere Bildschirme ent hält, die abhängigvon der Reaktion des Benutzers verarbeitet werden, kann dasProgramm so kodiert werden, dass nur die Dateien geöffnetwerden, die mit den ausgewählten Bildschirmen verknüpft sind.Das bringt zweifachen Nutzen, weil natürlich Dateien, die nichtgeöffnet wurden, auch niemals geschlossen werden müssen.Was aber in Bezug auf Leistung vielleicht am wichtigsten ist:Benutzergesteuerte Dateien bieten eine ausgezeichnete Möglichkeit,Programm-Overhead so zu verteilen, dass er für denBenutzer weniger spürbar wird.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 25FFilename++IPEASFRlen+LKlen+AIDevice+.Keywords++++++++++++++++++++++++Comments++++FCustomer IF E K Disk UsrOpnCL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq...Comments* Open the file, if it is not already openC If not %Open(Customer)C Open CustomerCEndifC CustKey Chain Customer 99Abbildung 1.1: Benutzergesteuerte File Opens unterVerwendung von bedingten Attributen.FFilename++IPEASFRlen+LKlen+AIDevice+.Keywords++++++++++++++++++++++++Comments++++FCustomer IF E K DISK USROPNCL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq...CommentsC Open Customer 99C CustKey Chain Customer 99Abbildung 1.2: Benutzergesteuerte File Opens unterVerwendung von Fehlerindikatoren.Ein I.T.P.-Fachbuch


Seite 26 – Kapitel 1RPG IV at WorkDas Beispiel in Abbildung 1.3 illustriert, wie Sie das Programmso kodieren können, dass die Dateien geöffnet wer den, währendgleichzeitig das Programm auf die Reaktion eines Benutzerswartet. Execute Format (EXFMT) war eine hervorragendeErgänzung der RPG-Sprache. Diejenigen von uns, die denMidrange-Markt gut kennen, erinnern sich sicherlich noch daran,wie sie die Display File als primäre oder Bedarfsdatei programmierenmussten. Es waren separate Schritte für das Schreibenund Lesen der einzelnen Bildschirmformate erforderlich.FFilename++IPEASFRlen+LKlen+AIDevice+.Keywords++++++++++++++++++++++++Comments++++FDisplay CF E WorkstnFCustomer IF E K DISK UsrOpnFSalesmen IF E K DISK UsrOpnCL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq...Comments* Write Display FormatC Write Format* Open files, if neededC If not %Open(Customer)C Open CustomerCEndifC If not %Open(Salesmen)C Open SalesmenCEndif* Wait for input from the display fileC ReadFormat 99Abbildung 1.3: Benutzergesteuerte Opens zwischen demSchreiben und Lesen des Display-File-Formats.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 27In diesem Beispiel wird EXFMT mit den Opcodes WRITE undREAD ersetzt. Beachten Sie, dass mehrere be nut zer ge steu er teFile Opens zwischen WRITE und READ eingefügt wurden.Wenn dieses Programm ausgeführt wird, wird der Bildschirmangezeigt und die Dateien werden geöffnet, während sichder Operator auf den Bild schirm kon zen t riert. Wenn Sie dasProgramm auf diese Weise programmieren, werden die Dateiengeöffnet, wäh rend das Pro gramm auf den Benutzer wartet –anstatt umgekehrt.Wenn Sie diese spezielle Technik für das Schreiben und Lesenvon Anzeigeformaten verwenden, müssen Sie Ihre Display Fileals DFRWRT(*NO) kompilieren, damit das Schreiben einesBildschirms nicht verzögert wird, bis eine Leseoperation auftritt.Falls Sie das versäumen, wird der Bildschirm erst angezeigt,wenn die Leseoperation aus ge führt wird.Sofern Sie benutzergesteuerte File Opens verwenden, könnenSie das Schließen der Dateien ignorieren und das Pro gramm denAbschnitt übernehmen lassen, in dem der letzte Datensatzindikatorauftritt. Sollte die Pause am Pro gramm en de unerwünschteVerzögerungen verursachen, können Sie versuchen, den OpcodeRETURN zu ver wen den, anstatt LR zu aktivieren. Der OpcodeRETURN weist jedoch einige Nachteile auf, die später in diesemKapitel ausführlich besprochen werden.Ein I.T.P.-Fachbuch


Seite 28 – Kapitel 1RPG IV at WorkShared Data PathEine weitere Technik, die Ihnen dabei helfen wird, den Overheadbeim Programmstart zu reduzieren, verwendet eine Methode, dieals Shared Data Paths (Gemeinsam genutzte Datenpfade) bezeichnetwird. Shared Data Paths kön nen sehr nützlich sein,wenn Programme und Unterprogramme die gleichen Datendateienverwenden. Durch das Öffnen der Daten- oder Display Filesunter Verwendung von Shared Open Data Paths können nachfolgendeHigh-Level Language- (HLL-) Programme in ungefährder Hälfte der Zeit geöffnet werden.Das Beispiel in Abbildung 1.4 zeigt ein Anfangsprogramm, dasaufgerufen wird, wenn sich ein Benutzer zum ersten Mal im Systemanmeldet. Der Befehl Override Database File (OVRDBF)legt fest, dass der offene Datenpfad ge mein sam genutzt werdensoll, und der Befehl Open Database File (OPNDBF) öffnet dieDatendateien, die von der Anwendung am häufigsten genutztwerden. Der Befehl Monitor Message (MONMSG) wurde hinzugefügt,um zu verhindern, dass Fehlermeldungen auftreten,sobald die fragliche Datei bereits über einen offenen Datenpfadver füg te, als das Programm ausgeführt wurde.Wenn das Beispielprogramm in Abbildung 1.4 ausgeführt wird,werden die Dateien mit einem Shared Data Path geöffnet. DasMenü wird angezeigt. Programmaufrufe von Anwendungsprogrammeninnerhalb der gleichen Sitzung verwenden anschließendeinen vorhandenen offenen Datenpfad, anstatt einen neuenDatenpfad erstellen zu müssen.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 29PGMMONMSGENDPGMCPF0000OVRDBFOVRDBFOPNDBFOPNDBFGOFILE(CUSTOMER) SHARE(*YES)FILE(SALESMEN) SHARE(*YES)FILE(CUSTOMER) OPTION(*ALL)FILE(SALESMEN) OPTION(*ALL)CUSTMENUAbbildung 1.4: Anmelde-CL-Programm für das Öffnen vonDateien im Vorfeld sowie die Anzeige eines Anfangsmenüs.Eine weitere Methode für die Verwendung der offenen Datenpfadebesteht darin, die Datei so zu erstellen oder so zu ändern,dass der Datenpfad immer gemeinsam genutzt wird. BeachtenSie, dass Ihnen die Befehle Create Physical File (CRTPF),Change Physical File (CHGPF), Create Display File (CRTDS-PF) und Change Display File (CHGDSPF) die Möglichkeitbieten, die Objekte so zu kompilieren, dass der Datenpfad immerge mein sam genutzt wird.Es empfiehlt sich, den offenen Datenpfad einer Display File gemeinsamnutzen zu lassen, wenn mehrere Pro gram me innerhalbeines einzelnen Jobstreams vorhanden sind, die die gleicheDisplay File verwenden. So erhalten Sie die gleichen Vorteilewie bei der Verwendung mit einer Datenbankdatei.Ein I.T.P.-Fachbuch


Seite 30 – Kapitel 1RPG IV at WorkRPG IV: Die nächste GenerationILE wurde mit OS/400 V3R1 angekündigt. Ab diesem Zeitpunktkönnen Sie einen Datensatz mit einem Programm einlesen undmit einem anderen Programm aktualisieren, so lange der offeneDatenpfad innerhalb eines Jobs oder einer Aktivierungsgruppegemeinsam genutzt wird.Anders ausgedrückt, wenn Ihre Anwendung die gleichen physischenDateien oder Display Files wiederholt ver wen det, werdendiese Dateien innerhalb eines einzelnen Jobstreams eventuellmehrmals geöffnet und geschlossen. Das kann zu großen Verzögerungenbei der Anwendungsprogramm-Initiierung führen unddie gesamte Systemleistung spürbar beeinträchtigen. Es ist auchmöglich, dass Anwendungen Dateien öffnen, die nicht mehrgeschlossen werden (aus dem einen oder anderen Grund), wobeieine Situation entsteht, in der Ihr Job über mehrere offene Datenpfadefür die gleiche Datei verfügt. Wenn Sie Datenpfadegemeinsam nutzen, können diese Probleme vermieden werdenund der gesamte Systemdurchsatz kann verbessert werden.Ein weiterer interessanter Trick, der von ILE angeboten wurde,war die Fähigkeit, offene Datenpfade innerhalb einer Aktivierungsgruppe(die später in diesem Kapitel und in Kapitel 14näher erläutert wird) gemeinsam zu nutzen. Aktivierungsgruppenbieten etwas mehr Sicherheit als die gemeinsame Nutzungvon Datenpfaden durch einen Job, doch wie Sie erfahren werden,weisen Aktivierungsgruppen auch gefährliche Fallstricke auf.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 31Seien Sie vorsichtigWenn Sie in Erwägung ziehen, offene Datenpfade zu verwenden,müssen Sie sich zuerst ein paar wichtige Aspekte klarmachen.Erstens, der Begriff gemeinsam genutzt kann in diesem Falletwas irreführend sein. Nicht alle Sit zun gen haben Zugriff aufdie offenen Datenpfade. Nur Programme innerhalb der gleichenSitzung oder innerhalb des gleichen Jobs (optional Aktivierungsgruppe)nutzen gemeinsam den offenen Datenpfad.Sie müssen eine wichtige Warnung beachten, wenn Sie mit derBibliotheksliste manipulieren möchten, welche Datei Sie imSystem verwenden werden. Wenn eine Datei mit einem gemeinsamgenutzten offenen Datenpfad bereits ge öff net wurde, wirddiese Datei in jedem Fall vom Anwendungsprogramm verwendet,gleichgültig, ob sie sich aktuell in Ihrer Bibliothekslistebefindet. Das Programm verwendet einfach den offenen Datenpfadder gemeinsam ge nutz ten Datei. Wenn keine Dateien mitdem gleichen Namen in mehreren Bibliotheken vorhanden sind,ist das kein Pro blem. Aber wenn mehrere Bibliotheken vorhandensind, in denen sich Dateien mit dem gleichen Namenbe fin den, müssen Sie äußerst vorsichtig vorgehen. Wenn Sie dieseWarnung nicht beachten, ist es möglich, dass Dateien in Bibliothekeneingelesen oder aktualisiert werden, die sich nicht inIhrer Bibliotheksliste befinden! Eine Methode, mit der dieser„Albtraum“ verhindert werden könnte, besteht darin, diegemeinsame Nutzung des Datenpfads nur innerhalb der Aktivierungsgruppeeinzuschränken. Dies geschieht mit Hilfe desParameters OPNSCOPE des Befehls Override with Data BaseFile (OVRDBF).Ein I.T.P.-Fachbuch


Seite 32 – Kapitel 1RPG IV at WorkEin weiterer wichtiger Punkt, an den Sie denken müssen, wennSie offene Datenpfade verwenden, ist, dass die Datei immer verwendetwird, so lange die Sitzung existiert. Es spielt keine Rolle,ob ein Programm tatsächlich ausgeführt wird. Das kann zumProblem werden, wenn ein Job dedizierten Zugriff auf eine Dateibenötigt (z.B. mit File Saves). Dateien mit gemeinsam genutztenDatenpfaden bleiben „in Verwendung“, bis die Dateien geschlossensind oder die Sitzung beendet wurde.Wenn Sie gemeinsam genutzte offene Datenpfade verwenden,bedeutet das, dass Sie nicht davon ausgehen kön nen, dass sichder Dateizeiger an der gewünschten Stelle befindet, wenn einProgramm gestartet wird. Wenn Sie einen beliebigen Typ einersequenziellen Leseoperation ausführen, sollten Sie daher nichtvergessen, den Da tei zei ger (Poin ter) entsprechend zu setzen. Siemüssen sich darüber keine Gedanken machen, wenn der offeneDa ten pfad nicht gemeinsam genutzt wird, weil jedes Programmim Jobstream seinen eigenen unabhängigen Dateizeiger öffnetund beibehält.Sie müssen auch darauf Acht geben, wie Sie die Datei öffnen.Anders gesagt, es wird zu Problemen kommen, wenn Sie eineDatei als Input only öffnen und dann versuchen, die Datei ineinem nachfolgenden Programm zu ak tu a li sie ren.Es gibt weitere Sicherheits- und Funktionsaspekte, die es zu beachtengilt, bevor Sie diese Methode testen. Mehr Informationenüber diese Technik finden Sie im IBM AS/400 Database Guide,im CL Reference Manual und im ILE RPG/400 Programmer’sGuide.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 33Der Weg, den Sie wählen, ist wichtig fürIhre ReiseDer Weg, den Sie durch Ihre Daten wählen, ist häufig die wichtigsteEntscheidung, die Sie treffen können in Bezug auf dieProgrammleistung. Wie bereits in diesem Kapitel erklärt, habendie I/O-Prozesse drastische Auswirkungen auf die Leistung.Wenn Sie sich z.B. dafür entscheiden, eine Datei abhängig vomIndex anstelle der Ankunftsreihenfolge ein zu le sen, erhöhen Siemit dieser Entscheidung die Arbeitslast Ihres Systems. DieAS/400 HLLs bringen beim Einlesen einer Datei abhängig vomIndex nicht die gleiche Leistung wie beim Einlesen in Ankunftsreihenfolge.Der Grund? Wenn ein Programm eine Datendateiabhängig von einem Indexschlüssel einliest, muss das Systemzuerst den Schlüssel einlesen und anschließend die physischenDaten abrufen. Als Resultat muss das HLL-Programm dieAn zahl der I/O-Prozesse sofort erhöhen. Außerdem können dieDaten, da auf die physischen Daten per Zu falls ver fah ren zugegriffenwird, nicht auf die gleiche Weise in Blöcken verarbeitet(Abruf mehrerer Datensätze mit jeder I/O-Operation) wer denwie bei der Verarbeitung in Ankunftsreihenfolge. Damit wird dieSystemressourcen-Auslastung erhöht, wenn das HLL-Programmausgeführt wird.Ein I.T.P.-Fachbuch


Seite 34 – Kapitel 1RPG IV at WorkBeim Ausführen von RPG-Programmen ist Ihnen eventuell inIhrem Jobprotokoll eine Nachricht aufgefallen, die Sie darüberinformiert, dass der Schlüssel ignoriert wurde und die Daten inAnkunftsreihenfolge verarbeitet wurden. Der Grund dafür ist,dass das System zum Kompilierzeitpunkt feststellte, dass sich inIhrem RPG-Programm keine Hin wei se darauf befanden, dass dieDatei per Zufallszugriff bearbeitet werden sollte. Anders gesagt,es waren keine I/O-Operationen – wie z.B. CHAIN oder SETLL(Set Lower Limits) – vorhanden, von denen ein Schlüssel be nö -tigt wird. Deshalb entschied das System, dass das HLL-Programm die Daten in Ankunftsreihenfolge verarbeiten sollte,um die Effizienz zu erhöhen, und wies einen minimalenBlockungsfaktor zu (mehr zur Blockung erfahren Sie, wenn wirdie Dateiverarbeitung nach Index besprechen).Design-Aspekte in Bezug auf I/O-VerarbeitungBei der Entwicklung eines neuen Programms können Sieverschiedene Optionen wählen: Einlesen der Da ten sät ze inAnkunftsreihenfolge, Einlesen nach Index oder Verwendung derBefehle Open Query File (OPNQRYF) oder Format Data(FMTDTA), um die Daten geordnet in den gewünschten Pfadzu leiten. Welche dieser Optionen Sie wählen, hängt von verschiedenenFaktoren ab. Beantworten Sie diese beiden wichtigenFragen, bevor Sie die Methode fest le gen, die Sie einsetzenmöchten:• Ist das Programm interaktiv oder läuft es als Batch-Prozess?• Wie groß ist die verarbeitete Datei?Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 35Meist haben Sie keine großen Wahlmöglichkeiten, wenn Sie eininteraktives Programm kodieren. Sie werden viel Zeit damit verbringen,Ihre Verkaufsmitarbeiter davon zu überzeugen, dass esvorteilhaft ist, wenn die Interessenten in einer Subfile in Ankunftsreihenfolgeabgearbeitet werden. Die Mitarbeiter werdenjedoch verlangen, dass die Subfile in einer Reihenfolge präsentiertwird, die ihnen eine produktivere Arbeit ermöglicht, ohnedie Sys tem leis tung all zu sehr berücksichtigen zu müssen. Kannman es ihnen verdenken? Die Verbesserung der Sys tem leis tungist Ihre Aufgabe, nicht die Aufgabe des Verkaufspersonals.Batch-Programme sollten nahezu immer so geschrieben werden,dass FMTDTA oder OPNQRYF verwendet wird. Selbst wenn fürdie gewünschte Sequenz bereits ein Index verfügbar ist, kann dasProgramm vermutlich schnel ler ausgeführt werden, sobald Siedie Daten vor der Verarbeitung in die richtige Ankunftsreihenfolgebringen.Ein I.T.P.-Fachbuch


Seite 36 – Kapitel 1RPG IV at WorkVermeiden Sie das Einlesen von Dateien abhängig vomIndex – wann immer Sie könnenWenn zu dem von Ihnen geschriebenen Programm eine Datendateimit einer Handvoll Datensätzen (oder Hunderten von Datensätzen)gehört, kann es effizienter sein, die Datei abhängig voneinem Index in Schlüsselreihenfolge ein zu le sen. Der Grund dafürist, dass ein bestimmter Overhead anfällt, wenn FMTDTAoder OPNQRYF ausgeführt wird. Wenn jedoch die Datei, die Sieeinlesen, 250.000 Datensätze enthält, kommt es zu einer spürbarenLeis tungs ver bes se rung, wenn Sie die Daten zuerst in dierichtige Reihenfolge bringen. FMTDTA und OPNQRYF bietenzwei Optionen für die Erledigung dieser Aufgabe.An dieser Stelle sollte erwähnt werden, dass beide Optionennur für Batch-Jobs gelten. Interaktive Jobs mit FMTDTA oderOPNQRYF können die Leistung stark beeinträchtigen. JederJob, für den diese Tools benötigt wer den (im Allgemeinen dann,wenn eine große Anzahl von Datensätzen eingelesen werdenmuss), sollte als Batch-Prozess ausgeführt werden.Seitdem der Parameter ALLWCPYDTA(*OPTIMIZE) dem BefehlOPNQRYF hinzugefügt wurde, gibt es nur noch wenigeGründe, den Befehl FMTDTA (sort) zu verwenden. Diese neueOption ermöglicht es dem System, fest zu stel len, ob die Datensortiert werden sollen.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 37Die Verwendung von OPNQRYF kann sehr einfach oder sehrkompliziert werden. Angenommen Sie müssen z.B. einen täglichenVerkaufsbericht ausführen, der so geschrieben wurde, dasseine logische Datei über Ihre Kun den da tei mit 250.000 Kundendatensätzenabhängig vom Kundennamen eingelesen wird.Der Code in Abbildung 1.5 könnte in ein CL-Treiberprogrammeingefügt werden, um die Kundendatei (CUST) in Reihenfolgedes Kun den na mens zu bringen, bevor das RPG-Programmausgeführt wird. Das RPG-Programm kann dann so geändertwerden, dass die Datei CUST in Ankunftsreihenfolge eingelesenwird.OVRDBF FILE(CUST) SHARE(*YES)OPNQRYF FILE((CUST)) ALWCPYDTA(*OPTIMIZE) KEYFLD((CUSNAM))Abbildung 1.5: Verwendung von OPNQRYF, um Daten indie entsprechende Ankunftsreihenfolge zu bringen.Das Ergebnis dieser Änderung ist eine signifikante Leistungsverbesserung.Da das System den Index nicht zuerst einlesen unddanach die Daten abrufen muss, wird der Umfang der I/O-Prozesse reduziert. Das System verarbeitet außerdem die Datenautomatisch in Blöcken und jedes Mal, wenn das System auf dieFestplatte zugreift, werden mehrere Datensätze eingelesen.Ein I.T.P.-Fachbuch


Seite 38 – Kapitel 1RPG IV at WorkLogische Dateien sind ein wertvollesWerkzeug, aber verwenden Sie diesenicht zu oft.Die logische Datei ist eines der Glanzstücke in unserem Werkzeugkasten,aber die meisten von uns haben das Pri vi leg ihrerVerwendung schon einmal überstrapaziert. Warum sollten wirdas nicht? Die Verkaufsabteilung hat uns um einen neuen Berichtgebeten und es scheint kein Datenpfad zur Verfügung zu stehen,der die Daten in die exakte Reihenfolge bringt, die gewünschtwird. Es wäre so einfach, diese neue logische Datei über dieCustomer-Master-Datei einzufügen, den Bericht zu schreibenund die Anforderung von unserem Tisch zu bekommen...Tun Sie es nicht!Bevor Sie eine neue logische Datei hinzufügen, sollten Sie sichdie Konsequenzen Ihrer Aktionen vor Augen halten. Abhängigvon den DDS- und Kompilier-Optionen, die Sie verwenden,wenn Sie die logische Datei erstellen, sorgen Sie bei jederAktualisierung der physischen Datei für zusätzlichen System-Overhead auf Ihrer AS/400. Selbst wenn Sie die Datei so erstellen,dass die Indexpflege verzögert wird, muss nach wie vor aneinem bestimmten Punkt der Index erstellt werden.Die Entscheidung, ob Sie eine neue logische Datei erstellenkönnen, sollte abhängig von der Laufzeitumgebung gefällt werden(Batch oder interaktiv), für die sie benötigt wird. LogischeDateien sollten nicht für Programme er stellt werden, die in einerBatch-Umgebung ausgeführt werden.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 39Logische Dateien haben noch weitere Nachteile. Sie benötigenFestplattenplatz für den Index. Die Sicherung und Wiederherstellungvon Dateien dauert länger, weil der Zugriffspfadentweder gespeichert oder neu erstellt wer den muss. Außerdementsteht im System ein bestimmtes Maß von System-Overheadbei der Verwaltung logischer Da tei en sowie bei der Verwaltungphysischer Dateien, mit denen sie verknüpft sind.Daten in Blöcken verarbeiten, um dieI/O-Prozesse zu optimierenEine Technik mit der Bezeichnung Datensatz-Blockung gehörtzu den effizientesten Methoden, um die I/O-Pro zes se in IhrenProgrammen vorteilhaft einzusetzen. Hierfür optimieren Sie IhreProgramme so, dass sie gleichzeitig meh re re Datensätze„greifen“, sobald Daten benötigt werden, anstatt die Datensätzenacheinander abzurufen. Mal sehen, ob wir dieses Konzeptbesser illustrieren können.Gehen Sie jede Woche für Ihren Haushalt einkaufen? Warumbesorgen Sie sich bei jedem Besuch im Supermarkt einen Einkaufswagen?Können Sie es sich vorstellen, für eine fünfköpfigeFamilie ohne Einkaufswagen ein zu kau fen? Sie müssten dieGegenstände jeweils einzeln zur Kasse tragen. Das würde ewigdauern! So lächerlich diese Idee auch klingen mag, genau das istes, was die AS/400-Programmierer von ihrem System verlangen,wenn sie die Vorteile der Datensatz-Blockung nicht nutzen.Ein I.T.P.-Fachbuch


Seite 40 – Kapitel 1RPG IV at WorkDatensatz-Blockung ist ein effektives Werkzeug, wenn Siesequenzielle Leseoperationen mit einer Datei aus füh ren. Damitweisen Sie das System an, mehrere Gegenstände (ein Euphemismusfür den I/O-Puffer) in den Wagen zu legen, bevor Sie zurKasse (Ihrem Programm) gehen. Der Trick besteht darin, herauszufinden,wie viele Ge gen stän de in den Wagen passen, bevoralles auf den Boden fällt.Gleichgültig, ob Sie das vorschreiben: Ihr System wird auf jedenFall eine begrenzte Anzahl von Datensätzen als Block zusammenfassen.Wenn Ihr Programm eine Leseoperation ausführt,prüft das System den I/O-Puffer, um fest zu stel len, ob Datensätzeeingelesen werden müssen. Wenn das der Fall ist, liest das SystemDatensätze ein, bis der I/O-Puffer gefüllt ist (die Standardgrößeeines Blocks beträgt normalerweise 4 KB), und gibt danndie Steuerung an Ihr Programm zurück. Die Anzahl der eingelesenenDatensätze, bis der Puffer gefüllt ist, hängt von der physischenGröße Ihrer Datensätze sowie von der Größe der Puffer ab.In vielen Fällen kann die Leistung verbessert werden, wenn Sieeine Puffergröße wählen, die in etwa der Menge an Speicherentspricht, die das System für einen Open Data Path (ODP)benötigt (64 KB).Um den optimalen Blockungsfaktor für die Datei zu berechnen,die Sie kopieren, teilen Sie die physische Da ten satz län ge derDatei durch die Größe des ODP für den Job (64 KB).Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 41Übertreiben Sie es nichtSie fragen sich eventuell, warum Sie nicht einfach einen wirklichgroßen Blockungsfaktor verwenden, um alle Pro ble me zu lösen.Auch wir kennen diese Technik aus der Praxis und sie scheint gutzu funktionieren. Das Problem ist dabei jedoch, dass das Systemnur mit einer Puffergröße zurecht kommt, die kleiner oder gleichder Größe des ODPs ist. Zusätzlicher Overflow wird automatischauf Festplatte geschrieben oder „gecached“. Das Endergebnisdieser Technik ist, dass die Datensätze zweimal eingelesenwerden müssen – einmal aus der Datenbankdatei und einmal ausdem Überlaufpuffer.Wie Sie sehen, ist es die beste Lösung, einen Blockungsfaktor zuberechnen, dessen Größe in etwa der Größe des ODPs entspricht,ohne eine Überlaufbedingung entstehen zu lassen. Sie wendenden neu berechneten Blo ckungs fak tor mit Hilfe des BefehlsOVRDBF an.Sehen wir uns das Beispiel in Abbildung 1.6 an. Wir haben denoptimalen Blockungsfaktor berechnet, indem wir 65.535 (64 KBminus 1) durch die Datensatzlänge der Datei CUST (die Datensatzlängewar 58) geteilt haben. Das Ergebnis ist 1.129,91; unseroptimaler Blockungsfaktor lautet also 1.129. Anschließend gebenwir den Befehl OVRDBF aus, um den Blockungsfaktorfestzulegen und unser RPG-Programm aufzurufen.PGMOVRDBF FILE(CUST) SEQONLY(*YES 1129)CALL MYPROGRAMDLTOVR FILE(CUST)ENDPGMAbbildung 1.6: Verwendung von OVRDBF für die Anwendungeines Blockungsfaktors.Ein I.T.P.-Fachbuch


Seite 42 – Kapitel 1RPG IV at WorkVerwendung von SETOBJACC für dieReduzierung von I/O und die Ma xi mie rungder SpeicherauslastungIn diesem Kapitel erhielten Sie von uns den Rat, die Auswirkungenzu begrenzen, die der mechanische Prozess des Einlesensvon Daten von der Festplatte hat, der mit der Programmausführungverbunden ist. Eine Methode hierfür besteht darin, dieAuslastung des Systemspeichers zu maximieren.Der Befehl Set Object Access (SETOBJACC) wird verwendet,um Objekte (vorwiegend Programme, Da ten bank da tei en undihre Zugriffspfade) in den Speicher zu laden und so die Anzahlder Festplatten-I/O-Prozesse zu re du zie ren, die vom Systembenötigt werden. Wenn der Index und die Daten einer Datenbankdateiaus dem Spei cher anstatt von Festplatte verarbeitetwerden können, entfällt der mechanische Teil der Aufgabe unddie Ver ar bei tung erfolgt um einiges schneller. Wie gut das Ganzefunktioniert, hängt dabei von der Hauptspeichermenge ab, die inIhrem System vorhanden ist, von der Tageszeit, zu der der Jobausgeführt wird, und von der Größe der Dateien oder Pro gram me,mit denen Sie arbeiten.Aus zwei Gründen sind die Vorteile, die das Verschieben einerphysischen Datei in den Speicher hat und die per Zufallszugriff(nach Schlüssel) verarbeitet werden muss, bei weitem größer alsdie Vorteile, die das gleiche Ver fah ren für eine Datei hat, die inAnkunftsreihenfolge eingelesen werden wird:Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 43• Wenn Sie Ihr RPG-Programm kompilieren, prüft der Compiler,ob Sie eine Datei in An kunfts rei hen fol ge verarbeiten.Sobald das der Fall ist, werden vom System Datensätzeautomatisch in Blöcken verarbeitet (Blockung), wenn dasProgramm ausgeführt wird. Blockung ist ein Begriff für eineSituation, in der das System mehrere Blöcke von Daten fürjede I/O-Anforderung abruft, da das System die Reihenfolgefestgestellt hat, in der Sie die Datensätze einlesen werden.Die Anzahl der abgerufenen Datenblöcke hängt von denAlgorithmen innerhalb des Be triebs sys tems ab.Blockung ist bei Dateien, auf die per Zufallsverfahrenzugegriffen wird, kein effektives Verfahren, weil das Systemzusätzliche Arbeit erledigen muss, um Datensätze inden Speicher zu laden, die nicht in der vom Programmer war te ten Reihenfolge sind. Die Leistung kann sich sogarverschlechtern, wenn Dateien betroffen sind, auf die imZu falls ver fah ren zugegriffen wird.• Wenn Sie eine Datei abhängig von einem Indexschlüsseleinlesen, muss das System zuerst den In dex da ten satzeinlesen und dann die physischen Daten suchen.Ein I.T.P.-Fachbuch


Seite 44 – Kapitel 1RPG IV at WorkSie erhalten den größten Vorteil, wenn Sie sowohl die physischeDatei als auch ihren Zugriffspfad gleichzeitig in den Hauptspeichereinfügen können. Alle I/O-Anforderungen von IhremProgramm aus erfolgen im Speicher anstatt auf Festplatte.Wenn Sie den Befehl SETOBJACC verwenden, um eine Dateiin den Speicher zu laden, ähnelt dieser Prozess der Datensatz-Blockung, mit dem Unterschied, dass Sie die gesamte Datei aufeinen Schlag in den Speicher laden kön nen. Im Fall von Dateien,auf die im Zufallsverfahren zugegriffen wird, empfiehlt es sich,sowohl die Daten als auch den Zugriffspfad in den Speicherzu laden – falls möglich. Das kann große Auswirkungen aufdie Programmleistung haben, weil der mechanische Prozessder Festplatten-I/O-Prozesse damit entfällt. Der BefehlSETOBJACC kann interaktiv oder von einem Programm ausausgeführt werden.Bitte beachten Sie, dass der Befehl SETOBJACC nicht sinnvollist, wenn die Datei als „Output only“ spezifiziert wurde.Der Grund dafür ist, dass die Ausgabeoperationen im Speicherbereits „gepuffert“ sind (wie Sie sich sicherlich erinnern, werdenalle Datensätze an das Dateiende angehängt, vorausgesetzt, dasskeine gelöschten Da ten sät ze wiederverwendet werden) undkeine starke I/O-Aktivität verursachen.Der Befehl SETOBJACC wird in zwei Variationen angeboten:in der klassischen Version und in der „Tutti-Frutti“-Version.Die klassische Version ist sehr schlicht und sehr empfehlenswert,wenn Ihr System nur eine einzige Auf ga be erfüllt (z.B.monatliches oder tägliches Hochfahren). Tutti-Frutti ist etwasaufwendiger, aber die Vorteile können ebenfalls groß sein.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 45Einmal die klassische Version, bitteIn den meisten AS/400-IT-Abteilungen werden zu bestimmtenTageszeiten, in bestimmten Wochen oder Monaten spezielleProzesse ausgeführt. Wenn auch Sie sich diesen Luxus leisten,empfiehlt es sich, diese Version des Befehls SETOBJACCanzusehen, um die dedizierten Jobs, die zu diesen Zeiten ausgeführtwerden, zu beschleunigen.In unserem Beispiel in Abbildung 1.7 nehmen wir unsere physischeKundendatei (CUST) in unsere Bibliothek (FILES) auf undfügen sie in den Hauptspeicher ein. Wir möchten die Dateiper Zufallsverfahren abhängig vom Schlüssel verarbeiten, dahergeben wir auch den Parameter MBRDATA an, damit sowohl dieDaten als auch der Zugriffspfad in den Hauptspeicher eingefügtwerden (wir hätten auch angeben können, dass nur der Zugriffspfadoder nur die Daten verschoben werden).SETOBJACC OBJ(FILES/CUST) OBJTYPE(*FILE) POOL(*JOB) MBRDATA(*BOTH)Abbildung 1.7: Verwendung von SETOBJACC, um Objekte inden Hauptspeicher zu laden.Ein I.T.P.-Fachbuch


Seite 46 – Kapitel 1RPG IV at WorkWenn der Befehl SETOBJACC ausgeführt wird, nimmt das Systemeinen „Schnappschuss“ des Speichers auf, bevor Ihr Objektin den Speicher geladen wird. Anschließend wird eine Meldungin Ihr Jobprotokoll gesendet, die Sie darüber informiert, wie großder Vorteil sein wird, den die Ausführung des Befehls hat. Abbildung1.8 zeigt ein Bei spiel dafür, wie diese Meldung aussieht:19K of CUST brought to pool with 996K unused.Abbildung 1.8: Nachricht, die gesendet wird, wenn der BefehlSETOBJACC ausgeführt wird. Zeigt die Objektgröße und denverfügbaren Platz im Speicherpool.Die Nachricht informiert darüber, dass, bevor die Datei CUSTmit 19 KB in den Speicher eingefügt wurde, 996 KB Speicherverfügbar waren. Da aus dem Hauptspeicher keine Objekteentfernt wurden, als z.B. ein Job endete, steht eventuell keinSpeicher zur Verfügung. Die Objekte im Speicher bleiben dort,bis der Platz anderweitig benötigt wird. Wenn Sie die Nachrichtdarüber informiert, dass 0 KB verfügbar waren, bevor versuchtwurde, Ihr Objekt in den Speicher einzufügen, sollten Sie zuerstden Inhalt des Speicherpools entfernen.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 47Räumen Sie den Pool auf!Nehmen wir für unser Beispiel an, dass der Job interaktiv ausgeführtwird. In diesem Fall sind die Parameter für den BefehlClear Memory Pool (CLRPOOL) recht unkompliziert (Abbildung1.9).CLRPOOL POOL(*JOB)Abbildung 1.9: Inhalt des Speicher-Pools entfernen.Der Befehl CLRPOOL löscht alle Objekte aus dem Hauptspeicherpool,damit genug Platz für die Objekte ist, die wir dorteinfügen möchten. Der Nachteil davon ist, dass Ihr Job ebenfallsaus dem Hauptspeicher entfernt wird. Wir empfehlen Ihnendaher, sich abzumelden, um Ihren Job zu beenden, nachdem Sieden Befehl CLRPOOL ausgeführt haben. Wenn Sie sich erneutanmelden, wird der Speicherpoolinhalt gelöscht und Sie habeneinen neuen Job ge star tet.Bei bereinigtem Speicher-Poolkönnen Sie den BefehlSETOBJACC ausführen, um die Objekte, die Sie ver wen denwerden, in den Hauptspeicher einzufügen. Die übrigen Schrittedes Jobs werden anschließend normal aus ge führt. Der einzigeSchritt, der dann noch aussteht, ist das Löschen Ihrer Objekte ausdem Speicher, sobald Ihr Job fertig gestellt ist. Hierfür gibt eszwei Methoden. Sie können den Befehl CLRPOOL eingeben wievor dem Einfügen von Objekten in den Speicher, oder Siekönnen den Befehl SETOBJACC mit leicht veränderten Parameternver wen den (Abbildung 1.10).Ein I.T.P.-Fachbuch


Seite 48 – Kapitel 1RPG IV at WorkSETOBJACC OBJ(FILES/CUST) OBJTYPE(*FILE) POOL(*PURGE)Abbildung 1.10: Löschen von Objekten aus dem Hauptspeichernach Verwendung von SETOBJACC , um sie dort einzufügen.Zeit für Tutti-FruttiDie Tutti-Frutti-Methode wird in nicht-dedizierten Umgebungeneingesetzt, es gelten aber die gleichen grund sätz li chen Prinzipienund Vorteile wie bei der klassischen Version. Der Unterschiedliegt darin, dass sie eigene Spei cher pools konfigurieren, um dievon Ihnen am häufigsten verwendeten Objekte zu speichern.Speicher-PoolsSpeicher-Pool ist ein Ausdruck, der verwendet wird, um die Aufteilungdes Speichers zu beschreiben. Wenn Sie auf der AS/400Speicher installieren, wird dieser automatisch in den Speicher-Pool eingefügt, der als *BASE be zeich net wird. Wenn Sie IhreStandard-Systemkonfiguration unverändert lassen, erhalten alleIhre Subsysteme ihren Speicher aus diesem Pool.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 49In einer nicht-dedizierten Umgebung ist es am besten, ein eigenesSubsystem zu erstellen. Wenn Sie ein Sub sys tem erstellenund diesem System Speicher zuweisen, wird der Speicher, dervon dem neuen Subsystem verwendet wird, dem Speicher-Pool*BASE entnommen. Der Befehl für die Zuweisung von 500 KBzu Pool Nummer 2 im Sub sys tem SETOBJS wird in Abbildung1.11 gezeigt. Stellen Sie sicher, dass genügend Speicher im Speicher-Pool*BASE vorhanden ist, bevor der Befehl ausgeführtwird. Wenn nicht genügend Speicher vorhanden ist, solltenSie die Größe eines anderen Subsystems verringern, das denSpeicher in den Pool *BASE zurückverlagert. Dies kannerfolgen, während Sie in der Anzeige des Befehls Work withSystem Status (WRKSYSSTS) arbeiten.CRTSBSD SBSD(QGPL/SETOBJS) POOLS((1 *BASE)(2 500K 1))Abbildung 1.11: Erstellung eines Subsystems für SETOBJACC.Der Wert 500 KB dient nur als Beispiel. Sie müssen diese Zahlabhängig von der Größe der Objekte anpassen, die Sie in denSpeicher einfügen werden. Wenn Sie den Befehl SETOBJACCausführen, wird eine Meldung an ge zeigt (ähnlich der Meldung inAbbildung 1.8), die Sie darüber informiert, wie groß das Objektist, das in den Spei cher eingefügt wurde, sowie über den verfügbarenPlatz im Pool vor dem Einfügen des Objekts.Ein I.T.P.-Fachbuch


Seite 50 – Kapitel 1RPG IV at WorkDas Beispiel in Abbildung 1.8 zeigt, dass das Objekt CUST eineGröße von 19 KB aufweist und in einen Speicher-Pool eingefügtwurde, in dem 996 KB verfügbar waren, bevor der BefehlSETOBJACC ausgeführt wurde. Wenn nicht genug Platz für diegesamte Datei vorhanden ist, kann es trotzdem vorteilhaft fürSie sein, so viel von der Da tei wie möglich im Speicher unterzubringen.Noch besser wäre es zwar, wenn Sie das Objektkomplett in den Pool einfügen könnten. Aber vergessen Sienicht, dass nicht die Größe des Objekts wichtig ist, sondern dieAnzahl der Zugriffe auf die Datei. Sie können die Antwortzeitauch verbessern, indem Sie z.B. eine 20 KB-Datei (bzw. einehalbe 40 KB-Datei) in den Speicher einfügen, wenn auf dieseDatei täglich Millionen Mal zugegriffen wird.Der nächste Schritt besteht darin, das Subsystem zu starten undden Speicher-Pool zu initialisieren. Sie sollten die sen Vorgangautomatisieren, indem Sie ihn im Rahmen Ihrer täglichen Routineaufgabenausführen. Der Befehl in Abbildung 1.12 startet dasSubsystem und löscht den Inhalt von Pool 2 in unseremSETOBJ-Subsystem, das heißt an dem Ort, wo wir unsere Dateienladen werden. Lassen Sie sich von dem Nummerierungssystemder Pools nicht verwirren. Das Betriebssystem derAS/400 teilt Speicher in Pools ein und nummeriert sie. Pool 1 istder MACHINE-Pool, Pool 2 ist der *BASE-Pool. Alle anderenPools werden ab hier der Reihe nach durchnummeriert. Zusätzlichkann jeder Pool bis zu zehn Mal weiter eingeteilt werden.Unser Pool wird zwei Mal eingeteilt, und wir fügen den Speicherin Pool 2 ein.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 51STRSBS SBSD(QGPL/SETOBJS)CLRPOOL POOL(SETOBJS 2)Abbildung 1.12: Bereinigen des vom Benutzer erstelltenHauptspeicher-Pools.Wir können nun die Datei in den Speicher einfügen, indemwir den Befehl in Abbildung 1.13 ausführen. Der BefehlSETOBJACC wird extrem schnell ausgeführt, d. h. die Ausführungdauert bei den meisten Dateien nur wenige Se kun den.SETOBJACC OBJ(FILES/CUST) OBJTYPE(*FILE) POOL(SETOBJS 2) MBRDATA(*BOTH)Abbildung 1.13: Verwendung von SETOBJACC, um Objekte ineinen privaten Hauptspeicher-Pool einzufügen.Schneller Speicher, langsame Festplatten-I/O-ProzesseWenn Sie eine Datei oder ein Programm in den Speicher einfügen(was mit relativ wenigen I/O-Prozessen erfolgen kann),werden Tausende von Festplattenzugriffen während des ganzenTages überflüssig und Sie können enorme Einsparungen beimTransaktionsdurchsatz erzielen. Es ist etwas Planung in Bezugauf die Frage erforderlich, welche Objekte sich im Speicherbefinden sollten, aber die Vorteile können den Aufwand durchausrechtfertigen.Wie Sie sehen können, ist der Unterschied zwischen „klassisch“und „Tutti-Frutti“ nicht allzu groß. Genießen Sie die verbesserteLeistung und Guten Appetit.Ein I.T.P.-Fachbuch


Seite 52 – Kapitel 1RPG IV at WorkZu viel des Guten kann schädlich seinWie gesagt, Sie sollten sich darauf konzentrieren, die I/O-Prozesse zu reduzieren und die Auslastung des Sys tem spei cherszu maximieren. Aber wie bei vielen positiven Dingen im Lebenkann es leicht passieren, sich dabei zu übernehmen.Wenn Ihr System nicht genug Speicher aufweist oder wenn Sieden Speicher zu stark auslasten, um den Umfang der I/O-Aktivitätzu reduzieren, kann sich die Systemleistung insgesamt verschlechtern,weil das System „Thrashing“ ausführt. In diesemFall konkurrieren zu viele Objekte um den Systemspeicher unddas System ver sucht, damit Schritt zu halten, indem es alle seineRessourcen damit beschäftigt, Seiten temporär vom Speicher aufdie Festplatte und vice versa zu verschieben. Dieser Prozessähnelt dem Leistungsabfall, den Sie auf Ihrem PC be o b ach ten,falls nicht genügend Speicher vorhanden ist, um einen Jobauszuführen, und damit „virtueller Speicher“ verwendet wird.Es gibt eine Vielzahl von Tools, die Ihnen helfen können, zuanalysieren, ob Ihr System mit diesem Problem belastet ist.Wir empfehlen Ihnen, eine Schulung im Work Management zuabsolvieren, wenn Sie glauben, dass das der Fall ist.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 53Wiederverwendung gelöschter DatensätzeDie Chancen stehen ziemlich gut, dass die meisten der physischenDateien in Ihrem System in drei Kategorien ein ge teiltwerden können:• Dateien, die sich fast nie verändern.• Dateien, in die regelmäßig Datensätze geschrieben werden,die aber niemals gelöscht werden.• Dateien, aus denen häufig Datensätze geschrieben und diegelöscht werden.Wir befassen uns in diesem Abschnitt mit dem zweiten und drittenTyp Datei. Da die Informationen in diesen Da tei ty pen nicht statischsind, können sie zu Situationen führen, die sich negativ aufdie Leistung auswirken, wenn sie nicht optimal gepflegt werden.Wenn Sie eine Datei im Zufallsverfahren nach Schlüssel einlesenmüssen, verbessert sich die Systemleistung, wenn sich die physischenDaten in der Datei in der gleichen Reihenfolge befindenwie der Schlüssel, nach dem Sie diese einlesen. Der Grund dafürist, dass es so wahrscheinlicher wird, dass eine einzelne I/O-Operation einen Block von Daten abruft, der mehrere Datensätzefür die Verarbeitung enthält. Wenn die Reihenfolge der Datenund der Index nicht einander entsprechen, wird bei der I/O-Operation eventuell ein einzelner Datensatz verarbeitet, bevordas Sys tem einen weiteren Block abruft (und es ist möglich, dassder gleiche Block später erneut eingelesen werden muss). DasResultat ist eine starke Erhöhung der Anzahl von I/O-Operationen,die erforderlich sind, damit der Job beendet werden kann.Ein I.T.P.-Fachbuch


Seite 54 – Kapitel 1RPG IV at WorkWenn ein Datensatz zu einer Datei hinzugefügt wird, werden dieDaten normalerweise an das Ende der Datei ein ge hängt, wennnicht der Parameter REUSEDLT für die Datei angegeben wurde.Wenn REUSEDLT für eine phy si sche Datei angegeben wurde,versucht das System, jedes Mal, wenn Sie neue Datensätze in dieDatei einfügen, Da ten sät ze „wiederzuverwenden“, die zuvorgelöscht wurden. Dieser Parameter muss angegeben werden,wenn die Datei erstellt wird (CRTPF), oder Sie können die Dateimodifizieren, indem Sie den Befehl Change Physical File(CHGPF) ausführen.Die Verwendung des Parameters REUSEDLT kann sich negativauf die Systemleistung auswirken. Das System muss jedes Mal,wenn ein neuer Datensatz hinzugefügt wird, nach gelöschtenDatensätzen suchen. Je nach Größe der Datei und Prozentsatzder gelöschten Datensätze kann das zum Problem werden.Programme, die entwickelt wurden, um die Datei in Ankunftsreihenfolgezu verarbeiten, können sich ebenfalls anders verhaltenals ursprünglich geplant, weil neue Datensätze an Stelleneingefügt wurden, an denen zuvor gelöschte Datensätze vorhandenwaren.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 55Der Befehl RGZPFMGleichgültig, wie die Datensätze hinzugefügt werden, wenn derIndex per Zufallsverfahren ergänzt wird, befinden sich der Indexund die Daten nicht in der gleichen Reihenfolge, nachdem dieDatensätze hinzugefügt wurden. Wie bereits mehrmals erwähnt,sind die I/O-Prozesse der größte Flaschenhals für die Systemleistung.Sie können diesen Flaschenhals vermeiden, indem SieDateien pflegen, auf die häufig zugegriffen wird. Der BefehlReorganize Physical File Member (RGZPFM) kann verwendetwerden, um die Daten und den Index wieder in die gleicheRei hen fol ge zu bringen und um gleichzeitig alle Datensätze zuentfernen, die für das Löschen markiert wur den. Alle Programme,die die Datei im Zufallsverfahren verarbeiten, profitierenvon dieser Vorgehensweise, weil zu erwarten ist, dass dieI/O-Prozesse damit reduziert werden (die Datensatzgröße kannsich ebenfalls darauf aus wir ken, weil diese in direkter Beziehungzur Anzahl der Datensätze pro einzelnem I/O-Prozess steht).Die wichtigsten Funktionen des Befehls RGZPFM bestehendarin, gelöschte Datensätze aus einer physischen Datei zu entfernenund die Reihenfolge der Datensätze zu ändern, um einemausgewählten Index zu entsprechen (dabei handelt es sich normalerweiseum den primären Schlüssel für die physische Datei).Wenn eine physische Da tei von einer bestimmten logischenDatei eingelesen wird, kann es vorteilhaft sein, die Datensätze inder Datei zu re or ga ni sie ren, damit sie dem Schlüssel für dieselogische Datei entspricht.Ein I.T.P.-Fachbuch


Seite 56 – Kapitel 1RPG IV at WorkEs kann überraschend sein, wie viel Festplattenplatz vongelöschten Datensätzen belegt wird, wenn Ihre Da ten da tei enniemals reorganisiert werden. Wenn ein Datensatz auf derAS/400 gelöscht wird, wird weiterhin der gleiche Festplattenplatzbelegt, bis der Datensatz wiederverwendet wird (wenn dieDatei für die Verwendung der Option Reuse Deleted Records[REUSEDLT] vorgesehen war) oder bis der Befehl RGZPFMausgeführt wird. Die Datei darf nicht in Verwendung sein,während der Befehl RGZPFM ausgeführt wird; in einigen Unternehmenkann es daher eventuell problematisch werden, wennkeine Ausfallzeiten für die Ausführung von Sys tem war tungsarbei ten eingeplant werden.Wenn Sie keine zusätzlichen Parameter angeben, entfernt derBefehl RGZPFM einfach die gelöschten Datensätze aus derphysischen Datei. Der Parameter KEYFILE kann verwendetwerden, um die Daten so einzuteilen, dass sie dem Schlüssel derphysischen Datei oder dem Pfad einer ausgewählten logischenDatei entsprechen. Die Bei spie le in den Abbildungen 1.14 bis1.16 zeigen jeweils, wie Ihre Kundendatei reorganisiert wird,wobei nur die ge lösch ten Datensätze entfernt werden und anschließendneu in Reihenfolge der Schlüssel der physischenDatei an ge ord net werden. Das Resultat ist, dass sich die Datenin Reihenfolge des Kundennamens befinden (d.h. dem Pfad derlo gi schen Datei CUSBYNAM entsprechen).Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 57RGZPFM FILE(CUST)Abbildung 1.14: Verwendung von RGZPFM, um gelöschteDatensätze aus einer Datei zu entfernen.RGZPFM FILE(CUST) KEYFILE(*FILE)Abbildung 1.15: Verwendung von RGZPFM , um gelöschteDatensätze zu entfernen und die Daten neu anzuordnen,um dem Schlüssel der phy si schen Datei zu entsprechen.RGZPFM FILE(CUST) KEYFILE(CUSBYNAM)Abbildung 1.16: Verwendung von RZPFM , um gelöschteDatensätze zu entfernen und die Daten neu anzuordnen,um dem Schlüssel einer lo gi schen Datei zu entsprechen.Hinweis: Es empfiehlt sich nicht, den Parameter KEYFILE füreine Datei anzuwenden, die keinen Schlüssel aufweist. DasResultat ist entweder eine Fehlernachricht oder eine Datei, dienicht reorganisiert ist.Ein I.T.P.-Fachbuch


Seite 58 – Kapitel 1RPG IV at WorkBefehl RGZPFFLTRDer Befehl Reorganize Physical File Filter (RGZPFFLTR) – ausführlicherläutert in Kapitel 11 – kann ein wert vol les Tool sein,wenn Ihr Unternehmen sich den Luxus leistet, automatischeSystemstillstandzeiten zu planen, um die Systemwartung auszuführen.Der Befehl kann als Autostart-Job konfiguriert werden,der automatisch alle Da tei en in Ihrem System prüft, um festzustellen,welche Dateien reorganisiert werden müssen.Anhand des Prozentsatzes, den Sie verwenden, wenn Sie denBefehl RGZPFFLTR aufrufen, wird bestimmt, ob der ProzessRGZPFM er for der lich ist.Der Prozentsatz bezieht sich auf die Anzahl der gelöschtenDatensätze in einer Datei, die Sie für akzeptabel halten. WennSie z.B. glauben, dass alle Dateien, in denen mindestens 10 Prozentder Datensätze gelöscht sind, re or ga ni siert werden sollten,können Sie den Parameter auf 10 Prozent setzen.In jedem Fall werden die Dateien, die den vorgeschriebenen Prozentsatzkriterienentsprechen, automatisch in der Reihenfolgedes Schlüssels der physischen Datei reorganisiert. Abhängigvon der Anzahl der Dateien, die den an ge ge be nen Kriterienentsprechen, und von der Geschwindigkeit Ihres Systems kannes eine Weile dauern, bis dieser Prozess beendet ist, aber dieAuswirkung auf die Systemleistung und die DASD-Nutzungkönnte insgesamt po si tiv sein.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 59Leistung und der dynamischeProgrammaufrufDie Fähigkeit der AS/400, Jobstreams in kleinere Unterprogrammeaufzuteilen, gehört zu den Vorteilen des Systems. RPG und CLkönnen genutzt werden, um größere Jobs in kleinere, leichter verwaltbareKomponenten aufzuteilen, die anderweitig verwendetwerden können. Diese modularen Komponenten können als wiederverwendbarerCode bezeichnet werden. Sie können von einerVielzahl von Positionen aus aufgerufen werden, um die gleicheFunk ti on auszuführen. Wir halten es für eine gute Idee, IhreProgramme mit diesem Gedanken im Hinterkopf zu kodieren!Ein Beispiel für diesen Modultyp ist unser Window Subfile-Programm, das verwendet wird, um festzustellen, zu welchemDrucker ein Bericht gesendet werden sollte (dieses Beispielprogrammwird in Kapitel 2 abgebildet). Sie können dieses Programmvon jedem beliebigen RPG- oder CL-Programm ausaufrufen, und der Operator kann einen Drucker auswählen.Die Auswahlwerte werden in die Parameter des aufrufendenProgramms zurückgegeben.Das Programm kann von jedem anderen Programm aufgerufenwerden, das entwickelt wurde, um Druckausgaben anzufordern.Die Tatsache, dass das gleiche Programm von vielen verschiedenenPositionen aus aufgerufen werden kann, lässt den Codewiederverwendbar werden. Der größte Vorteil von wiederverwendbaremCode ist, dass Sie mit jeder Optimierung gleichzeitigdie Programme verbessern, mit denen er aufgerufen wird.Ein I.T.P.-Fachbuch


Seite 60 – Kapitel 1RPG IV at WorkWie bei den meisten positiven Dingen im Leben hat das allesjedoch seinen Preis. Die Aufteilung längerer Jobstreams in kleinere,leichter verwaltbare Komponenten kann sich negativ aufdie Systemleistung auswirken. Wie bereits erwähnt, kündigteIBM ILE mit V3R1 an. Zum ersten Mal in der Geschichte derIBM Midrange-Sys te me erhielten wir die Möglichkeit, zwischendynamischen und statischen Programmaufrufen zu wählen.Pandoras BüchseEin dynamischer Aufruf ist ein Aufruf eines anderen Programms,dessen Adresse zur Laufzeit aufgelöst wird. Dies ist ein Aufruf,den wir seit jeher in OPM-Programmen einsetzen. Er ist sehrflexibel, da die Bi bli o theks lis te genutzt werden kann, um daseigentliche Programm für die Ausführung aufzufinden, wasbedeutet, dass die Änderung bei Laufzeit möglich ist. DieInitiierung erfolgt sehr langsam, besonders wenn Sie Programmeaufrufen, die in einer anderen Sprache geschrieben sind.Statische Aufrufe werden mit dem Standard-Opcode CALL ausgeführt.Ein statischer Aufruf ist der Aufruf eines anderen Programms,dessen Adresse aufgelöst wird, wenn das Pro gramm erstellt wird.Dieser Typ Aufruf erfolgt sehr schnell – vier Mal schneller alsein dynamischer Aufruf. Die Initiierung erfolgt fast so schnell,als wenn das aufgerufene Programm als Subroutine im aufrufendenProgramm kodiert wäre. Sie führen einen statischen Aufrufmit dem Opcode ILE Call Bound (CALLB) aus.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 61Statische Aufrufe erfolgen zwar viel schneller als dynamischeAufrufe, aber diese Geschwindigkeit hat einen hohen Preis. StatischeAufrufe anderer Programme als Serviceprogramme sindBound by Copy (durch Kopie ge bun den). Das bedeutet, dass beider Kompilierung eine Kopie des aufgerufenen Programms imaufrufenden Programm erstellt wird. Aus diesem Grund kann dasaufgerufene Programm fast so schnell ausgeführt werden, alswäre es eine Sub rou ti ne im aufrufenden Programm. Und imGrunde genommen ist es das auch.Trotz der drastischen Leistungsverbesserung sollte das Bindendurch Kopie vermieden werden, wenn Sie sich nicht in einer sehrinstabilen Betriebsumgebung befinden. Das kann in der Tat diePandora-Büchse der Programmierung sein. Sie sieht von außenschön aus, aber wenn man sie öffnet, entweichen ihr körperlicheGebrechen und See len qua len.Wenn Sie Änderungen an Programmen vornehmen, die in andereProgramme via Kopie gebunden wurden, kann das schnell zueinem ewigen Albtraum niemals versiegender Änderungen werden.Jedes Mal, wenn Sie ein Modul än dern (das wir zuvor alsProgramm bezeichneten), das via Kopie in mehrere Programmegebunden wurde, muss jedes dieser Programme neu kompiliertwerden. Noch schlimmer: Einige Programme, die das geänderteProgramm auf ru fen, können dabei versehentlich vergessenwerden, was dazu führen kann, dass mehrere Versionen desglei chen Pro gramms in Ihrem System vorhanden sind.Ein I.T.P.-Fachbuch


Seite 62 – Kapitel 1RPG IV at WorkWir haben Ihnen in Kapitel 11 Werkzeug zur Verfügung gestellt,um diesen Probleme aus dem Weg zu gehen, aber wenn Ihr Systemweiterhin regelmäßig aktualisiert wird, kann das leicht zueiner sehr instabilen Situation führen. Sollten Sie in Versuchungkommen, diese Pandora-Büchse zu öffnen, sollten Sie sich vorIhrem geistigen Auge vor stel len, wie Sie Ihren müden altenKörper mitten in der Nacht aus dem Bett schleppen, um einProgramm zu kor ri gie ren, das Sie schon einmal berichtigt haben– aber ohne auch die Version des Kunden zu ändern.Wie Sie eventuell wissen, hatte die Pandora-Büchse eine attraktiveEigenschaft: Hoffnung. Der Opcode CALLB lässt hoffen,weil er den Weg bereitet für schnelle, mehrsprachige Programmierung.Wenn Sie eine Systemfunktion benötigen, die vorzugsweisein C kodiert wird, sollten Sie CALLB verwenden. WennSie einen statischen Aufruf ausführen, verlieren Sie nicht imAufruf-Overhead die Vorteile, die Sie durch Programmierung inC erreicht haben.Auch ohne statische Programmbindung kann eine Anzahl vonTechniken eingesetzt werden, die Ihnen dabei helfen, dieAuswirkung auf die Leistung der dynamischen Aufrufe zu reduzieren.Im nächsten Abschnitt erhalten Sie In for ma ti o nen zuÄnderungen, die Sie an Ihren CL- und RPG-Programmenvornehmen können, um diese Aus wir kun gen zu reduzieren.Zusammengefasst kann gesagt werden: Obwohl Hoffnung in derPandora-Büchse ist, empfehlen wir Ihnen, den De ckel zumindestteilweise geschlossen zu halten, wenn Sie sich nicht in einer sehrstabilen Betriebsumgebung be fin den.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 63CL-ProgrammaufrufeCL-Programmaufrufe weisen im Vergleich mit RPG eine Reihevon Nachteilen auf. Es folgen einige Tipps, die Sie beachtensollten, wenn Sie mit CL-Programmen arbeiten:• Wenn Ihr CL-Programm eine Schleife enthält, in der dasProgramm mehrmals aufgerufen wird, verwenden Sie fürIhren Aufruf einen qualifizierten Programmnamen (der dieBibliothek und den Programmnamen angibt), anstatt dieBibliotheksliste bestimmen zu lassen, wo sich das Programmbefindet. Anders als RPG verfügt das CL-Programm überkeine internen Zeiger, die es darüber informieren, wo sichdas Programm ursprünglich befand.• Wenn Sie die Möglichkeit haben, ein CL-Programm oderein RPG-Programm aufzurufen, von denen beide die gleicheFunktion ausführen, wählen Sie das RPG-Programm. EinCL-Programm verursacht beim Aufruf mehr Overhead alsein RPG-Programm.• Wenn Programme innerhalb des Jobstreams die gleichenDateien verwenden, sollten Sie ernsthaft in Erwägung ziehen,offene Datenpfade gemeinsam zu nutzen (wie bereitsbesprochen). Mit reduziertem I/O erhalten Sie die größ tenZuwächse an Leistung.Ein I.T.P.-Fachbuch


Seite 64 – Kapitel 1RPG IV at WorkRPG-ProgrammaufrufeHier einige Tipps, mit denen Sie den System-Overhead beider Ausführung von Programmaufrufen über RPG re du zie renkönnen:• Wenn ein RPG-Programm im Jobstream mehrmals aufgerufenwird, sollten Sie es in Betracht ziehen, den OpcodeReturn zu verwenden, anstatt Last Record (LR) zu aktivieren.Damit bleibt das Programm im Speicher, was be deu tet, dassder Overhead für die wiederholte Programminitialisierungsowie für Dateiöffnungs- und Schließ ope ra ti o nen entfällt.Wenn Sie diese Änderung vornehmen, müssen Sie jedoch aufdie Dateizeiger, auf die Feld ver wen dung so wie auf dieIndikatoreinstellungen achten. Da das Programm nicht endet,entsprechen diese Werte denen, die vor la gen, als Sie dasProgramm zum letzten Mal beendeten.• Wenn Sie sich für diese Methode entscheiden, sollten Sieeine „Last-call“-Routine kodieren, die das Programm zumletzten Mal aufrufen wird, um LR zu aktivieren und dieRessourcen freizugeben, die vom Programm belegt werden.Damit wird verhindert, dass marodierende Programmewertvolle Systemressourcen belegen.• Wie bereits erwähnt: Wenn Sie die Möglichkeit haben, einCL-Programm oder ein RPG-Programm aufzurufen, diebeide die gleiche Funktion ausführen, sollten Sie dasRPG-Programm wählen. Ein CL-Programm verursachtbeim Start mehr Overhead als ein RPG-Programm.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 65Konzentrieren Sie sich auch hier wieder auf die Reduzierung derI/O-Operationen. Benutzergesteuerte Da tei öff nungs pro zes seund gemeinsame Datenpfade können verwendet werden, um dieAuswirkungen des Öffnens und Schließens der Dateien zu begrenzen.Wenn Sie den Befehl SETOBJACC richtig einsetzenoder wenn Sie offene Datenpfade mehrfach nutzen, könnenSie die Auswirkungen der I/O-Prozesse auf Ihre Programmeminimieren.ILE-LeistungsaspekteAlle Leistungsaspekte, die in diesem Kapitel bisher besprochenwurden, gelten sowohl für OPM- als auch für ILE-Umgebungen.Aber bei ILE muss noch mehr berücksichtigt werden.Kaufen Sie nie zum EinzelhandelspreisAls Erstes sollten Sie bei der Kompilierung eines ILE-Programms an den Optimierungsgrad denken. Die De fi ni ti on desWortes „Optimierung“ lautet „Leistung“! Genauer gesagt, damitist die Optimierung der Lauf zeit leis tung eines Objekts gemeint.Der Compiler übernimmt für Sie diese Aufgabe, indem er Op ti -mie rungs tech ni ken des Translators verwendet. Dabei sucht ernach Prozess-Shortcuts, um den Umfang der Systemressourcenzu reduzieren, der be nö tigt wird, um die gleiche Leistung zuerzielen. Stellen Sie sich die Optimierung vor wie das Einkaufenim Groß han del statt im Einzelhandel. Sie geben viel wenigerGeld aus ( Ressourcen), um das gleiche Produkt ( Output) zuer hal ten.Ein I.T.P.-Fachbuch


Seite 66 – Kapitel 1RPG IV at WorkSie steuern den Optimierungsgrad mit Hilfe der Optimierungsparameterin den Befehlen Create RPG Mo du le (CRTRPG-MOD), Create Program (CRTPGM) und Create Service Program(CRTSRVPGM). Sie können zwar die Optimierung im BefehlCRTPGM festlegen, aber die eigentlichen Optimierungstechnikenwerden auf die Module angewandt. Die Werte, die für dieOptimierungsparameter zulässig sind, sind wie folgt:*NONE – minimale Optimierung*BASIC – leichte Optimierung*FULL – maximale OptimierungBeim Testen und Debuggen Ihrer Programme sollten Sie dieKompilierung als Erstes mit Optimierung *NONE aus füh ren.Dies ist die schnellste Kompilierungsoption (wir kennen allerdingsniemanden, der ein Pro gramm schon nach der ersten Kompilierungerfolgreich und fehlerfrei in Produktion gebracht hat).Sobald Sie aus dem Programm alle Fehler entfernt haben, solltenSie es erneut kompilieren, wobei Sie die Optimierungsoption*FULL angeben und dann die Abschlusstests ausführen, bevorSie das Programm in Produktion gehen lassen.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 67Außer der Tatsache, dass die Kompilierung viel Zeit in Anspruchnimmt, gibt es einen weiteren Grund dafür, dass Sie beim Debuggeneines Programms nicht die Optionen *FULL (oder *BASIC)angeben sollten. Auf Grund der angewendeten Optimierungstechnikenkönnen Sie den Wert einer Variable nicht ändern, währendSie das Debug ausführen. Noch schlimmer: Es ist möglich,dass Variablenwerte nicht angezeigt werden können! Und selbstwenn ein Wert angezeigt wird, können Sie sich nicht daraufverlassen, dass dieser Wert der korrekte, aktuelle Wert ist. Zielunseres Debugging ist meist die Prüfung des Werts einer Variable,das heißt also, dass damit der Sinn des Debug-Prozesses inFrage gestellt wird.Der Grund für diese Ungenauigkeit ist, dass der Optimierereventuell dafür gesorgt hat, dass der aktuelle Wert einer Datenvariablein einem Hardware-Register vorhanden ist, und derDebugger auf das Hardware-Register nicht zu grei fen kann. Zuden Faktoren, die verwendet werden, um zu bestimmen, ob eineVariable in ein Hardware-Register eingefügt werden soll, gehörenz. B. die Art der Verwendung, die Größe und der Haltepunktinnerhalb des Codes. Kurz gesagt: Sie können sich nicht auf denWert verlassen, der für eine Variable angezeigt wird, wenn dieAus füh rung mit einem anderen Optimierungsgrad als *NONEerfolgt.Ein I.T.P.-Fachbuch


Seite 68 – Kapitel 1RPG IV at WorkAktivierungsgruppentherapieDer nächste Parameter für die Create-Befehle, auf den Sie achtenmüssen, ist der Aktivierungsgruppenparameter ACTGRP. DieserParameter akzeptiert drei Optionen:• ACTGRP (Sie haben es erraten) – Sie übergeben an dasSystem den Namen der Aktivierungsgruppe, in der dieAusführung erfolgen soll. Wenn die Aktivierungsgruppeexistiert, wird sie verwendet. Wenn nicht, wird eine neueAktivierungsgruppe erstellt. Die Aktivierungsgruppe wirdnicht entfernt, wenn das Programm endet.• ACTGRP(*NEW) – Das System erstellt eine Aktivierungsgruppe,wenn das Programm aufgerufen wird, und löschtsie wieder, wenn das Programm endet.• ACTGRP(*CALLER) – Das Programm wird in derAktivierungsgruppe ausgeführt, in der das auf ru fen deProgramm läuft.Sie sollten fast nie die Option *NEW angeben. Geben Sie stattdessen selbst den Namen der Gruppe vor.Der Grund, warum wir Ihnen zu „fast nie“ raten (und nicht„nie“), ist, dass die Option *NEW eine Methode für die Simulierungrekursiver Aufrufe in RPG bereitstellt. Wenn Programm AProgramm B aufruft und Programm B an schlie ßend ProgrammA, generiert das System normalerweise eine rekursive Aufruffehlerbedingung.Wenn jedoch Programm A mit Option *NEWkompiliert wurde, generiert der Aufruf von Programm A eineneue Aktivierungsgruppe für die Ausführung der zweiten Kopievon Programm A für die Ausführung. Es wird keine Feh ler nach -richt generiert.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 69Die drei StrategienIn Bezug auf die Aktivierungsgruppe können drei verschiedeneStrategien gewählt werden. Die erste Möglichkeit besteht darin,eine benannte Aktivierungsgruppe für alle Programme festzulegen.Wenn Sie einen Namen er stel len, der für Ihre Anwendungeindeutig ist, erzeugen Sie eine gewisse Isolierung von anderenAnwendungen im Sys tem.Eine Alternative für diese Methode besteht darin, eine benannteAktivierungsgruppe nur für die „äußersten“ Pro gram me festzulegen(wie z.B. alle Programme, die vom Menüsystem aufgerufenwerden). Alle aufgerufenen Pro gram me verwenden indiesem Fall *CALLER, womit sie in die benannte Aktivierungsgruppedes Programms, von dem sie aufgerufen wurden, eingefügtwerden. Damit werden letztendlich alle Programme in diebenannte Aktivierungsgruppe eingefügt.Die dritte Methode ist eine Variation der zweiten Methode. Siekönnen *NEW für alle „äußersten“ Programme und *CALLERfür alle aufgerufenen Programme angeben. Damit veranlassenSie das System, den Aktivierungsgruppennamen zu generierenund Sie sorgen dafür, dass alle aufgerufenen Programme dengleichen generierten Namen verwenden.Wir bevorzugen die Verwendung einer benannten Aktivierungsgruppe,weil damit weniger Wartungsprobleme ver bun den sind.Bei den Methoden zwei und drei müssen Sie wissen, welcheProgramme die „äußersten“ sind und wel che aufgerufen werden.Indem Sie alle Programme in einer eindeutig benannten Aktivierungsgruppeausführen, wird die Gefahr verringert, dass dieProgrammierer später die falsche Wahl treffen.Ein I.T.P.-Fachbuch


Seite 70 – Kapitel 1RPG IV at WorkReduzieren der Größe Ihrer ProgrammeSie können die Speicherauslastung in Ihrem System minimieren,indem Sie die Größe der Programme reduzieren, die ausgeführtwerden. Die Logik sagt uns, dass doppelt so viele Programmeauf einmal in den Speicher passen wür den, wenn die Programme,die in den Speicher geladen werden, halb so groß wären. Es gibteine einfache Methode, um dieses Ziel zu erreichen, ohne neuenCode schreiben oder die Funktionalität Ihres Systems reduzierenzu müs sen: Entfernen Sie die Observability in Ihren Programmen.Wenn ein Programm kompiliert wird, wird die Quellenteildateivom System in ein Programmobjekt übersetzt, das von derMaschine eingelesen und ausgeführt werden kann. Im Rahmendes Kompilierungsprozesses ergänzt das System automatischProgramm-Overhead, um das Debuggen des Programmszuzulassen. Dieser zusätzliche Pro gramm-Overhead, der vomCompiler hinzugefügt wird, wird als Observability bezeichnet.Die Observability ist eine äußerst wertvolle Komponente IhresWerkzeugkastens, wenn Sie ein neues System schrei ben, implementierenund beta-testen. Ohne sie könnten Sie kein Debugausführen und es würde viel länger dauern, bis Sie Problemediagnostiziert haben. Aber sobald ein System in Produktion geht,werden Sie vermutlich nicht mehr ständiges Debuggen ausführen.Warum nutzen Sie deshalb nicht einfach den Befehl ChangeProgram (CHGPGM), um die Observability zu entfernen und dieGröße Ihrer Programme zu halbieren? Sie können die Observabilityjederzeit wiederherstellen, indem Sie das Programm neukompilieren.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 71Das Entfernen der Observability bringt gemischte Ergebnisse,aber wir haben erlebt, dass die Größe einiger Pro gram me um biszu 40 Prozent ihrer ursprünglichen Größe reduziert werdenkonnte. Um selbst einen Test aus zu füh ren, zeigen Sie einfach dieGröße eines Programms an, indem Sie den Befehl Display Program(DSPPGM) aus füh ren. Anschließend verwenden Sie denBefehl CHGPGM, um die Observability zu entfernen. Wenn Sieden Be fehl DSPPGM erneut ausführen, erfahren Sie, wie inwelchem Ausmaß Sie die Größe Ihres Programms reduzierenkonnten. In unserem Beispiel in Abbildung 1.17 entfernten wirdie Observability aus dem Programm CUSPGM in BibliothekTESTLIB, indem wir den Befehl CHGPGM eingaben.CHGPGMPGM(TESTLIB/CUSPGM) RMVOBS(*ALL)Abbildung 1.17: Entfernen der Programm-Observability undReduzieren der Programmgröße mit CHGPGM.Wir führen z.B. CHGPGM regelmäßig über einer komplettenProduktionsbibliothek aus, um die Observability zu entfernen.Wenn sich die Bibliothek in einem stabilen Zustand befindet undselten geändert wird, warum sollten Sie die Observability beibehalten?Unserer Erfahrung nach kann das Ergebnis in Systemen,in denen nicht genug Spei cher vorhanden ist, überzeugend sein.Wie oft haben Sie bereits mit einem System gearbeitet, das„zu wenig“ Spei cher aufweist?Ein I.T.P.-Fachbuch


Seite 72 – Kapitel 1RPG IV at WorkReduzieren von I/O-Prozessen ininteraktiven ProgrammenEine weitere Methode für die Verbesserung der gesamten Systemleistungist die Minimierung der Menge von Daten, die vonIhren interaktiven Programmen aus zu und von Anzeigefensternbefördert werden müssen. Anstatt die Men ge der Informationenin den Bildschirmen zu reduzieren, können Sie dieses Zielerreichen, indem Sie überflüssige Daten entfernen.Viele interaktive Programme sind so konzipiert, dass bei jederAusgabe eine komplette Anzeige voller Daten in den Bildschirmgesendet wird. Manchmal sind die Daten, die in den Bildschirmgesendet werden, fast identisch mit den Informationen, diebereits angezeigt werden, mit nur einem oder zwei Feldern oderAnzeigeattributen, die sich nach der letzten Anzeige geänderthaben. So kann eine Situation entstehen, in der viel mehr Systemdatenverkehrentsteht, als erforderlich ist. Dieser macht sichbesonders bemerkbar, wenn diese Programme auf Terminalsausgeführt wer den, die über Fernleitungen angebunden sind,wobei beobachtet werden kann, wie im Terminal die Zeilen aufdem Bildschirm „gezeichnet“ werden.Wenn ein Anzeigebildschirm in den Bildschirm gesendet wird,müssen Anzeigeattribute sowie Daten gesendet wer den. DieseAttribute steuern, welche Felder „high-intensity“, „Umkehrbild“,„unterstrichen“, „unterdrückt“, „ein ga be fä hig“ und vielesmehr sind. Für jede Bildschirmoperation müssen also vieleDaten gesendet werden, die für Sie nicht sichtbar sind.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 73Es gibt eine Methode, mit der Sie interaktive Programme sokodieren können, dass nur die Daten und Attribute, die sich seitder letzten Bildschirm-I/O-Operation geändert haben, in denBildschirm gesendet werden. Zu dieser Me tho de gehört die Verwendungder DDS-Schlüsselwörter: Put with Explicit Override(PUTOVR), Override Data (OVRDTA) und Override Attribute(OVRATR).PUTOVR ist ein DDS-Schlüsselwort auf Datensatzebene, das esdem System im Wesentlichen ermöglicht, zu „su chen“ bevor eseine Anzeige präsentiert, um festzustellen, was in den Bildschirmgesendet werden muss. Wenn das System feststellt, dass sich diegesendete Maske nicht bereits im Bildschirm befindet, wird diegesamte Maske an ge zeigt. Demgegenüber werden, wenn dieMaske bereits angezeigt wird, nur Felder mit den angegebenenSchlüs sel wör tern OVRDTA oder OVRATR in den Bildschirmgesendet. Diese Technik kann große Auswirkungen auf dieMenge der Daten haben, die in den Bildschirm gesendet werdenmüssen.In Abbildung 1.18 verwendeten wir das Schlüsselwort PUTOVRin der Anzeige FORMAT1. Beachten Sie, dass die FelderKundennummer und Kundenname so kodiert wurden, dassdie Schlüsselwörter OVRDTA verwendet werden. Das FeldCUSNBR wurde ebenfalls mit dem Schlüsselwort OVRATRkodiert.Ein I.T.P.-Fachbuch


Seite 74 – Kapitel 1RPG IV at WorkAAN01N02N03T.Name++++++RLen++TDpBLinPosFunctions+++++++++++++++++++++++++++AR FORMAT1APUTOVRA1 35‘Customer Lookup’A PGMNAM 35 B 4 25DSPATR(RI)A 4 5‘Customer Number:’A CUSNBR 5 B 4 22OVRDTAAOVRATRA 40 DSPATR(HI)A CUSNAM 35 +2OVRDTAAbbildung 1.18: Verwendung der Schlüsselwörter PUTOVR,OVRDTA, und OVRATR DDS.Wenn FORMAT1 zum ersten Mal in den Bildschirm geschriebenwird, wird die gesamte Anzeigemaske gesendet, weil das Systemerkennt, dass FORMAT1 noch nicht im Bildschirm vorhandenist. Bei nachfolgenden Aus ga be ope ra ti o nen in den Bildschirmwerden nur die Felder CUSNBR und CUSNAM gesendet, weilsie mit den OVRDTA-Feldern kodiert wurden. Beachten Sie,dass das Feld PGMNAM nicht mit dem Schlüsselwort OVRDTAkodiert wurde, weil es sich nach der ersten Ausgabe im Bildschirmnicht mehr verändern wird.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 75Außerdem wurde in unserem Beispiel nur dem Feld CUSNBRdas Schlüsselwort OVRATR zugewiesen. Das be deu tet, dass daseinzige Feld im Bildschirm mit Anzeigeattributen, die sich nachder ersten Anzeige verändern können, das Feld CUSNBR ist.Wenn der Indikator, der das Attribut High Intensity steuert(Indikator 40) aktiviert ist, wird das Feld bei der nachfolgendenAusgabe in den Bildschirm aktualisiert. Hätten wir das SchlüsselwortOVRATR nicht mit dem Feld CUSNBR kodiert, würdensich die Anzeigeattribute nicht verändern, und die At tri bu te, diebei der ersten Ausgabeoperation wirksam sind, würden so langewirksam bleiben, wie der Bildschirm an ge zeigt wird.Indikatoren können verwendet werden, um die SchlüsselwörterOVRDTA und OVRATR mit Bedingungen zu ver knüp fen. Esempfiehlt sich, noch einen Schritt weiter zu gehen als in diesemBeispiel: Die Schlüsselwörter sind mit Bedingungen zu versehen,damit sie nur aktiv sind, wenn sich die Daten oder Attributegeändert haben.Ein I.T.P.-Fachbuch


Seite 76 – Kapitel 1RPG IV at WorkService-Programme können sich auf dieLeistung auswirkenSie sollten sich der Leistungsaspekte bewusst sein, die mit derVerwendung von Service-Programmen ver bun den sind. Richtigangewendet vereinen sie die Vorteile einer schnellen Ausführungmit einfacher Pflege. Falsch an ge wen det können sie sich negativauf die Leistung auswirken.Service-Programme laden bei jedem Aufruf des ersten Modulsalle Module des Service-Programms in den Speicher. Das entsprechendeSchlüsselwort lautet ALL. Dieses Schlüsselwort lädtauch Module in den Speicher, die vom auf ru fen den Programmnicht verwendet werden! Sie sollten das berücksichtigen, wennSie ein Service-Programm ent wi ckeln. Ihr Ziel sollte es sein,verwandte Funktionen in einem einzelnen, leicht zu pflegendenService-Programm unterzubringen. Wir empfehlen Ihnen jedochnicht, ein Service-Programm zu erstellen, das 50 Module enthält,selbst wenn alle Module die gleichen Funktionen ausführen. Indiesem Fall ist es möglich, dass es ziemlich lange dauert, bis alleModule geladen sind. Andererseits empfiehlt es sich auch nicht,ein Service-Programm mit einem einzelnen Modul zu erstellen.Sie müssen die Wahrscheinlichkeit, dass alle Module in einemService-Programm von einem aufrufenden Programm benötigtwerden, abwägen mit dem Zeitbedarf des Ladens der Module imVoraus. Die gute Nachricht dabei ist es, dass die Module, sobaldsie geladen sind, so lange aktiv bleiben, bis die Aktivierungsgruppeendet. Selbst wenn das aufrufende Programm endet,befinden sich die Module weiterhin im Speicher, wenn die Aktivierungsgruppenoch aktiv ist.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 77Übersehen Sie nicht das OffensichtlicheWenn Ihr System Leistungsprobleme hat (ein häufiges Problem),gibt es ein paar Dinge, auf die Sie achten müs sen, bevor Sie dieProgramme modifizieren. Einige der Features, die die AS/400 zueinem so hervorragenden Com pu ter für die Arbeit machen, könnennämlich auch zu Leistungseinbußen führen. Dazu gehören:• DASD (Festplattenspeicher), der zu mehr als 80 Prozentausgelastet ist. Prüfen Sie die Auslastung mit dem Be fehlWRKDSKSTS. Das Betriebssystem der AS/400 benötigtPlatz für die Arbeit. Wenn dieser nicht vorhanden ist, mussdas System zusätzliche Arbeit leisten und versucht, diesenPlatz zu finden.• Interaktive Ausführung von Jobs, die für Batch-Umgebungenbesser geeignet sind. Dies gilt besonders, wenn der fraglicheJob starke I/O-Aktivität mit sich bringt. Jeder Job, der längerals 30 Sekunden ausgeführt wird und keinen Bedienereingriffoder keine Bedieneraktion benötigt, ist ein Kandidat für dieBatch-Verarbeitung.• Verschieben von Batch-Jobs in Subsysteme, die für dieAusführung von interaktiven Jobs konfiguriert wurden.Die se Jobs werden mit falschen Laufzeitattributen ausgeführt(Priorität, Zeitscheibe usw.) und werden sich negativ aufdie interaktive Leistung auswirken.Ein I.T.P.-Fachbuch


Seite 78 – Kapitel 1RPG IV at Work• Unzureichender Speicher. Es ist viel vorteilhafter, zu viel zuhaben als zu wenig. Sie erinnern sich eventuell daran, dass640 KB (640000 Byte) einst für einen Personalcomputer alsausreichend erachtet wurden. Versuchen sie doch einmal, einmodernes Programm mit 640 KB auszuführen! Heutzutagebenötigen die Computer weit mehr Speicher. Wir habenIhnen bereits gezeigt, wie Sie mehr Leistung aus IhremSystem herausholen können, wenn ge nü gend Hauptspeichervorhanden ist.• Query und SQL. Das sind zwar exzellente Tools, aberSie müssen sicherstellen, dass sie nicht regelmäßig inin ter ak ti ven Umgebungen ausgeführt werden. Sie zahleneinen hohen Preis in Bezug auf Leistung, wenn dieBenutzer in Ihrem System dieses Privileg missbrauchen.• Nachrichten-Protokollierungsstufen. Wie viele Daten werdenin Ihre Jobprotokolle geschrieben? Dies kann sich negativauf die Systemleistung auswirken, wenn mehr Informationenals erforderlich aufgezeichnet werden (in Ka pi tel 10 erfahrenSie mehr über Protokollierungsstufen).• Journalerstellung. Wenn Sie die Journalerstellungverwenden, zahlen Sie einen Preis für den erforderlichenOverhead. Sie verdoppeln (mindestens) die Anzahl derI/O-Operationen, die für die Dateien für die Journalerstellungerforderlich sind.Ein I.T.P.-Fachbuch


Leistung beginnt mit der Programmentwicklung Kapitel 1 – Seite 79Schuldige dingfest machenIn der guten alten Zeit gab es eine Unzahl von Artikeln undPublikationen, in deren Mittelpunkt die Leistung der RPG-Operationscodes stand. Diese Artikel erweckten den Eindruck,dass die Bevorzugung eines Operationscodes gegenüber einemanderen Code spürbare Auswirkungen auf die Systemleistunghaben könnte. Unserer Ansicht nach gibt es keinen Zweifeldaran, dass die AS/400 einige Operationen besser ausführt alsandere, aber wir glauben auch, dass die drastische Zunahme derRechenkraft im letzten Jahrzehnt den minimalen Effekt einerÄnderung des RPG-Operationscodes völlig zunichte macht.Zugegebenermaßen, gemessen an konkurrenzfähigen Leistungsstandardsführten die alten AS/400-CISC-Computer Funktionenwie Multiplikation und Division nicht optima l aus. Und dieAS/400 tendiert zur Langsamkeit, wenn sie Nachschlageaktionenfür große Arrays ausführt oder wenn sie sehr großeFelder miteinander vergleicht. Die Ver wen dung von Dateiübersetzungoder Opcodes Translate (XLAGE) kann zu Verzögerungenführen.Sie werden jedoch vermutlich auch nur die Funktionen verwenden,die Si e wirklich benötigen. Die Zeit, die Sie sonst damitverbringen, nach Möglichkeiten für die Verbesserung derLeistung zu suchen, können Sie viel besser investieren, wenn Sienach I/O-Flaschenhälsen und Speicherüberlastung suchen.Ein I.T.P.-Fachbuch


Seite 80 – Kapitel 1RPG IV at WorkLeistung, Leistung, LeistungDie Benutzer werden niemals so viel Leistung bekommen, dasssie zufrieden sind. Das ist eine der Regeln in der heutigen Rechnerumgebung.Je schneller die Computer werden, umso mehrLeistung erwarten die Benutzer. Kann man es ihnen verdenken?Es ist eine Tatsache, dass die AS/400 mit blitzschnellen Einzelbenutzersystemenkonkurriert, die nicht für die Aus füh rung ineiner Umgebung mit mehreren Benutzern konzipiert sind. Fürdiese Systeme fällt nicht all dieser über mä ßi ge Overhead an, derim „M idrange“-Markt als obligatorisch betrachtet wird. Selbstverständlichkönnen auf diesen Systemen vergleichbare Schichtenvon Software installiert werden, um Aufgaben wie Vernetzung,Da ten bank-Ma nage ment, Sicherheit, Druck-Spooling undSpool-Management zu erledigen, sowie eine Vielzahl vonan de ren Stan dard-Betriebssystemfunktionen, die wir vonunserer geliebten AS/400 mittlerweile ebenfalls erwarten.Leider handelt es sich aber bei diesen Vergleichen meist nicht umÄpfel/Äpfel-Vergleiche. Es fällt auch schwer, sich vorzustellen,dass IBM jemals die AS/400 aggressiv vermarkten wird.Deshalb wird die AS/400 auch in Zukunft von einigen Mitspielernin der Computing-Welt als graue Maus betrachtet werden.Sie wird möglicherweise niemals in den Genuss des branchenweitenRufs kommen, den sie so sehr verdient.Sie sind selbst dafür verantwortlich, alles aus dem System herauszuholen,was Sie können. Sie sollten Ihre Su che nach bessererLeistung als Ihre eigene persönliche Suche nach dem HeiligenGral betrachten. Wichtig ist nicht, ob Sie Ihr Ziel erreichen,sondern wie viel Sie auf dem Weg dort hin lernen.Ein I.T.P.-Fachbuch

Weitere Magazine dieses Users
Ähnliche Magazine