![[z/OS]](../images/ngzos.gif)
DB2-Optimierungstipps für z/OS
Die Leistungsoptimierung für DB2 hat generell große Bedeutung für den Gesamtdurchsatz einer Anwendung von WebSphere Application Server. DB2 ist oft der bevorzugte Datenspeicher für Enterprise JavaBeans (EJBs). In diesem Dokument sind grundsätzliche Richtlinien für die Optimierung von DB2 sowie einige Richtlinien für die Optimierung von DB2 für WebSphere Application Server aufgeführt. Ausführliche Informationen zur DB2-Optimierung finden Sie in der Veröffentlichung "DB2 Universal Database for OS/390 and z/OS Administration Guide", IBM Form SC26-9931-03. Die DB2-Handbücher stehen unter der folgenden Internetadresse zur Verfügung: http://www.ibm.com/servers/eserver/zseries/zos/.
Vorteile von Structured Query Language in Java™ (SQLJ)
Wenn Sie den JDBC-Treiberprovider für DB2 Universal verwenden, können Sie SQLJ als Abfragesprache für BMP- und CMP-Beans implementieren. SQLJ erzeugt weniger Transaktionsaufwand als die Standardabfragesprache für JDBC-Transaktionen (dynamisches SQL). SQLJ ist statisch und verwendet bereits vorbereitete Pläne. Somit verbessert SQLJ die Anwendungsleistung generell. Für Administratoren von DB2 for z/OS ist SQLJ häufig einfach anzupassen, weil das Sicherheitsmodell und die Funktionen für die Wiederholung von Anweisungen denen des statischen SQL gleichen. SQLJ erfordert zusätzliche Schritte, die in neueren Versionen von WebSphere Studio Application Developer und Rational Application Developer als Features verfügbar sind.
Weitere Informationen finden Sie im Artikel "Anwendungen für Datenzugriff entwickeln".
Allgemeine Tipps für die Optimierung von DB2:
Diese Hinweise beziehen sich nur auf den JDBC-Treiber von DB2 for z/OS, der als herkömmlicher JDBC-Treiber von DB2 for z/OS bezeichnet wird.
- Stellen Sie zunächst sicher, dass Ihre DB2-Protokolle groß genug sind, auf den schnellsten verfügbaren Datenträgern erstellt werden und eine optimale CI-Größe haben.
- Vergewissern Sie sich dann, dass die Pufferpools so eingestellt sind, dass die am häufigsten gelesenen Daten weitestgehend im Speicher vorhanden sind. Verwenden Sie ESTOR und hyperpools.
- Überlegen Sie, ob Tabellen, die sehr häufig verwendet werden, vorab formatiert werden sollten, um das Formatieren in der Laufzeit zu vermeiden.
Tipps für die Optimierung von DB2 for WebSphere:
- Stellen Sie sicher, dass der DB2-Trace unter dem Universal Driver von DB2 for z/OS inaktiviert ist.
- Wenn die JVM-Eigenschaft "db2.jcc.propertiesFile" so definiert ist, dass es eine
DB2-JCC-Eigenschaftendatei für WebSphere Application Server for z/OS angibt, vergewissern Sie sich, dass die folgenden Traceanweisungen
(sofern vorhanden) auf Kommentar gesetzt sind:
# jcc.override.traceFile=<Dateiname> # jcc.override.traceFile=<Dateiname>
- Falls von Ihren Anwendungen verwendete DB2-Universal-JDBC-Driver-Datenquellen mit einer angepassten Eigenschaft "traceLevel" ungleich null definiert sind, setzen Sie "traceLevel" in der Administrationskonsole von WebSphere Application Server for z/OS auf null.
- Wenn die JVM-Eigenschaft "db2.jcc.propertiesFile" so definiert ist, dass es eine
DB2-JCC-Eigenschaftendatei für WebSphere Application Server for z/OS angibt, vergewissern Sie sich, dass die folgenden Traceanweisungen
(sofern vorhanden) auf Kommentar gesetzt sind:
- Sie sollten sicherstellen, dass für alle Primärschlüssel Ihrer Objekte Indizes definiert sind. Ist dies nicht der Fall, kann das Durchsuchen der Tabellenbereiche kostenintensiv werden.
- Sorgen Sie dafür, dass dass Ihre Tabellen, sobald sie mit einer bestimmten Menge von Daten gefüllt sind, reorganisiert werden, um die Tabellengröße zu reduzieren. Durch die Ausführung von RUNSTATS gewährleisten Sie, dass die DB2-Katalogstatistik zur Tabellen- und Spaltengröße sowie zu den Tabellenzugriffen aktuell ist und vom Optimierungsprogramm die besten Zugriffsmuster ausgewählt werden können.
- Sie müssen weitere Verbindungen definieren, die in DB2 als Threads bezeichnet werden. WebSphere Application Server verwendet zahlreiche Threads. Manchmal entstehen Engpässe, weil der Server warten muss, bis ein erstellter Thread verfügbar ist.
- Stellen Sie sicher, dass Ihre JDBC-Wartung auf dem neuesten Stand ist. Für JDBC gibt es viele Leistungsverbesserungen. Sie können die JDBC-Wartungsstufe bestimmen, indem Sie in der Shell
Folgendes eingeben:
java com.ibm.db2.jcc.DB2Jcc -version
Gibt dieser Befehl die Nachricth zurück, dass eine Klasse nicht gefunden wurde, haben Sie den Befehl nicht korrekt eingegeben oder Ihr Treiber ist veraltet und bietet keine Unterstützung für diesen Befehl. Bewährtes Verfahren: Sie sollten den dynamischen Anweisungscache in DB2 aktivieren. Modifizieren Sie dazu ZPARMS wie folgt: CACHEDYN(YES) MAXKEEPD(16K). Dies kann, je nach Anwendung, eine deutliche Verbesserung des DB2-Durchsatzes bewirken. Insbesondere kann diese Angabe JDBC- und LDAP-Abfragen beschleunigen. bprac
- Setzen Sie das DB2-Prüfpunktintervall auf einen hohen Wert. Modifizieren Sie dazu ZPARMS so, dass die Angabe CHKFREQ=xxxxx enthalten ist. Hier steht xxxxx für einen hohen Wert für die Verwendung von Vergleichspunkten. Bei Produktionssystemen gibt es allerdings triftige Gründe, die Häufigkeit von Prüfpunkten gerinter zu halten.
//DB2INSTE JOB MSGCLASS=H,CLASS=A,NOTIFY=IBMUSER /*JOBPARM SYSAFF=* //****************************************************************** //* JOB NAME = DSNTIJUZ //* //* DESCRIPTIVE NAME = INSTALLATION JOB STREAM //* //* LICENSED MATERIALS - PROPERTY OF IBM //* 5675-DB2 //* (C) COPYRIGHT 1982, 2000 IBM CORP. ALL RIGHTS RESERVED. //* //* STATUS = VERSION 7 //* //* FUNCTION = DSNZPARM AND DSNHDECP UPDATES //* //* PSEUDOCODE = //* DSNTIZA STEP ASSEMBLE DSN6.... MACROS, CREATE DSNZPARM //* DSNTIZL STEP LINK EDIT DSNZPARM //* DSNTLOG STEP UPDATE PASSWORDS //* DSNTIZP STEP ASSEMBLE DSNHDECP DATA-ONLY LOAD MODULE //* DSNTIZQ STEP LINK EDIT DSNHDECP LOAD MODULE //* DSNTIMQ STEP SMP/E PROCESSING FOR DSNHDECP //* //* NOTES = STEP DSNTIMQ MUST BE CUSTOMIZED FOR SMP. SEE THE NOTES //* NOTES PRECEDING STEP DSNTIMQ BEFORE RUNNING THIS JOB. //* //* LOGLOAD=16000000, //*********************************************************************/ //* //DSNTIZA EXEC PGM=ASMA90,PARM='OBJECT,NODECK' //STEPLIB DD DSN=ASM.SASMMOD1,DISP=SHR //SYSLIB DD DISP=SHR, // DSN=DB2710.SDSNMACS // DD DISP=SHR, // DSN=SYS1.MACLIB //SYSLIN DD DSN=&LOADSET(DSNTILMP),DISP=(NEW,PASS), // UNIT=SYSALLDA, // SPACE=(800,(50,50,2)),DCB=(BLKSIZE=800) //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSUT1 DD UNIT=SYSALLDA,SPACE=(800,(50,50),,,ROUND) //SYSUT2 DD UNIT=SYSALLDA,SPACE=(800,(50,50),,,ROUND) //SYSUT3 DD UNIT=SYSALLDA,SPACE=(800,(50,50),,,ROUND) //SYSIN DD * DSN6ENV MVS=XA DSN6SPRM RESTART, X . . . AUTH=YES, X AUTHCACH=1024, X BINDNV=BINDADD, X BMPTOUT=4, X CACHEDYN=YES, X . . . MAXKEEPD=16000, X . . . DSN6ARVP ALCUNIT=CYL, X . . . DSN6LOGP DEALLCT=(0), X . . . DSN6SYSP AUDITST=NO, X BACKODUR=5, X CHKFREQ=16000000, X CONDBAT=400, X CTHREAD=1200, X DBPROTCL=PRIVATE, X DLDFREQ=5, X DSSTIME=5, X EXTRAREQ=100, X EXTRASRV=100, X EXTSEC=NO, X IDBACK=1800, X . . . //*