DB2 –Physisches Design Standards, Tipps und Grundlagen zur DB2-Datenmodellen und deren Implementierung in der DB2-Physik DB2 DB-Design und physische Strukturen Ausgabe 2: 2004/2005 © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 1 von 29 DB2 –Physisches Design Inhaltsverzeichnis 1 VORWORT 2 GRUNDSÄTZLICHES ZU DB2 UND PERFORMANCE 2.1 Optimierungspotentiale bei DB2 2.2 Das physische DB-Design und seine Umsetzung nach DB2 2.2.1 Allgemeine Vorgehensweise 2.2.2 Vorgehensweise gemäß Ziel-DBMS 2.3 Das physische DB-Design bei DB2 2.3.1 Überführung des Informationsmodells - allgemeine Vorgehensweise 2.3.1.1 Übernahme von Satztypen 2.3.1.2 Zusammenlegen von Satztypen 2.3.1.3 Denormalisierung 2.3.1.4 Trennen von Satztypen 2.3.1.5 Schaffung zusätzlicher Tabellen 2.3.1.6 Ergänzen zusätzlicher Felder im physischen Datenmodell 2.3.2 Grundsätzliche Regel bei DB2 2.4 Überführen der Beziehungen 2.5 Einrichten der Zugriffspfade am Beispiel DB2 2.6 Festlegen der physikalischen DB-Struktur 2.7 Festlegen der DB2 Datentypen 3 BASIS-"REGELN" ZUM PHYSISCHEN DESIGN VON DB2 DATENBANKEN 3.1 "Keep Like Things Together" 3.2 "Keep Unlike Things Apart" 3.3 "Cluster Your Data" 3.4 "Consider Type 2 Indexes" 3.5 "Use Locksize ANY" 3.6 "Examine Small Tables" 3.7 "Partition the Data" 3.8 "Fewer Rows of Data per Page" 3.9 "Access Data in Consistent Order" 3.10 "Commit As Soon As Practical" © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 2 von 29 DB2 –Physisches Design 3.11 "Retry Application After Deadlock/Timeout" 3.12 "Close Cursors" 3.13 "Bind Plans With ACQUIRE(USE)" 3.14 "Bind With ISOLATION(CS) And CURRENTDATA(NO)" 4 4.1 DB2-OBJEKTE – STRUKTURIERUNGSEMPFEHLUNGEN Datenbanken (Databases) 4.2 Tabellenspeicher (Tablespaces) 4.2.1 Ziel und Einsatz des PTS 4.2.2 Einsatz und Aufbau eines STS 4.2.3 Empfehlungen zu "tablespaces" 4.2.3.1 TABLESPACE- Definitionen 4.2.3.2 Die wichtigsten Definitionsparameter für TS 4.3 Tabellen (Tables) 4.3.1 Die Größe von Tabellen (Tables) 4.3.2 Große Tabellen (LARGE Tables) 4.3.2.1 Vorteile von LTS 4.3.2.2 Generelle Empfehlungen zu LTS 4.3.3 Partitionierung großer Tabellen (LTS) 4.3.3.1 Einsatz von „LTS Partitionierung“ 4.3.3.2 LTS und „I/O Contentions“ 4.3.3.3 Partitionierung und Verarbeitung von TS 4.3.4 INSERT-Algorithmen unter Nutzung des "partitioned Index" 4.3.4.1 Anwendbarkeit 4.3.4.2 Vorteile dieser Technik 4.3.4.3 Nachteile dieser Technik 4.3.5 INSERT-Algorithmen unter Nichtbeachtung des "partitioned Index" 4.3.5.1 Anwendbarkeit 4.3.5.2 Vorteile dieser Technik 4.3.5.3 Nachteile dieser Technik 4.3.6 "Combined Technique"-INSERT-Algorithmen 4.3.6.1 Anwendbarkeit 4.3.6.2 Vorteile dieser Technik 4.3.6.3 Nachteile dieser Technik 4.3.7 "Code-Tables" 4.3.8 "Flip-Flop Tables" 4.3.8.1 Vorteile dieser Technik 4.3.8.2 Bemerkungen zu dieser Technik 4.3.9 "Hot Spots" 4.3.10 Weitere Tips zum Table – Design 4.4 Indizes (Indexe) 4.4.1 Indexstrukturen und Konzepte 4.4.2 Indexarten 4.4.3 Die Indexdefinition 4.4.3.1 Die Parameter zur Indexdefinition 4.4.3.2 Wählen eines Wertes für PIECESIZE 4.4.4 Überlegungen zu Indizes 4.4.5 Die neue Index Typ-2-Struktur 4.4.6 Der Einsatz von "clustering" Indizes 4.4.6.1 Auswirkungen auf PCTFREE und REORG 4.4.6.2 Auswirkungen auf asynchrone l/O's 4.4.7 "Partitioned Index" © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 3 von 29 DB2 –Physisches Design 4.4.8 "Non-Unique Indexe" 4.4.8.1 Vorteile dieser Technik #1 4.4.8.2 Nachteile der Technik #1 4.4.9 Ersatzstrategien zu „Non-Unique“ Indizes über Design-Maßnahmen 4.4.9.1 Vorteile dieser Technik #2 4.4.10 Die Index-Klausel UNIQUE WHERE NOT NULL 4.4.11 "Non-Partititioned" Index "Pieces" 4.4.12 Indizes zur Vermeidung von Sort-Vorgängen 4.4.13 Indizes aus mehr als einer Spalte 4.4.13.1 Die Frage: Ein "multi-column" Index oder mehrere Indizes 4.4.13.2 Die Reihenfolge der Spalten im Index 4.4.14 Anlegen und Wiederfinden von langen IX-Einträgen 4.4.15 Match-Codes 4.4.16 Die Indizierung von VARCHAR Spalten 4.4.17 Weitere Tipps zum Index-Design 4.4.18 „Indexing“-Strategien für optimale Performance 4.4.18.1 Die generelle Vorgehensweise 4.4.18.2 Der “Proactive Approach” 4.4.18.3 Perfekte Indizierungsrichtlinien 4.4.18.4 Proaktives Tuning von Queries 4.4.18.5 Reaktives Query Tuning 4.4.19 Index Maintenance 4.4.20 Queries und mögliche Indizierungsstrategien 4.5 5 Views PARALLELE VERARBEITUNG 5.1 Locking bei DB2 Die Begriffe beim "Locking 5.1.1 Probleme beim “Locking“ 5.2 LOCKSIZE 5.2.1 Anzahl "rows per page" 5.2.2 Die Ebenen der Kontrolle 5.2.3 "Lock Escalation" 5.2.3.1 Mögliche Werte von LOCKMAX 5.2.3.2 Die "default" - Werte von LOCKMAX 5.2.4 "row locking" und seine Kosten 5.3 Index-Design und konkurrierende Verarbeitung 5.3.1 Konkurrierende Verarbeitung UPDATE und SELECT(Fall 1) 5.3.2 Konkurrierende Verarbeitung UPDATE und SELECT(Fall 2) 6 QUERIES UND PARALLELVERARBEITUNG 6.1 Queries und Partitionierung 6.1.1 Queries und Verarbeitung von PTS 6.1.2 Der notwendige Parallelitätsgrad von Queries 6.1.3 Einrichten von PTS für Parallelverarbeitung 6.2 7 SQL Formulierungen für parallele Verarbeitung DB2 SPEICHERPLATZZUWEISUNG UND SPEICHERVERWALTUNG 7.1 Speicherplatzgruppen (Storage Group) 7.1.1 Speicherplatzgruppen und die Verteilung der Datasets 7.1.2 Tips zu STORAGE GROUPS © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 4 von 29 DB2 –Physisches Design 7.2 Der Buffer Manager 7.2.1 Grobe Berechnung der Berechnung DB2-Datenbank-Buffer 7.2.2 Bereitstellen der Bufferpools 7.2.3 Funktionsweise des Buffermanagers 7.2.4 Eine Methode zur “buffer pool“ Dimensionierung 7.2.4.1 „Statistics report information” 7.2.4.2 Das BP Konzept 7.2.4.3 Evaluation der BP-Grössen 7.3 DB2 Logging 7.3.1 LOGBUFSZ - Log buffer size 7.3.2 LOGFILSIZ Parameter 7.3.3 MINCOMMIT – DB Konfigurationsparameter 7.4 DB2 Work Files 7.4.1 „workfile spaces“ 7.4.2 Hinzufügen von “workfiles” 7.5 Temporary Tables 7.5.1 “Created Temporary Tables” 7.5.2 Declared Temporary Tables 7.5.3 Declared Temporary Tables und Performance der AP 7.6 DB2 Katalog und Directory 7.6.1 Performance - Indikatoren im Katalog 7.6.2 Überwachung der Speicherorganisation 7.6.2.1 Vermeiden von „Contentions“ auf dem Katalog 7.6.2.2 Abfragen zur Überwachung der Speicherorganisation(Beispiele) 7.6.3 Der Umgang mit PLAN und PACKAGES 7.6.4 DB2 und Extents 8 8.1 DB2 SUBSYSTEM PERFORMANCE Asynchroner Preformat 8.2 Parallel data set open 8.2.1 Performance 8.2.1.1 Measurement environment 8.2.1.2 “CPU bound” Testfall 8.2.1.3 I/O bound test case 8.3 “Virtual storage” Entlastung 8.3.1 Instrumentation enhancements 8.3.2 „Database address space” —Nutung des “virtual storage” 8.4 „Evaluate uncommitted“ 8.4.1 Beschreibung von EVALUNC 8.4.2 Empfehlung 8.5 Reduziertes Logging für “variable-length rows” 8.6 DDL concurrency improvement 8.7 Die IRLM-Umgebung und die LOCK-Anforderungen 8.8 Traces © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 5 von 29 DB2 –Physisches Design 9 MVS-FAKTOREN 9.1 Speichertypen, die von DB2 UDB genutzt werden 9.2 Wie DB2 den Speicher nutzt 9.3 DSNZPARMS 9.3.1 Ausgabe der “current settings” 9.3.2 Parameter die für „online“ Änderungen verfügbar sind 9.3.3 Beispiele 10 ANHANG 10.1 Checkliste zum physischen DB-Design DB2 10.2 Index 10.3 Glossar 10.4 Literaturhinweise © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 6 von 29 DB2 –Physisches Design 1 Vorwort „Information steht heute und auch in Zukunft im Mittelpunkt wirtschaftlichen Handelns. Information wurde zur treibenden Kraft der Informationsgesellschaft ... „. Das Zitat von John Naisbitt über die Ressource “Information” in seinem Bestseller „Megatrends“ von 1988 sagt in Kürze immer noch alles über die Bedeutung der Information in unserer Gesellschaft aus. Information ist ein denkbar abstrakter Stoff, der leichter, effizienter und produktiver verwendet werden kann, wenn er geordnet und seinem sinnvollen Zusammenhang gemäß dargestellt und angeboten wird. Datenbankmanagementsysteme sind die Werkzeuge, mit denen Informationen strukturiert, verwaltet und bedarfsgerecht aufbereitet, geliefert werden können. Über sie werden moderne Informationssysteme erst möglich. DB2 von IBM ist eines dieser Datenbanksysteme, das in einer modernen ITUmgebung in der Lage ist, Informationsarchitekturen und -systeme über und für die gesamte Unternehmenshierarchie umfassend zu ermöglichen. Informationsverarbeitung ist dann effizient, wenn die richtigen Informationen zum richtigen Zeitpunkt am richtigen Ort sind. Dazu bedarf es einer sorgfältigen Planung, einer technisch perfekten Implementierung und einer ständigen Kontrolle und Abstimmung. Die Datenbank als Informationsspeicher muss in der Lage sein, die gestellten Anforderungen sicher, konsistent und schnell zu erfüllen: Manche Informationen sind eben nur dann wertvoll, wenn sie hochaktuell sind. Und - jeder Nutzer spezifischer Informationen kann seine eigenen individuellen und subjektiven Ansprüche an diese Ressource “Information” stellen. Dies erfordert seitens der Technologie hochperformante und flexible, aber auch stabile und sichere Systeme. DB2 bietet alle Möglichkeiten, so eingestellt zu werden, dass alle erforderlichen Aktivitäten und Anwendungen auf effizienteste Art und Weise bedient werden. Dazu müssen alle (System-)Parameter optimal gewählt und die Datenstrukturen nach sorgfältiger Analyse in die physische DB2-Umgebung umgesetzt werden. Dies gilt umso mehr, als mit der Ausweitung der Informationstechnik die Komplexität der Information selbst und die Quantität angebotener Datenmengen ständig zunimmt, andererseits die Informationsqualität aber weiter verbessert und die verfügbaren Informationen immer effektiver und genauer dargeboten werden sollen. Denn: Ein Datenbanksystem selbst bringt den Unternehmen noch keinen oder nur geringen Nutzen. Dieser entsteht erst aus der intensiven Nutzung verfügbarer Information und der daraus resultierenden Wertschöpfung: Je mehr Nutzung, um so besser für das Unternehmen. Die Erkenntnis, dass der Unternehmenserfolg, wie bei den bekannten „klassischen“ Produktionsfaktoren - Finanzen, Material, Anlagen und Personal - unmittelbar von einer erschöpfenden und werteffizienten Verwertung dieser „fünften Kraft“ Information abhängt, führte zur Suche nach neuen Konzepten in einem neuen betriebswirtschaftlichen Umfeld - der Informationswirtschaft. Im Zentrum dieser wirtschaftlichen Aspekte steht die Informationstechnologie - ihre Möglichkeiten, ihre Produkte. Die Erwartungen an die Leistungsfähigkeit eines DBMS sind folglich enorm hoch. In dieser Handbuchserie werden unter DB2 Performance-Gesichtspunkten alle wichtigen Fragen zu und die Möglichkeiten bei DB2 thematisiert. Die Serie besteht aus folgenden Büchern: © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 7 von 29 DB2 –Physisches Design 01_Die Umgebung von DB2 – Eine Architekturübersicht 02_DB2 und das Relationenmodell von Dr. Codd 03_DB2 und SQL-Performance 04_Physisches DB-Design und DB2-Performance 05_ DB2 und effiziente Anwendungsentwicklung 06_Administration von DB2 Umgebungen 07_Tunig-Beispiele zu DB2: Erfahrungen aus der Praxis 08_DB2 im Client-Server Umfeld 09_Tools und hilfreiche Produkte zu DB2 Die Handbuch-Serie besteht natürlich nicht aus „Manuals“ im Sinne von Systemdokumentation – wie sie vom Hersteller sowieso angeboten wird -, sondern vielmehr ist beabsichtigt DB2 vor unter Nutzbarkeits- und Performance-Gesichtspunkten möglichst umfassend darzustellen. Die gesamte Serie ist für Kenner, nicht in erster Linie für Neulinge im Umgang mit DB2 konzipiert. Das vorliegende Handbuch beschäftigt sich mit dem Thema: „Physisches DBDesign und DB2-Performance“ Es soll als Leitfaden dienen, das System ursprünglich, ständig und zukünftig optimal planen und einstellen zu können - immer mit dem Ziel, höchstmöglicher Performance in allen direkt betroffenen und umliegenden Betrachtungsfeldern. Viel Spaß beim Lesen und viel Erfolg bei der Nutzung von IBM’s DB2/UDB Mit freundlichen Grüßen S.K. Consulting Services GmbH Sepp Kraus Für die Mitarbeit an diesem Handbuch bedanken wir uns insbesondere bei den Firmen ARAL AG, Bochum AXA Versicherungen, Köln BMW AG, München Itellium GmbH & Co, Fürth IT-Verlag, Sauerlach b. München © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 8 von 29 DB2 –Physisches Design 2 2.1 Grundsätzliches zu DB2 und Performance Optimierungspotentiale bei DB2 Die Optimierungspotentiale bei relationalen Datenbanksystemen unterscheiden sich generell – auch zwischen DB2 und Oracle, SQL Server und SYBASE - nur minimal. Sicher ist, dass die höchsten Potentiale, um diese relationalen Datenbanksysteme schneller zu machen im Bereich der Abfragesprache SQL und damit im Umfeld der Anwendungsentwicklung und der Programme zu suchen ist (siehe Grafik unten). Eine weitere Fehlerquelle ist das physische DB-Design, gefolgt von der Einstellung der Systemparameter im DB2 selbst und im Betriebssystem (OS/390, z/OS, AIX, UNIX usw.) Empfehlenswert ist es, im Tuningfall dort zuerst zu suchen, wo das größte Potential zum Lösen der Tuningaufgaben existiert. Man darf nur die anderen Bereiche nicht vergessen. In diesem Handbuch werden vorrangig die Problematiken des physischen Designs bei DB2 behandelt. Die Problematik der SQL-Verarbeitung findet man im Band „SQL und DB2 Performance“ aus dieser Reihe „Tuning und Performance für DB2-Umgebungen“. 2 = DB2 System (10%) 3 = phys. DBDB-Design (20%) 4 = Anwendung (60%) 1 2 3 4 1 = OS System (10%) Bild-01: Tuningpotentiale im DB2-Umfeld © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 9 von 29 DB2 –Physisches Design 2.2 Das physische DB-Design und seine Umsetzung nach DB2 Auf dem Markt gibt es eine Vielzahl von Datenbankmanagementsystemen, die sich zwar leicht in Gruppen, wie • Relational • CODASYL • Hierarchisch • Objektorientiert einteilen lassen, sich aber in vielen Leistungsmerkmalen deutlich voneinander unterscheiden. Ziel des systemspezifischen DB-Design ist es, ausgehend vom konzeptionellen Informationsmodell, systematische Überführungsschritte in das Ziel-DBMS festzulegen, in denen insbesondere die Stärken des Zielsystems berücksichtigt werden. 2.2.1 Allgemeine Vorgehensweise Basis des physischen DB-Designs bilden die methodischen Säulen: Konzeptionelles Informationsmodell und Prozess- oder Funktionsmodell: Dabei liefern diese beiden Ergebnistypen generell folgende Anhaltspunkte für das Physische DatenbankDesign: Konzeptionelles Informationsmodell Funktionsmodell D Grafik D Grafik D Dokumente D Beschreibung D (Mengen) D (Häufigkeiten) D („business rules" / Domänen) D (Zugriffsarten / Verarbeitungswege).. Bild-02: Allgemeine Vorgehensweise beim Informationsdesign © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 10 von 29 DB2 –Physisches Design 2.2.2 Vorgehensweise gemäß Ziel-DBMS Jedes Ziel-DBMS, ob relational oder von anderer Architektur, verlangt nach individueller Anpassung der konzeptionellen Strukturen unter Performance- und Nutzungsgesichtspunkte 2.3 2.3.1 Das physische DB-Design bei DB2 Überführung des Informationsmodells - allgemeine Vorgehensweise Die Überführung kann beim physischen DB-Design aus den folgenden Schritten kumulativ oder selektiv erfolgen: 1. Überführung des Informationsmodells Übernahme von Satztypen Zusammenlegen von Satztypen Normalisierung Denormalisierung Trennen von Satztypen 2. Ergänzen des DB-Modells Schaffung zusätzlicher Tabellen Ergänzen zusätzlicher Felder © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 11 von 29 DB2 –Physisches Design 2.3.1.1 Übernahme von Satztypen In der Regel können bei relationalen Datenbanksystemen die konzeptionellen Strukturen zumindest teilweise 1:1 in die Datenbank übernommen werden, d.h. Entity-Type = Tabelle Die Gefahr dabei ist, dass in der Datenbank viele "kleine" Tabellen entstehen, die im Applikationsumfeld zu übermäßigen "Join"-Aktivitäten führen und damit die Performance, abhängig von der Anzahl solcher Aktionen, durchaus negativ beeinflussen. Daher gilt grundsätzlich die Empfehlung, das konzeptionelle Datenmodell (KDM) gemäß den Möglichkeiten der DBMS-Physik zu transformieren, sodass der technische Aufwand des Systems für den zukünftigen Produktionsbetrieb minimiert werden kann. Beispiel: KUNDE KUNDE KUNDE (kd-nr) (kd-nr) •Kd-nr Kd-adresse ...... Kd-konto (!) Kd-saldo (!) Kd-letzte-bewegung Gehört zu hat KONTO KONTO (kto-nr) (kto-nr) Bild-03: Übernahme von Satztypen beim Informationsdesign 2.3.1.2 Zusammenlegen von Satztypen Bei einer 1:1 - Beziehung kann eine Zusammenlegung günstig sein, falls beide Satztypen in wichtigen Benutzersichten gemeinsam verwendet werden. In den Applikationen ist dann kein „join" erforderlich. ACHTUNG: Man berücksichtige die Einstiegspunkte, die von den Funktionen vorgegeben werden. – So ist in diesem Beispiel Kd-konto als Tabellenspalte ein Schlüssel- bzw. Index-Kandidat Bei einer 1:n - Beziehung ist eine Zusammenlegung von Satztypen dann sinvoll, wenn der n-Satztyp ISOLIERT im Informationsmodell steht. © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 12 von 29 DB2 –Physisches Design Unter isolierten Satztypen versteht man Entitätstypen, die zwar von einer "relationship-type" erreicht werden, die aber in keiner Beziehung zu anderen "entity types" stehen. Eine Zusammenlegung ist insbesondere dann empfehlenswert, wenn der Wunsch nach Detaildaten im abhängigen Objekt durch die Verfügbarkeit beispielsweise der aktuellsten ("letzten") Daten zum Objekt ersetzt werden kann. Im folgenden Beispiel wird das Vorgehen dadurch erleichtert, dass die Anzahl abhängiger "entities" pro übergeordnetem "entity" begrenzt ist. KUNDE KUNDE (kd-nr) (kd-nr) Hat zur Folge (3) KONTO KONTO (kto-nr) (kto-nr) Gehört zu RECHNUNG • Re-nr Re-datum Re-betrag ...... M-stufe (!) M-datum (!) M-kosten Bild-04: Zusammenlegung von Satztypen beim Informationsdesign ACHTUNG Beachten Sie, inwieweit Informationen verloren gehen, wenn Sie "entity-types" aus Performance-Gründen zusammenlegen. KEINEZUSAMMENLEGUNG bei unterschiedlicher Existenzberechtigung / -dauer!!! © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 13 von 29 DB2 –Physisches Design 2.3.1.3 Denormalisierung Denormalisierung bedeutet nichts anderes, als Datenstrukturen, die sich in der 3. Normalform befinden, wieder in eine der vorgeordneten Normalformen zurückzuführen. Denormalisierte Strukturen helfen insbesondere bei relationalen DBMS JOINOperationen zu verhindern und so die Performance in bestimmten Bereichen, d.h. beim LESEN ( SELECT ...), zu steigern. Beispiel: Relation: KUNDE normalisiert: KUNDE ORT { KD_NR, KD-Name, KD-PLZ, KD-ORT, KD-Strasse ..} { KD-NR. KD-Name, KD-OKZ, KD-STRNR ....} { OKZ, O-PLZ, O-ORT, EINWOHNERZAHL...} KUNDE_WOHNT_IN {OKZ. O-STRNR. KD-STRNR. ETAGE. RAUM...} STRASSE {OKZ, O-STRNR. STR_BEZEICHNUNG ...} Unter der Annahme, dass die Kundendaten in 90% aller Fälle auch die Adressdaten des Kunden enthalten müssen, ist eine Denormalisierung wie folgt empfehlenswert: KUNDE { KD-NR, KD-NAME,..., KD-PLZ, KD-ORT, KD-STR, KD-STR-NR, KD-HAUS, KD-ETAGE,....} ACHTUNG Bei jeder Denormalisierung entstehen Redundanzen, die GEPFLEGT werden müssen, um die DB-Inhalte KONSISTENT zu halten Als Bedingung und sinnvolle Voraussetzung für denormalisierte Strukturen gilt: 1. Die Denormalisierung spart in hohem Maße DBMS-Zugriffe ("Joins") 2. Der Änderungsaufwand der Redundanzen ist überschaubar 3. Die Änderungshäufigkeit der entstandenen redundanten Daten ist möglichst gering ! © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 14 von 29 DB2 –Physisches Design 2.3.1.4 Trennen von Satztypen Die Trennung von Satztypen kann dann sinnvoll sein, wenn die Daten eines Entitätstyps von vollständig unterschiedlichen Organisationseinheiten genutzt und bearbeitet werden sollen, vorgangsorientierte Daten verarbeitet und zur Verfügung gestellt werden sollen. Beispiel: BANKTRANSAKTIONEN • • TRANS-FILIALE TRANS-LFD-NR TRANS-ART …….. TRANS-STATUS-1 TRANS-STATUS-2 ………… ( 10 Mio. Zeilen ) bezeichnet den Zustand im Bearbeitungsverlauf: B = gebucht ( 5 Mio ) G = Vorlage zur Genehmigung ( 1 Mio ) C = zur Überweisung freigegeben ( 4 Mio ) D = überwiesen ( 27 Mio inkl. Historiendaten) usw. bearbeitet ? D Ja/Nein ( 8 Mio / 2 Mio ) Bild-05: Trennen von Satztypen beim Informationsdesign Im o.g. Beispiel besteht das Problem darin, dass Anforderungen wie "...alle genehmigungspflichtigen Transaktionen... " oder " ... alle zur Überweisung freigegebenen Transaktionen ..." aber insbesondere " ... alle nicht bearbeiteten Transaktionen ..." bei DB2 zu einem "tablespace-scan", d.h. zum sequentiellen Lesen von 10 Millionen Datensätzen führen würde, da eine Indizierung über Spalten mit zu wenigen Ausprägungen keine DB2-adäquate Selektivität aufweisen könnte. Möglicherweise liegt in einem solchen Fall ein Analyse-Fehler vor. Andernfalls könnte folgende Empfehlung gelten, um die benötigten Teilmengen möglichst genau einzuschränken: Relation_1: GEBUCHTE_TRANSAKTIONEN { .... } Relation_2: GENEHMIGUNGSPFLICHTIGE_TRANSAKTIONEN { .... } Relation_3: …… © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 15 von 29 DB2 –Physisches Design ACHTUNG Das Problem von Kombinationen verschiedener StatusInformationen kann durch diese Vorgehensweise NICHT gelöst werden: REDESIGN ist angesagt Sollen die gleichen Daten mehreren unterschiedlichen Organisationseinheiten (OE) zur Verfügung gestellt werden, z.B.. in "Client-Server"- oder verteilten Umgebungen, so stehen hier seitens des DBMS die Möglichkeiten der - Replikation - Partitionierung von Tabellen zur Verfügung. Vorausgesetzt die technische Implementierung des DBMS bietet diese "features" in der aktuellen Version an. © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 16 von 29 DB2 –Physisches Design 2.3.1.5 Schaffung zusätzlicher Tabellen In vielen Fällen kann die Schaffung zusätzlicher Spalten/Tabellen aus Performance-Gründen nützlich sein. Dies ist der Fall bei Ergebnis- und Summendaten Unterstützung von Aggregatsfunktionen im Rahmen von Auswertungen Historischen Daten Eingestreut separat Bild-06: Aufbau zusätzlicher Tabellen beim Informationsdesign Problematisch kann dies bei referentieller Integrität sein ! © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 17 von 29 DB2 –Physisches Design 2.3.1.6 Ergänzen zusätzlicher Felder im physischen Datenmodell Zusätzliche Felder sind Felder, die Zugriffe beschleunigen können, Updates sicherer machen, Joins verhindern helfen usw. aber aufgrund der konzeptionellen Datenmodellierung nicht erforderlich wären. Beispiele: Abgeleitete Daten z.B. Brutto-Betrag, Summenfelder Kennzeichen, ob in abhängigen Tabellen weitere Informationen vorliegen oder nicht; z.B. Zweit-/Dritt-Adressen Für zusätzliche Zugriffsmöglichkeiten z.B. Matchcode, phonetisierte Schreibweise, Großschrift Als Protokollierungs- und Steuerungsinformation z.B. Datum letzte Änderung, Langfrist-Sperrkennzeichen Für Zugriffsschutz z.B. Code für Benutzerberechtigung Gültigkeitsinformationen Technische Informationen z.B. Visualisierungsinformationen (CRT, 3270 ... ) Weiterverarbeitungsinformationen z.B. für Datawarehousing, Reporting, Aggregationen ... Spezielle Sicherheitskennzeichen © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 18 von 29 DB2 –Physisches Design 2.3.2 Grundsätzliche Regel bei DB2 Speicherplatzersparnis ist nicht so wichtig wie weniger Tabellen. Zum Thema Komprimierung vorab folgende Information: Der Einsatz von Komprimierungsfunktionen macht viele Speicherplatzüberlegungen annähernd überflüssig. Die heute möglichen Kompressionsraten und die damit verbundenen Platzersparnisse erfordern nur marginal höhere Aufwände bei CPU- und Laufzeiten der Prozesse: mögliche Kompressionsrate bei kommerziellen Daten 40 - 70 % Erhöhung der CPU-Zeit ca. 15 %* Verringerung der Laufzeit serieller Prozesse ca. 10 %* (stark schwankend in Einzelfällen!!) © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 19 von 29 DB2 –Physisches Design 2.4 Überführen der Beziehungen Beziehungen werden über Schlüsselredundanzen realisiert: „primary key" D „foreign key". Dabei ist es wichtig zu wissen, ob nur eine oder BEIDE Richtungen der Beziehungen benötigt werden. Fall 1: Kd_nr KUNDE KUNDE (kd-nr) (kd-nr) KUNDE Gehört zu vergibt Auf_nr Kd_nr AUFTRAG AUFTRAG (auf-nr) (auf-nr) AUFTRAG Bild-07: Beispiel-1 - Übernehmen der Beziehungen beim Informationsdesign Im ersten Fall könnte man einen aus der "auf-nr" und der "kd-nr" zusammengesetzten Identifikator verwenden. Im zweiten Fall kann man davon ausgehen, dass eine „künstliche“ Auftragsnummer - laufende Nummer - definiert wurde, die mit den Kundendaten direkt nichts zu tun hat. Die "kd-nr" kommt lediglich als „foreign key“ als Abbildung der Beziehung zwischen KUNDE und AUFTRAG zum Einsatz. Beziehungen werden über Schlüsselredundanzen realisiert: „primary key“ D „foreign key“ Es ist dabei wichtig zu wissen, ob nur eine oder BEIDE Richtungen der Beziehungen benötigt werden. Eine vollständige Indizierung der PK/FK-Beziehungen ist bei DB2 dringend zu empfehlen: •Von Tabelle zu Tabelle •Bei „self referencing tables“ •Pro Tabelle mindestens: 1 Primary Key (PK) 1 „clustering key (CK)“ © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 20 von 29 DB2 –Physisches Design Fall 2: Kd_nr KUNDE KUNDE (kd-nr) (kd-nr) KUNDE Gehört zu vergibt Auf_nr AUFTRAG AUFTRAG (auf-nr) (auf-nr) AUFTRAG Bild-08: Beispiel-2 - Übernehmen der Beziehungen beim Informationsdesign © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 21 von 29 DB2 –Physisches Design 2.5 Einrichten der Zugriffspfade am Beispiel DB2 DB2 kennt Methoden für • „Index based" Zugriffe und • „tablespace scan" Ziel eines effizienten physischen DB-Design wird es sein, indexbasierte Zugriffe zu ermöglichen. Ob DB2 dann aber Indizes nutzt, hängt nicht allein vom DB-Design, sondern unter anderem und vor allem auch von der Formulierung der SQL-„Query" ab. Allerdings muss man pro „Tabelle" mindestens einen Index zur Verfügung stellen: • einen „primary key index" • evtl. „cluster index" Ausgangspunkt für die Festlegung sind dabei die Einstiegspunkte der konzeptionellen Datenstruktur und die Nutzung der Daten in den Anwendungen! Man beachte: Bei konkurrierenden Einstiegspunkten sollte der Index gewählt werden, der möglichst „hochwertig" ist: 1. „cluster index" 2. „primary key" oder „unique index" 3. „normaler" Index Wird der Datenbestand sehr häufig erweitert (INSERT ) oder verringert (DELETE), so sollten im Sinne der Performance möglicht SELEKTIVE . aber WENIGE Indizes auf den Tabellen liegen(siehe auch Kapitel: "Indizierung" Pkt. 1.3 75.4 ff.). © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 22 von 29 DB2 –Physisches Design 2.6 Festlegen der physikalischen DB-Struktur 1. Berechnen der TS-Größe a) b) c) d) e) primary space" / „secondary space" Bestimmen zusammengehöriger Tabellen für EINEN TS Bestimmen des TS-Typs (STS, PTS, normaler TS) Festlegen des Füllgrades (PCTFREE, FREEPAGE) COMPRESSYES/NO 2. Berechnen der IX-Parameter 3. Bestimmen der LOCKING und ISOLATION - Parameter a) b) c) d) LOCKSIZE ISOLATION Level RR / CS Zuordnung zu STOGROUPS DEGREE ANY(?) 4. Festlegen der Datentypen in den Tabellen a) b) c) d) e) wenige NULL-Felder eher NOT NULL WITH DEFAULT keine Tabellen-PROC ( VALIDPROC, EDITPROC, FIELDPROC...) keine LONGVARCHAR / VARCHAR - Felder VARCHAR und NULL-Felder ans Ende der Tabelle Definition der RI-Bedingungen (falls nötig) 5. Festlegen der „views" 6. Definition der DB2-Datenbanken a) b) c) nach organisatorisch / administrativen Gesichtspunkten nach Datenverfügbarkeitsanforderungen (mit Hilfe der Datenbankadministration !) Test mit Hilfe „manuell" eingetragener RUNSTATS-Werte 7. Definition von „remote“-Zugriffswegen T e s t d a te n b a n k e n s i n d s e l t e n g l e i c h d e r PROD-Datenbank !! © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 23 von 29 DB2 –Physisches Design 2.7 Festlegen der DB2 Datentypen Die Festlegung des Datentyps führt zu 2 wichtigen Bestimmungen bei DB2Tabellen: 1. Inhalt (Wertebereich) der Spalte, z.B. kann INTEGER nur ganzzahlige Werte aufnehmen von -2.147.483.648 bis + 2.147.483.647 2. Länge des Datenfeldes, z.B. INTEGER ist 4 Byte lang. Datentyp Bedeutung CHAR(n) / CHARACTER (n) alphanumerisches Feld fester Länge VARCHAR (n) alphanumerisches Feld variabler Länge LONG VARCHAR "string" variabler Länge 32.767 Byte BIT repräsentiert nicht ausschließlich CHAR und wird nicht auf druckbare Zeichen konvertiert siehe CHAR SBCS "single-byte-characters": Inhalte werden nach CCSID konvertiert D CCSID: "coded chracter set identifier" siehe CHAR MIXED repräsentiert SBCS oder DBCSZeichen: "double-byte-character" siehe CHAR DEC(n,m) / DECIMAL(n,m) NUMERIC(n,m) numerisch gepackt Achtung: Leerstelle nach Komm 1 - 10**31 bis 10**31 - 1 <= 8 INT / INTEGER binäres Vollwort -2.147.483.648 bis +2.147.483.647 4 SMALLINT binäres Halbwort -32.768 bis +32.767 2 REAL / FLOAT (n) Gleitkommakonstante mit einf. Genauigkeit FP in 32 bits 75 75 -7.2×10 bis 7.2×10 4 FLOAT / FLOAT (n) DOUBLE PRECI SION Gleitkommakonstante mit dopp. Genauigkeit FP in 64 bits 79 79 -7.2×10 bis 7.2×10 8 TIME interne Zeitdarstellung ( ttmmss ) Zeitwert: 00.00.00 bis 24.00.00 3 DATE interne Datumsdarstellung ( yyyymmdd ) Datum: 0001-01-01 bis 9999-12-31 4 TIMESTAMP Datum + Zeit + Systemzeit 10 ROWID eindeutiger Identfier einer TabZeile(nur BIT) 17(intern) CLOB variabel Large CHAR Objekt(SBCS oder „mixed“) 2 GB -1 BLOB variabel Large binary Objekt(for BIT DATA) 2 GB -1 DBLOB variabel double-Byte CHAR O bjekt(DBCS) 1 GB -1 © S.K. Consulting Services ++49 8106 994390 max. Wert Länge 0 < n < 255 n 4046 B für 4-KB pages 8128 B für 8-KB pages 16320 B für 16-KB pages 32704 B für 32-KB pages www.sk-consulting.de n <= 32KB Seite 24 von 29 DB2 –Physisches Design 3 3.1 Basis-"Regeln" zum physischen Design von DB2 Datenbanken "Keep Like Things Together" Fassen Sie alle Tabellen, die zur selben Applikation gehören in einer Datenbank zusammen und geben Sie jedem Anwendungsprozess, der eigene Tabellen benötigt eine eigene "private" Datenbank. Im idealen Umfeld nutzt jeder Anwendungsprozess so wenige Datenbanken und Tabellen wie nur irgenwie möglich. 3.2 "Keep Unlike Things Apart" Geben Sie den Benutzern unterschiedliche Authorisierungen für ihre Arbeit in unterschiedlichen Datenbanken; z.B. eine UID für die Arbeit in einer gemeinsamen und eine UID für die Arbeit mit der "privaten" Datenbank. 3.3 "Cluster Your Data" Versuchen Sie Daten, die zusammen zugegriffen werden sollen, mindestens in einer Tabelle, besser noch in einer einzigen "Page" zu halten. Eine Tabelle, die bei Beginn der Verarbeitung leer ist und nach und nach gefüllt wird, ist nie in einem effizientem "cluster"-Zustand. Alle Einfügungen passieren am Ende der Tabelle und verursachen Konflikte speziell während der Zeit in der die Tabelle annähernd leer ist und der Index nur eine oder zwei Ebenen besitzt. Typ 2 Indizes können diesem Manko Abhilfe schaffen. 3.4 "Consider Type 2 Indexes" Bei Typ 2 Indizes werden nur die Daten gesperrt, nicht aber die Index-Pages. Dies verursacht weniger Engpässe, als die Sperrung von Indexpages, da in den IXPages in der Regel mehr Daten gespeichert sind, als in einer Datenpage. Auch IXPage-Splits werden vom Typ 2 Index effizienter gehandhabt als vom "alten" Typ 1 Index. Achten Sie auf die Einfügung von NULL-Werten, da DB2 diese IMMER als "highvalue" interpretiert. Besitzt nun ein zusammengesetzter Index einen NULL-Wert in der ersten Spalte, so können "non-NULL" Indexwerte von diesem speziellen "high value"-Split trotz Typ 2 Index nicht profitieren. Beispiel: SMITH ROBERT J => INSERT Anschließend SMITH ROBERT (null) SMITH ROBERT Z dann wird der letzte Satz nicht als "high key" verarbeitet (!) 3.5 "Use Locksize ANY" LOCKSIZE ANY ist "default" beim CREATE TABLESPACE. Dies ermöglicht DB2 die Sperrebene selbst zu wählen. Dabei benutzt DB2 in der Regel "page" als SperrLevel und LOCKMAX aus dem System. © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 25 von 29 DB2 –Physisches Design Bevor man LOCKSIZE auf TABLE, oder TABLESPACE setzt, sollte man die Anforderungen der Anwendungen bezüglich der parallelen Verarbeitungsalgorithmen prüfen. Andererseits sollte man auch die Angabe von LOCKSIZE ROW dahingehend überprüfen, ob dadurch nicht ein übermäßiger Aufwand für Locking entsteht. 3.6 "Examine Small Tables" Für kleine Tabellen mit hoher Parallelverarbeitungsqualität überprüfe man die Anzahl Pages auf dem TS und im Index. Ist der Indexeintrag kurz oder gibt es viele doppelte Werte, dann kann man davon ausgehen, dass nur EINE "root-page" und wenige "leaf-pages" existieren. In diesem Fall sollte man die Daten streuen, um möglichst hohe parallel Verarbeitungsquoten zu erreichen. Oder man entscheidet sich für Typ 2 Indizes und "row locks". 3.7 "Partition the Data" Online Queries machen erfahrungsgemäß wenige Änderungen, sind kurz, laufen aber häufig ab. Batch-Programme sind das genaue Gegenteil davon: Sie dauern länger, ändern viele "rows", laufen aber selten. Die beiden Verarbeitungsarten sind nicht besonders gut geeignet, parallel zu arbeiten. Es ist also wichtig, Online und Batch voneinander zu trennen, falls dies möglich ist. Dazu geeignet ist eine entsprechende Partitionierung der Daten. 3.8 "Fewer Rows of Data per Page" Über den Parameter MAXROWS kann man die maximale Anzahl von Datensätzen pro Page festlegen, nutzt man z. B. MAXROWS 1, so besetzt jede "row" genau eine Page. Dies kann eine Lösung sein, wenn "row locking" vermieden werden soll, wie in "data sharing environments", da dort ein "row locking" übergroßen "overhead" erzeugen würde. MAXROWS wirkt nicht auf Indizes. 3.9 "Access Data in Consistent Order" Greifen unterschiedliche Applikationen auf dieselben Daten zu, sollte man versuchen diese dazu zu bringen dieselben Daten in derselben Sequenz zu lesen und zu verarbeiten; z. B. 1, 2, 3, 5. In diesem Fall kann es sein, dass eine Applikation Zeit verliert, aber es wird nie zu "deadlocks" kommen. Aus diesem Grund sollte man wo möglich auch Tabellen in derselben Reihenfolge verarbeiten lassen. 3.10 "Commit As Soon As Practical" Um unnötige Lock-Blockaden zu vermeiden, sollte nach Erreichen des "point-ofconsistency" so früh wie möglich ein COMMIT abgesetzt werden, auch in "readonly" - Programmen. Um fehlerhafte SQL-Statements - wie z.B. PREPARE, daran zu hindern, Locks weiter zu halten, sollte man im Fehlerfall unbedingt einen ROLLBACK absetzen. © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 26 von 29 DB2 –Physisches Design 3.11 "Retry Application After Deadlock/Timeout" Man sollte eine Logik in die Programme einbauen, die die Funktion/Transaktion nach einem "deadlock" oder einem "timeout" erneut versucht. Dies macht Eingriffe seitens des Betriebspersonals bzw. des „Operatings“ überflüssig. 3.12 "Close Cursors" CLOSE CURSOR sollte genutzt werden, um belegte Ressourcen freizugeben - insbesondere nach der Nutzung eines Cursors mit der Klausel WITH HOLD und der Verwendung von „scrollable cursors“ (seit DB2 V7). 3.13 "Bind Plans With ACQUIRE(USE)" 3.14 "Bind With ISOLATION(CS) And CURRENTDATA(NO)" 4 DB2-Objekte – Strukturierungsempfehlungen Der Begriff “Objekte” umfaßt bei DB2 alles, was mit der Sprache SQL definiert und manipuliert werden kann (Im Rahmen der DDL und der DML). Bei DB2 fallen folgende Begriffe unter die Bedeutung DB2-Objekte: Datenbanken (database) Tabellen (table) Benutzersichten (view) Synonyme (synonym) Indizes (index) Tabellenspeicher (tablespace / partition ) Speicherplatz-Gruppen (storage group / file / extent) Constraints / Triggers / „stored procedures“ User Plans / Packages .... Schemas usw. Die Objekte, die für das physische Design von vorrangiger Bedeutung sind werden in den folgenden Punkten detailliert besprochen. © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 27 von 29 DB2 –Physisches Design © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 28 von 29 DB2 –Physisches Design ENDE © S.K. Consulting Services ++49 8106 994390 www.sk-consulting.de Seite 29 von 29