DB2 –Physisches Design Inhaltsverzeichnis Standards, Tipps und Grundlagen zu DB2-Datenmodellen und deren Implementierung in der DB2-Physik DB2 Effizientes DB-Design und Physische Strukturen © S.K.Consulting Services GmbH ++49 (0)162 4468790 Ausgabe www.sk-consulting.de 11:Seite 2015 V77 20.01.1 1 von DB2 –Physisches Design Inhaltsverzeichnis Inhaltsverzeichnis 1 VORWORT ....................................................................................................................... 8 2 GRUNDSÄTZLICHES ZU DB2 UND PERFORMANCE ................................................ 10 2.1 Optimierungspotentiale bei DB2 ........................................................................... 10 2.2 Logische Datenmodellierung ................................................................................. 11 2.3 2.3.1 2.3.2 2.3.3 2.3.4 Ziel der Datenmodellierung ................................................................................... 12 Integrität ................................................................................................................... 12 Redundanzen ............................................................................................................ 12 Wartbarkeit und Flexibilität ...................................................................................... 12 Wiederverwendbarkeit und Mehrfachverwendbarkeit .............................................. 13 2.4 Eigenschaften des logischen Datenmodells ........................................................... 13 2.5 Einsatzmöglichkeiten des logischen DM im Sofware-Life-Cycle(SLC) ............. 14 2.6 Logische Datenmodellierung - Beispiel ................................................................. 15 2.7 2.7.1 2.7.2 Physisches DB-Design und seine Umsetzung nach DB2 ...................................... 16 Allgemeine Vorgehensweise .................................................................................... 17 Vorgehensweise gemäß Ziel-DBMS ........................................................................ 18 3 DAS PHYSISCHE DB-DESIGN BEI DB2 ...................................................................... 19 3.1 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 Überführung des Informationsmodells - allgemeine Vorgehensweise ............... 19 Übernahme von Satztypen ........................................................................................ 20 Zusammenlegen von Satztypen ................................................................................ 20 Denormalisierung ..................................................................................................... 22 Trennen von Satztypen ............................................................................................. 23 Schaffung zusätzlicher Tabellen ............................................................................... 25 Ergänzen zusätzlicher Felder im physischen Datenmodell ....................................... 26 3.2 Grundsätzliche Regel bei DB2 ............................................................................... 27 3.3 Überführen der Beziehungen ................................................................................. 27 3.4 Einrichten der Zugriffspfade am Beispiel DB2 .................................................... 29 3.5 Festlegen der physikalischen DB-Struktur ........................................................... 30 3.6 Festlegen der DB2 Datentypen .............................................................................. 31 3.7 VARCHAR Alternativen zugunsten der Performance ....................................... 33 3.8 Weitere Limits in DB2 seit Version 8 bis V11 ...................................................... 34 4 EMPFEHLUNGEN ZUM PHYSISCHEN DESIGN VON DB2 DATENBANKEN ........... 36 © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 2 von 77 DB2 –Physisches Design Inhaltsverzeichnis 4.1 Allgemeines zum Design von DB2-Datenbanken ................................................. 36 4.2 Spezielle Empfehlungen zum physischen Design von DB2 Datenbanken ........... 40 5 DB2-OBJEKTE – STRUKTURIERUNGSEMPFEHLUNGEN ........................................ 41 5.1 Die Hierarchie der physischen DB2-Objekte ....................................................... 41 5.2 5.2.1 5.2.2 5.2.3 5.2.4 Datenbanken (Databases) ...................................................................................... 42 Die wichtigsten Definitionsparameter ...................................................................... 43 Autorisierungen ........................................................................................................ 44 Beispiele zur Definition von Databases .................................................................... 44 Gründe separate „Databases“ zu erzeugen .............................................................. 45 5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.3.8 5.3.9 5.3.10 5.3.11 5.3.12 5.3.13 5.3.14 5.3.15 5.3.16 5.3. 5.3.18 5.3.19 5.3.20 5.3.21 5.3.22 Tabellenspeicher (Tablespaces) ............................................................................. 46 Die Privilegien für CREATE TS .............................................................................. 46 Die Namensvergabe für TS ...................................................................................... 47 Explizites Erzeugen eines Tablespace ...................................................................... 47 Implizites Erzeugen eines Tablespace ...................................................................... 47 Die DB2 Tablespace Typen ...................................................................................... 48 “EA-enabled” Tablespaces und Indexspaces ............................................................ 49 Simple table spaces ................................................................................................... 51 Universal Table spaces ............................................................................................. 51 Large Object Tablespaces (LOB TS)........................................................................ 61 “inline LOBs” (ab DB2 10) ...................................................................................... 64 XML Tablespaces ..................................................................................................... 68 Partitionierte Tablespaces ......................................................................................... 69 Ziel und Einsatz von PTS ......................................................................................... 71 Weitere Überlegungen zu PTS(Pros und Contra) ..................................................... 71 TS Limits ab V8 ....................................................................................................... 74 PTS-Typen seit DB2 Version 8 ................................................................................ 74 Einsatz und Aufbau von “segmented TS“ ................................................................ 85 Empfehlungen zu "tablespaces" ................................................................................ 88 Die Zuweisung von TS auf einen physischen Speicherplatz .................................... 89 TABLESPACE- Definition ...................................................................................... 90 Beispiele zum CREATE TS ..................................................................................... 97 Die TS und ihre Zustände(Status) ........................................................................... 100 5.4 5.4.1 5.4.2 5.4.3 5.4.4 5.4.5 5.4.6 5.4.7 5.4.8 5.4.9 5.4.10 5.4.11 5.4.12 5.4.13 5.4.14 5.4.15 5.4.16 5.4.17 5.4.18 5.4.19 Tabellen (Tables) .................................................................................................. 103 Die Privilegien für CREATE TABLE .................................................................... 103 Die Datentypen für DB2 Tabellen .......................................................................... 104 Strategien zur Anordnung von Tabellenspalten ...................................................... 105 Tabellendesign und JAVA Performance ................................................................ 106 Neue Tabellen- TS-Typen seit DB2 Version 8 ....................................................... 107 Die wichtigsten Definitionsparameter zur „table“ .................................................. 107 Die Größe von Tabellen (Tables) ........................................................................... 126 Große Tabellen (LARGE Tables) ........................................................................... 127 Partitionierung großer Tabellen (LTS) ................................................................... 128 VOLATILE Tables ................................................................................................. 132 „Global temporary Tables“ - CTT, DTT ................................................................ 133 “Clone Tables” ....................................................................................................... 137 "materialized query tables"(MQT's) und "automatic query rewrite"(AQR) ........... 143 „Temporal Tables“(ab DB2 10) .............................................................................. 145 „Hash organized Tables“ ........................................................................................ 167 DB2 9/10 – neue Datenformate(RRF/BRF etc) ...................................................... 170 Optimales Logging Verhalten bei DB2 Tabellen ................................................... 172 Referenzielle Constraints ........................................................................................ 172 „Table Check Constraints“ ..................................................................................... 173 © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 3 von 77 DB2 –Physisches Design Inhaltsverzeichnis 5.4.20 5.4.21 5.4.22 5.4.23 5.4.24 5.4.25 5.4.26 5.4.27 5.4.28 Definition einer generierten Spalte in einer neuen Tabelle ..................................... 174 INSERT-Algorithmen unter Nutzung des "partitioned Index" ............................... 176 INSERT-Algorithmen unter Nichtbeachtung des "partitioned Index".................... 179 "Combined Technique"-INSERT-Algorithmen ...................................................... 180 "Code-Tables" ........................................................................................................ 181 "Flip-Flop Tables" .................................................................................................. 182 "Hot Spots" ............................................................................................................. 183 Beispiele zum Table CREATE ............................................................................... 184 Weitere Tips zum Table – Design .......................................................................... 189 5.5 5.5.1 5.5.2 5.5.3 5.5.4 5.5.6 5.5.7 5.5.8 5.5.9 5.5.10 5.5.11 5.5.12 5.5.13 5.5.14 5.5.15 5.5.16 5.5.17 5.5.18 5.5.19 5.5.20 5.5.21 5.5.22 5.5.23 5.5.24 5.5.25 5.5.26 5.5.27 5.5.28 5.5.29 Indizes (Indexe) ..................................................................................................... 193 Indexstrukturen und Konzepte ................................................................................ 194 Die Indexarten ........................................................................................................ 198 Die Indexdefinition ................................................................................................. 198 Überlegungen zu Indizes ........................................................................................ 206 Die Definition eines PK Index ................................................................................ 208 Der Einsatz von "clustering" Indizes ...................................................................... 210 Der "partitioned“ und der „partitioning“ Index ..................................................... 212 "Non-Partitioning Secondary Indexes"(NPSI)....................................................... 213 "Data Partitioned Secondary Indexes"(DPSI)........................................................ 214 LOB Indexes .......................................................................................................... 216 XML Indexe ........................................................................................................... 216 Non-Unique Indexe ................................................................................................ 217 Ersatzstrategien zu „Non-Unique“ Indizes über Design-Maßnahmen .................... 219 Die Index-Klausel UNIQUE WHERE NOT NULL ............................................... 220 "Non-Partititioned" Index "Pieces" ......................................................................... 220 Indizes zur Vermeidung von Sort-Vorgängen ........................................................ 220 Indizes auf mehr als einer Spalte ............................................................................ 221 Anlegen und Wiederfinden von langen IX-Einträgen ............................................ 224 Match-Codes ........................................................................................................... 225 Ergänzen weiterer Felder ........................................................................................ 226 Die Indizierung von VARCHAR Spalten ............................................................... 227 Index “on expression”............................................................................................. 227 Weitere Tipps zum Index-Design ........................................................................... 230 „Indexing“-Strategien für optimale Performance ................................................... 232 Komprimieren von Indizes ..................................................................................... 237 Index Maintenance ................................................................................................. 246 Queries und mögliche Indizierungsstrategien ......................................................... 247 CREATE INDEX - Beispiele ................................................................................. 254 5.6 5.6.1 5.6.2 Views ...................................................................................................................... 256 Sinn und Zweck von Views .................................................................................... 256 Benutzen von „common table expression“ anstelle von VIEWs ............................ 258 5.7 Alias ....................................................................................................................... 259 5.8 5.8.1 5.8.2 5.8.3 5.8.4 5.8.5 5.8.6 5.8.7 5.8.8 5.8.9 5.8.10 Besondere DB2-Objekte ....................................................................................... 259 Sequences und „identity columns“ ......................................................................... 259 Die Entscheidung für “identities” und/oder “sequences” ....................................... 260 Beispiele für „sequences“ und „Identity columns” ................................................. 261 Tabellen mit mehrdimensionalem Clustering – MDC Tabellen ............................. 272 Materialized Query Tables – MQT’s ...................................................................... 272 “inline” - LOB Daten .............................................................................................. 275 Eigendefinierte (SQL-) Variable ............................................................................ 275 Eigendefinierte ARRAYs ....................................................................................... 276 “temporal special registers” .................................................................................... 278 Temporäre INCLUDE Variable.............................................................................. 279 © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 4 von 77 DB2 –Physisches Design 6 Inhaltsverzeichnis PARALLELE VERARBEITUNGSPROZESSE ............................................................ 280 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.1.6 6.1.7 6.1.8 6.1.9 6.1.10 6.1.11 6.1.12 6.1.13 6.1.14 6.1.15 Locking bei DB2.................................................................................................... 280 Die Begriffe beim "Locking ................................................................................... 280 Probleme beim “Locking“ ...................................................................................... 281 Verbessern der Lock-Verwendung ......................................................................... 281 Generelle Empfehlungen ........................................................................................ 282 Vermeiden von "false contention" .......................................................................... 283 Monitoring auf "false contention" .......................................................................... 283 Wie viel “contention” ist akzeptabel? ..................................................................... 283 Wie kann man “false contentions” reduzieren? ...................................................... 284 Verändern der Größe einer „lock structure“ ........................................................... 284 Dynamische Änderung der “lock structure“ Größe ................................................ 284 Ändern der “lock structure” Größe durch Neuaufbau ............................................ 285 Verringern der “lock entry size” ............................................................................. 287 Reduzieren der Zeit bis zur Auflösung von “contentions” ..................................... 288 Vermeiden von “partition locks” auf alle TS Partitions ......................................... 288 DB2 und Locking (Begriffe) .................................................................................. 290 6.2 6.2.1 6.2.2 6.2.3 6.2.4 Der LOCKSIZE-Parameter und seine Bedeutung ............................................ 292 Anzahl "rows per page" .......................................................................................... 292 Die Ebenen der Kontrolle ....................................................................................... 293 "Lock Escalation" ................................................................................................... 294 "row locking" und seine Kosten ............................................................................. 295 6.3 6.3.1 6.3.2 Index-Design und konkurrierende Verarbeitung .............................................. 296 Konkurrierende Verarbeitung UPDATE und SELECT(Fall 1) .............................. 298 Konkurrierende Verarbeitung UPDATE und SELECT(Fall 2) .............................. 299 7 QUERIES UND PARALLELVERARBEITUNG ............................................................ 301 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 8 Queries und Partitionierung ................................................................................ 301 Queries und Verarbeitung von PTS ........................................................................ 301 Der notwendige Parallelitätsgrad von Queries ....................................................... 305 Einrichten von PTS für Parallelverarbeitung .......................................................... 306 SQL Formulierungen für parallele Verarbeitung .................................................... 306 Wann ist keine Parallelverarbeitung möglich? ....................................................... 309 DB2 SPEICHERPLATZZUWEISUNG UND SPEICHERVERWALTUNG ................... 310 8.1 Das IBM Storage Management Subsystem ........................................................ 310 8.2 8.2.1 8.2.2 8.2.3 8.2.4 Speicherplatzgruppen („Storage Groups“) ........................................................ 310 Typen von Storage Groups ..................................................................................... 311 Speicherplatzgruppen und die Verteilung der Datasets .......................................... 313 Beispiele für Storage Groups .................................................................................. 314 Tipps zu STORAGE GROUPS .............................................................................. 314 8.3 8.3.1 8.3.2 8.3.3 8.3.4 8.3.5 8.3.6 8.3.7 Der Buffer Manager ............................................................................................. 316 Grobe Berechnung der Berechnung DB2-Datenbank-Buffer ................................. 316 Der Bufferpool für und seine Funktionalität ........................................................... 316 Bereitstellen der Bufferpools .................................................................................. 322 Funktionsweise des Buffermanagers ...................................................................... 323 Eine Methode zur “Bufferpool“ Dimensionierung ................................................. 325 Wichtige “Buffer Pool Performance Metrics” ........................................................ 328 Zusammenfassung BP ............................................................................................ 330 © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 5 von 77 DB2 –Physisches Design Inhaltsverzeichnis 8.4 8.4.1 8.4.2 8.4.3 DB2 Logging.......................................................................................................... 331 LOGBUFSZ - Logbuffer size ................................................................................. 333 LOGFILSIZ Parameter ........................................................................................... 334 MINCOMMIT – DB Konfigurationsparameter ...................................................... 334 8.5 8.5.1 8.5.2 DB2 Work Files ..................................................................................................... 336 „work file spaces“ ................................................................................................... 336 Hinzufügen von “worfle” ....................................................................................... 336 8.6 8.6.1 8.6.2 Temporary Tables ................................................................................................ 337 CTT’s und DTT’s im Vergleich ............................................................................. 337 Declared Temporary Tables und Performance der AP ........................................... 339 8.7 8.7.1 8.7.2 8.7.3 8.7.5 DB2 Katalog und Directory ................................................................................. 339 Performance - Indikatoren im Katalog ................................................................... 340 Überwachung der Speicherorganisation ................................................................. 342 Der Umgang mit PLAN und PACKAGES ............................................................. 345 DB2 und Extents ..................................................................................................... 346 9 DB2 - PERFORMANCE VON SUBSYSTEMEN .......................................................... 349 9.1 Asynchroner Preformat ....................................................................................... 349 9.2 9.2.1 9.2.2 9.2.3 Parallel "data set open" ....................................................................................... 350 Messumgebung ....................................................................................................... 350 “CPU bound” Testfall ............................................................................................. 351 “I/O bound” Testfall ............................................................................................... 351 9.3 9.3.1 9.3.2 “Virtual storage” Entlastung ............................................................................... 352 „Instrumentation Facility“ Verbesserungen ............................................................ 352 „Database address space” —Nutzung des “virtual storage” ................................... 352 9.4 9.4.1 9.4.2 „Evaluate uncommitted“...................................................................................... 353 Beschreibung von EVALUNC ............................................................................... 353 Empfehlung ............................................................................................................ 354 9.5 Reduziertes Logging für “variable-length rows” ............................................... 354 9.6 DDL – Verbesserung der Parallelverarbeitung ................................................. 354 9.7 Die IRLM-Umgebung und die LOCK-Anforderungen ..................................... 354 9.8 Traces..................................................................................................................... 355 9.9 9.9.1 9.9.2 9.9.3 9.9.4 9.9.5 9.9.6 9.9.7 Monitoring DB2 locking ....................................................................................... 356 Das Kommando DISPLAY DATABASE .............................................................. 356 Nutzung des "coupling facility structure activity report" aus RMF ........................ 357 Errechnen der Prozent von "contentions" ............................................................... 357 Anwenden des "DB2 statistics trace" ..................................................................... 357 Berechnen der prozentualen "global contentions" .................................................. 359 Nutzen des "DB2 accounting trace" ....................................................................... 359 Nutzen des "DB2 performance trace" ..................................................................... 360 10 Z/OS - FAKTOREN ...................................................................................................... 361 10.1 DSNZPARMS ....................................................................................................... 361 © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 6 von 77 DB2 –Physisches Design Inhaltsverzeichnis 10.2 Ausgabe der “current settings” ........................................................................... 362 10.3 Parameter die für „online“ Änderungen verfügbar sind .................................. 362 10.4 Beispiele von DSNZPARMS ................................................................................ 363 11 ANHANG ...................................................................................................................... 365 11.1 Checkliste zum physischen DB-Design DB2 ....................................................... 365 11.2 Limits bei DB2 (V11) ............................................................................................ 371 11.3 Abbildungsverzeichnis ......................................................................................... 374 11.4 Glossar ................................................................................................................... 381 11.5 Literaturhinweise.................................................................................................. 418 © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 7 von 77 DB2 –Physisches Design 1 Vorwort 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 GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 8 von 77 DB2 –Physisches Design Vorwort 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. Vergessen Sie dabei nicht, dass man sich gerade beim Thema „Physisches Design und physische DB2-Parameter“ natürlich nahe an der Hardware – sprich DASDs, SANs etc. – bewegt. Entsprechend unterschiedlich sind auch die Zugriffs- und I/OStrukturen für das jeweilige DB2 zu planen und einzustellen. Trotz gemeinsamen Namens ist DB2 LUW (Unix, Linux, Windows) sehr unterschiedlich zu Db2 for z/OS – man könnte sagen: Es gibt kaum Gemeinsamkeiten – nicht einmal in der Terminologie, auch wenn die Begriffe gleich klingen. Viel Spaß beim Lesen und viel Erfolg bei der Nutzung von IBM’s DB2 for z/OS und auch von DB2 LUW. 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 AG, Fürth VWFS AG, Braunschweig IT-Verlag, Sauerlach b. München © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 9 von 77 DB2 –Physisches Design 2 2.1 Grundsätzliches zu DB2 und Performance 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 GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 10 von 77 DB2 –Physisches Design 2.2 Grundsätzliches zu DB2 und Performance Logische Datenmodellierung Die Leistungsfähigkeit heutiger Informations- und Kommunikationstechnologien schafft eine Vielzahl von effizienten Möglichkeiten für die Informationsversorgung eines Unternehmens. Unabdingbare Voraussetzung für die zielgerichtete Nutzung dieser Technologien ist aber die methodische und organisatorische Behandlung der Resource "Information" selbst. Die Informationsanalyse dient der strukturierten Beschreibung aller für das Unternehmen (oder den Unternehmensteil) relevanten Informationen. Sie schafft somit die organisatorische und analytische Basis für eine zukunftsorientierte Informationswirtschaft. Zur Ermittlung des logischen Informationsmodells wird die Begriffswelt eines Untersuchungsbereichs bestimmt, definiert und in einem "Top-Down"Prozess schrittweise verfeinert. Das Ergebnis stellt eine detaillierte Beschreibung aller für die Anwendung relevanten Begriffe dar, untergliedert nach Informationsobjekten (entity types), deren Eigenschaften (attribute types), sowie der Beziehungen (relationship types) der Informationsobjekte untereinander. Ziele der methodischen Behandlung der Ressource "Information" sind: Erfassen und ordnen sämtlicher relevanter Begriffe für den betreffenden Untersuchungsbereich im Unternehmen Fortschreibung der Ergebnisse bei betrieblichen Änderungen oder Erweiterungen des Untersuchungsbereichs Förderung der Kommunikation mit der Fachabteilung zur qualitativen Abstimmung der Untersuchungsergebnisse Unabhängigkeit von der technischen Realisierung der Informationshaltung oder –verarbeitung Grundlage für weitergehende Datenanalyse und Datenadministration Dabei gelten die Nebenbedingungen: (1) Die "business processes" des Untersuchungsbereichs liefern wichtige Informationen zur Konsistenz und Richtigkeit des Informationsmodells (2) Die Ergebnisse der Informationsmodellierung können mit Tools einfacher und sicherer verwaltet und dokumentiert werden als per Hand (3) Eine geeignete Methode führt zum Erfolg, wenn sie richtig eingesetzt wird (egal ob ERM, UML, ISA, usw. ) und (4) "...A fool with a tool is still a fool ..." © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 11 von 77 DB2 –Physisches Design 2.3 Grundsätzliches zu DB2 und Performance Ziel der Datenmodellierung Ziel der Datenmodellierung ist es, qualitativ hochwertige Datenstrukturen zu erzeugen. Die Qualität von Datenstrukturen lässt sich an folgenden Kriterien festmachen: 2.3.1 Ein Maximum an Integrität und ein Minimum an Redundanz Wartbarkeit, Stabilität und Flexibilität Wiederverwendbarkeit und Mehrfachverwendbarkeit („sharability“ Konsistenz Nutzbarkeit und zeitgerechte Zugriffsmöglichkeiten Integrität Die Integrität der Daten steht an erster Stelle. Niemandem nutzt eine superschnelle Applikation, die einfach zu warten ist und deren Ergebnisse sich vielfach weiterverwenden lassen, wenn man sich auf eben diese Ergebnisse nicht verlassen kann. Drei Punkte sind wichtig für die Integrität eines Datenmodells: 2.3.2 Bedeutung der Information für das Unternehmen evaluieren (Was ist ...?) Redundanzen vermeiden - eine Information an einer Stelle („one fact in one place“) Datenkonsistenz durch Integritätsmechanismen , z.B. RI, „constraints“ usw. sichern Redundanzen Redundanzen sind im logischen Modell vollkommen überflüssig. Die Maxime „one fact in one place“ beschreibt die Tatsache, dass eine Information einmal im System vorhanden – von allen Seiten konsistent genutzt werden können sollte. Redundanzen – vor allem ungewollte – führen immer zu Verarbeitungsanomalien; d.h. eine Änderung der Information an einer Stelle muss aus Integritäts- und Konsistenzgründen an n anderen Stellen auch noch durchgeführt werden, bevor die Dateninhalte wieder alle gleich sind. Es ist dabei genau zu unterscheiden zwischen Redundanz, Replikation, Denormalisierungsstrukturen usw. 2.3.3 Wartbarkeit und Flexibilität Die Wartung einer Datenbank teilt sich in technische und strukturelle Aspekte. Zu den technischen Aspekten gehört zum Beispiel das Re-Indizieren und Sichern, Laden von Tabellen. Hier mag der Hinweis reichen, dass zur technischen Wartung einer Datenbank i.d.R. gute Werkzeuge von Drittanbietern zur Verfügung stehen. Die strukturellen Aspekte der Wartbarkeit spielen bei der Datenmodellierung jedoch eine große Rolle. Wartbarkeit und Integrität sind (anders als die Performance) Ziele, die sich nicht widersprechen. © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 12 von 77 DB2 –Physisches Design Grundsätzliches zu DB2 und Performance So macht eine sauber normalisierte Datenstruktur sicher weniger Probleme bei notwendig werdenden Erweiterungen oder Änderungen als eine nicht normalisierte Struktur. Gleichzeitig sind normalisierte Strukturen der beste Garant für integre und redundanzfreie Daten. 2.3.4 Wiederverwendbarkeit und Mehrfachverwendbarkeit Auch das Qualitätskriterium Wiederverwendbarkeit hat zwei unterschiedliche Aspekte. Zum einen kann bei der Datenmodellierung darauf geachtet werden, dass die entstehenden Strukturen wiederverwendbar sind. Dies führt dann zu der Aufteilung einer Gesamtaufgabe in einzelne Module, die jeweils eine eigene, fest umrissenen Aufgabenstellung haben und nur über ihre definierten Schnittstellen miteinander kommunizieren. Der erfahrene Datenbank-Entwickler wird hier gleich eine mögliche Performancefalle wittern. Zu Recht - auch die strukturelle Wiederverwendbarkeit ist ein Ziel, dass häufig im Widerspruch zum Qualitätskriterium „Performance“ steht. Die zweite Art der Wiederverwendbarkeit betrifft die Daten selbst. Ein mögliches Modellierungsziel kann sein, den gleichen Datenbestand aus mehreren Applikationen heraus nutzen zu können. Dann werden vielleicht nicht alle Felder einer Tabelle von jeder Applikation genutzt. Aus der Sicht einer einzelnen Applikation heraus sind diese Felder schlicht überflüssig. Der negative Einfluss auf die Performance ist dabei aber gering. 2.4 Eigenschaften des logischen Datenmodells Eigenschaften des logischen Datenmodells sind am ehesten durch folgende Attribute zu beschreiben: → umfassend → vollständig (realitätsgemäß) → widerspruchsfrei → anwendungsneutral → systemneutral → stabil → flexibel Alle diese Eigenschaften auf ein Datenmodell zu projezieren verlangt viel Arbeit, ein strukturelles Vorgehen und Erfahrung. Ein logisches Datenmodell dient letztendlich auch, Klarheit in einen betrieblichen Untersuchungsbereich zu bringen. © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 13 von 77 DB2 –Physisches Design 2.5 Grundsätzliches zu DB2 und Performance Einsatzmöglichkeiten des logischen DM im Sofware-Life-Cycle(SLC) Der methodische Baustein der Informationsanalyse (IA mit der LDM) lässt sich in verschiedenen Phasen des SLC sinnvoll einsetzen. Bild-02: Einsatz des LDM im Software-Life-Cycle © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 14 von 77 DB2 –Physisches Design 2.6 Grundsätzliches zu DB2 und Performance Logische Datenmodellierung - Beispiel Das logische Datenmodell enthält lediglich die fachlich/logischen Elemente der betrachteten Realität: Untersuchungsbereich. Das Modell wird mit all seinen Eigenschaften und Attributen beschrieben. Bild-03: Logisches DM(LDM) - Beispiel © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 15 von 77 DB2 –Physisches Design 2.7 Grundsätzliches zu DB2 und Performance Physisches 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(objektrelational) einteilen lassen, sich aber in ihren Leistungsmerkmalen deutlich voneinander u nterscheiden. Der physische Designschritt erfolgt erst NACH allen anderen fachlich orientierten Analyse- und Modellierungsschritten. abgestimmtes InformationsModell FunktionsAnalyse Phys. DB-Design Ab st im m un g InformationsAnalyse Kanonische Synthese FunktionsModell Elem.Funktion InformationsModell Datensichten und "dataflow"Modell Bild-04: Der Vorgang der Modellierung für IT-Systeme - Übersicht 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. © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 16 von 77 DB2 –Physisches Design 2.7.1 Grundsätzliches zu DB2 und Performance Allgemeine Vorgehensweise Basis des physischen DB-Designs bilden die methodischen Säulen: Konzeptionelles Informationsmodell, Prozess- oder Funktionsmodell und ein „eventgetriebenes“ Konditionsmodell: Dabei liefern diese beiden Ergebnistypen generell folgende Anhaltspunkte für das Physische Datenbank-Design: Konzeptionelles Informationsmodell Funktionsmodell Grafik Grafik Dokumente Beschreibung (Mengen) (Häufigkeiten) („business rules" / Domänen) (Zugriffsarten / Verarbeitungswege)... Bild-05: Allgemeine Vorgehensweise beim Informationsdesign Nach der Abstimmung der Informationsbedarfe aus dem FM und dem Ergebnis der Datenmodellierung entsteht ein QS-gesichertes logisches DM, das folgende Eigenschaften aufweisen sollte: Vollständigkeit Widerspruchsfreiheit Das heißt: 1) Alle Informationsobjekte, die in den Funktionsabläufen benutzt werden, müssen vollständig definiert sein 2) Alle Attribute der Prozessmitteilungen müssen Attributen der definierten Informationsobjekte entsprechen. 3) Alle Informationsobjekte der Untersuchungsbereichs müssen von den zugehörigen Prozessen gelesen und/oder modifiziert werden Jetzt ist das logische Modell bereit zur Überführung in ein physisches, datenbankorientiertes Modell – beim RIS in die Db2-Physik. Dabei werden aber immer noch Aktionen erforderlich, die nichts direkt mit dem DBMS zu tun haben. © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 17 von 77 DB2 –Physisches Design 2.7.2 Grundsätzliches zu DB2 und Performance Vorgehensweise gemäß Ziel-DBMS Jedes Ziel-DBMS, ob relational oder von anderer Architektur, verlangt nach individueller Anpassung der konzeptionellen Strukturen unter Performance- und Nutzungsgesichtspunkte. Bild-06: Überführen des logischen DM in ein physisches DM (PDM) Hier werden die Datenobjekte sowohl an die Gegebenheiten von zentralem DBMS im Client-Server-Umfeld aber auch an dezentrale Anforderungen - angepasst. © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 18 von 77 DB2 –Physisches Design 3 3.1 Empfehlungen zum physischen Design bei DB2 DBs 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 der logischen Satztypen/“entities“ Zusammenlegen von Satztypen/“entities“ Trennen von Satztypen/“entities“ Normalisierung Denormalisierung Festlegen der Datentypen der Attribute 2. Ergänzen des DB-Modells Schaffung zusätzlicher Tabellen Ergänzen der Tabellen um zusätzliche Felder(Summen, Status,...) Definition der PK Definition der „clustering“ IX Definition der Beziehungen (PK – FK Beziehungen) Ergänzen der Datenbankobjekte um Triggers, „stored procedures“, UDFs 3. Überführen der Beziehungen Behandlung von 1 : 1 "relationship" Behandlung von 1 : n Beziehungen 4. Einrichten der Zugriffspfade Behandlung der Einstiegspunkte(Suchkriterien) Auswahl der physischen Zugriffspfade 5. Festlegen der DBMS-spezifischen Parameter Blockgröße / Satzgröße Speicherplatzgrößen physische Speicherungsfolgen organisatorisch/technische Einflüsse Steuerparameter für das DBMS usw. © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 19 von 77 DB2 –Physisches Design 3.1.1 Empfehlungen zum physischen Design bei DB2 DBs Ü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. EntityType = 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: Bild-07: Übernahme von Satztypen beim Informationsdesign 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 © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 20 von 77 DB2 –Physisches Design Empfehlungen zum physischen Design bei DB2 DBs Bei einer 1:n - Beziehung ist eine Zusammenlegung von Satztypen dann sinnvoll, wenn der n-Satztyp ISOLIERT im Informationsmodell steht. 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. Bild-08: 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 GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 21 von 77 DB2 –Physisches Design 3.1.3 Empfehlungen zum physischen Design bei DB2 DBs 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 GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 22 von 77 DB2 –Physisches Design 3.1.4 Empfehlungen zum physischen Design bei DB2 DBs 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 ( 8 Mio / 2 Mio ) Bild-09: 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 GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 23 von 77 DB2 –Physisches Design Empfehlungen zum physischen Design bei DB2 DBs 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 GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 24 von 77 DB2 –Physisches Design 3.1.5 Empfehlungen zum physischen Design bei DB2 DBs Schaffung zusätzlicher Tabellen In vielen Fällen kann die Schaffung zusätzlicher Spalten/Tabellen aus Performance-Gründen nützlich sein. Dies gilt für Ergebnis- und Summendaten Unterstützung von Aggregatsfunktionen im Rahmen von Auswertungen Historischen/Historisierten Daten Eingestreut separat Bild-10: Aufbau zusätzlicher Tabellen beim Informationsdesign Problematisch kann dies bei referentieller Integrität sein ! © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 25 von 77 DB2 –Physisches Design 3.1.6 Empfehlungen zum physischen Design bei DB2 DBs 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 Beispiel: optionale Lieferadressen, Rechnungsadressen usw. deren Existenz in der jeweiligen „Haupttabelle“ mit „Y“ oder „N“ angezeigt wird: SELECT FROM ……. WHERE <columns> account a LEFT OUTER JOIN ON a.accnt# = b.accnt# AND a.optionalBill = ‘Y’ LEFT OUTER JOIN ON a.accnt# = c.accnt# AND a.optionalAdress = ‘Y’ a.accnt# = billing b address c 1 Bild-11: Zusätzliche Kennungen bei optional vorhandenen „entities“/“rows“ 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 GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 26 von 77 DB2 –Physisches Design 3.2 Empfehlungen zum physischen Design bei DB2 DBs Grundsätzliche Regel bei DB2 Speicherplatzersparnis ist nicht so wichtig wie weniger Tabellen. Zum Thema Komprimierung vorab folgende Informationen: Der Einsatz von Komprimierungsfunktionen macht viele Speicherplatzüberlegungen annähernd überflüssig. Die Komprimierung heute bringt bei der Verarbeitung von riesigen Datenmengen (und bei SAP) insofern Vorteile, als mehr Daten in eine Datenpage passen und somit mit einem physischen I/O mehr Daten gelesen werden, wodurch bei gleicher Verarbeitung auch noch I/O’s gespart werden können. So gesehen lautet die Empfehlung bei einer physischen Struktur, die EINE Tabelle in EINEM Tablespace vorsieht eindeutig COMPRESS YES für den TS zu setzen. Die heute möglichen Kompressionsraten und die damit verbundenen Platzersparnisse erfordern nur marginal höhere Aufwände bei CPU- und Laufzeiten bei den Prozessen: 3.3 Eine mögliche Kompressionsrate bei kommerziellen Daten liegt bei 40 - 70 % Die Erhöhung der CPU-Zeit wird mit ca. 15 %* kalkuliert Die Verringerung der Laufzeit serieller Prozesse liegt bei ca. 10 %* (stark schwankend in Einzelfällen!!) (*) heute fallen die genannten Zeitverluste noch geringer aus, da die meisten „compression routines“ hardware-unterstützt ablaufen und vollständig in der Betriebssystemumgebung integriert sind. Überführen der Beziehungen Beziehungen werden über Schlüsselredundanzen realisiert: „primary key" „foreign key". Dabei ist es unbedingt wichtig zu wissen, ob nur eine oder BEIDE Richtungen der Beziehungen benötigt werden. © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 27 von 77 DB2 –Physisches Design Empfehlungen zum physischen Design bei DB2 DBs Bild-12: 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“ „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 sollte mindestens definiert sein: 1 Primary Key (PK) 1 „clustering key (CK)“ © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 28 von 77 DB2 –Physisches Design Empfehlungen zum physischen Design bei DB2 DBs Bild-13: Beispiel-2 - Übernehmen der Beziehungen beim Informationsdesign 3.4 Einrichten der Zugriffspfade am Beispiel DB2 DB2 kennt Methoden für „Index based" Zugriffe und „tablespace scan" Ziel eines effizienten physischen DB-Designs 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öglichst SELEKTIVE , aber WENIGE Indizes auf den Tabellen liegen(siehe auch Kapitel: "Indizierung" Pkt. Fehler! Verweisquelle konnte nicht gefunden werden. ff.). © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 29 von 77 DB2 –Physisches Design 3.5 Empfehlungen zum physischen Design bei DB2 DBs 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) COMPRESS YES/NO 2. Berechnen der IX-Parameter und der Index-Größe 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 Testdatenbanken sind selten gleich der PROD-Datenbank !! © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 30 von 77 DB2 –Physisches Design 3.6 Empfehlungen zum physischen Design bei DB2 DBs Festlegen der DB2 Datentypen Die Festlegung des Datentyps führt zu 2 wichtigen Bestimmungen bei DB2-Tables: 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 CHAR VARIYNG(n) 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 n LONG VARCHAR "string" variabler Länge FOR BIT DATA repräsentiert nicht ausschließlich CHAR und wird nicht auf druckbare Zeichen konvertiert siehe CHAR (FOR BIT DATA) – Spalte enthält BIT Daten (nicht für CLOBs) FOR SBCS DATA "single-byte-characters": Inhalte werden nach CCSID konvertiert CCSID: "coded chracter set identifier" siehe CHAR – Spalte enthält “single Byte data” FOR MIXED DATA repräsentiert SBCS oder DBCS-Zeichen: "double-bytecharacter" siehe CHAR – Spalte enthält „MIXED data“ DEC(n,m) / DECIMAL(n,m) NUMERIC(n,m) numerisch gepackt Achtung: Leerstelle nach Komma n = 1 bis 10**32 - 1 m(optional) = 0 bis „precision of scale“ <= 8 DECFLOAT(integer) IEEE 754r (FLOAT-) Zahl mit Dezimalpunkt 10-383 bis 10+384 oder 10-6143 bis 10+6144 max. Präz. 34 Zahlen. 32.767 Byte <= 32KB (integer kann entweder 16 oder 32 sein) 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 BIGINT Binäres Doppelwort von 63 Bits. -9223372036854775808 , +9223372036854775807. 8 REAL / FLOAT (n) Gleitkommakonstante mit einf. Genauigkeit FP in 32 bits -7.2×1075 bis 7.2×1075 (n = 1 bis 21) 4 FLOAT / FLOAT (n) DOUBLE PRECI SION Gleitkommakonstante mit doppelter Genauigkeit FP in 64 bits -7.2×1079 bis 7.2×1079 (n = 22 bis 53) 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 © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 31 von 77 DB2 –Physisches Design Empfehlungen zum physischen Design bei DB2 DBs Datentyp TIMESTAMP (**) Bedeutung max. Wert Länge Datum + Zeit + Systemzeit 2010-02-10-08.15.00.000000 10 TIMESTAMP WITHOUT TIME ZONE '2010-02-10-08.15.00-00000000 7-13 '2010-02-10-08.15.00-5:00 9-15 (2B TZ) TIMESTAMP WITH TIME ZONE Der Wert für integer ist 1 bis 12. Default = 6 Kann nicht modifiziert werden… 17(intern) 1 to 2 147 483 647 “default length” ist 1M (möglich 1K bis 2097152K max. Länge = 1024 * <integer> oder 1M bis 2048M max. Länge = 1 048 576 <integer> oder 1G bis 2G max.Länge = 1073741824 * <integer>) 2 GB - 1 variabel Large binary Objekt(for BIT DATA) <integer> = 1 bis 2 147 483 647 wenn nicht angegeben ist der “default” 1M 2 GB - 1 DBCLOB(integer [K|M|G]) variabel double-Byte CHAR “large” Objekt (DBCS) Integer = 1 bis 1073741823. Eine DBCLOB hat eine “varyinglength”. 1 GB – 1 BINARY “fixed length” Binär-String Integer = 1 bis 255 1 bis 255 VARBINARY “variable length” Binär-String Integer = 1 bis 32704 1 bis 32704 GRAPHIC(integer) “fixed-length graphic string” der Länge <integer> <integer> = 1 bis 127 VARGRAPHIC(integer) „variable-length graphic string” der Länge <integer> 1 bis n/2, wobei n die maximale “row-size” minus 2 Bytes ist XML Ein XML Wert mit der Repräsentation eines “well-formed” XML als XML Dokument, XML Inhalt, der eine Folge von „XML nodes“. DISTINCT Type (*) Ist ein "user defined datatype" ROWID eindeutiger Identfier einer TabZeile(ausschliesslich BIT) CLOB(integer) variabel Large CHAR Objekt (SBCS oder „mixed“) BLOB (integer [K|M|G]) CREATE TYPE MONEY AS DECIMAL(9,2); CREATE FUNCTION "+"(MONEY,MONEY) RETURNS MONEY SOURCE SYSIBM."+"(DECIMAL(9,2),D ECIMAL(9,2)); CREATE TABLE SALARY_TABLE (SALARY MONEY, COMMISSION MONEY); SELECT SALARY + COMMISSION FROM SALARY_TABLE; Bild-14: Länge und Typen von Datenfeldern (*) Ein distinct type ist ein "user-defined data type", der seine interne Repräsentation mit einem "built-in data type" (seinem source type) teilt. Dennoch stellt er einen, eigenständigen und inkompatiblen Datentyp für andere Operationen dar. Zum Beispiel nutzen die Semantiken für Bild, Audio und Text intern alle denselben "built© S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 32 von 77 DB2 –Physisches Design Empfehlungen zum physischen Design bei DB2 DBs in data type" BLOB, sind aber trotzdem unterschiedlich. Ein "distinct type" wird mit dem Statement CREATE DISTINCT TYPE erzeugt: CREATE DISTINCT TYPE AUDIO AS BLOB (1M); Obwohl AUDIO dieselbe Repräsentation wie der "built-in data type" BLOB besitzt, ist er ein eigenständiger Datentyp und nicht vergleichbar mit BLOB oder einem beliebigen anderen Datentyp. Dies wiederum ermöglicht es Funktionen speziell für diesen neuen Datentyp AUDIO bereitzustellen. Alle diese Funktionen sind nicht auf andere Datentypen anwendbar. Auch DISTINCT Datentypen können mit „defaults“(**) versehen werden. (**) Da die „defaults“ bei bestimmten Datentypen eher ungünstig ausgelegt sind, z.B. bei den Datumsdatentypen immer CURRENT..., ist es empfehlenswert, DEFAULTs beim CREATE TABLE entweder nicht zuzulassen, oder über die DEFAULT Klausel selbst festzulegen. Beispiel: CREATE TABLE mitarbeiter ( p# INTEGER e_dat DATE ) IN <database>.<tablespace> ; NOT NULL UNIQUE, DEFAULT '01.01.0001' In diesem Fall kann man den „Default“-Wert durch seine speziellen Inhalte erkennen und in Programmen oder DML-Statements behandeln. 3.7 VARCHAR Alternativen zugunsten der Performance Das Problem bei VARCHAR Datentypen besteht zunächst einmal darin, dass immer mindestens ein Längenfeld gelesen werden muss, um die exakte Länge der Spalte zu erfahren und so den Beginn einer nächsten „column“ zu evaluieren. Das kostet 2 Byte pro VARCHAR-Feld und zusätzliche CPU-Zeit. Nun wird in vielen Applikationen, die von einer Server- auf die z/OS Plattform portiert werden, fast ausschließlich mit VARCHAR-Formaten gearbeitet, selbst bei Feldlängen von 1. Dazu gibt es einiges zu bedenken: VARCHAR’s sollten nur bei stark variierenden Wertevorkommen und „column“-Längen in einer Spalte gesetzt werden ( ab 80-100 Bytes Feldlänge ). VARCHARs werden bei SORT-Vorgängen IMMER auf ihre maximale Länge expandiert ( Anzahl „work files“, „merge“ Durchgänge, längere SORTZeiten…) VARCHARs sparen Platz für die Tabellen aber nicht für Indexe – sie expandieren immer zur vollen Länge (außer ab DB2 V8 ist der optionale PADDED Parameter gesetzt) VARCHARs sind nicht die besten Platzsparer – COMPRESS ist weitaus wirksamer VARCHAR-Alternativen zugunsten der Performance lauten: variable Daten in eine eigene Tabelle stellen und über primary/foreign key Indexe verknüpfen Nutzen von „multiple rows“ mit fixer Länge und einer „sequence“ Nummer in einer „child“-Tabelle anstatt VARCHARs, um Textdaten beliebiger Länge © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 33 von 77 DB2 –Physisches Design Empfehlungen zum physischen Design bei DB2 DBs darzustellen Einsatz von LOBs (falls die Referenz auf die LOB-Werte nicht zu hochfrequent ist) – Man muss allerdings den entstehenden Aufwand testen und der sollte bei sogenannten“inline LOBs“ günstiger sein als bei „external“ LOBs. Nutzen von fixen Spalten anstatt VARCHARs und Auslagern der „overflow“Daten in eine eigene Tabelle – Das funktioniert immer dann, wenn Daten annähernd dieselbe Länge besitzen Achtung: Bei UPDATEs auf leere VARCHAR-Felder kann es zu Verlagerungen der „rows“ kommen, die letztendlich wegen der synchron durchzuführenden I/Os Daten-Scans verursachen, was die Performance sehr negativ beeinflussen kann. Häufig modifizierte VARCHAR-Felder haben außerdem die Eigenschaft, häufiger nach REORG-Aktivitäten zu verlangen, was wiederum, trotz „online“ REORG Fähigkeiten, die allgemeine Verfügbarkeit negativ beeinflussen kann. Bei Indexen gibt es seit DB2 V8 die Option NOT PADDED. Damit werden VARCHAR-Felder im Index nicht mehr auf ihre volle Länge expandiert. Man kann damit den Index für INDEX ONLY Zugriffe einsetzen. Will man die Option für „padding“ ändern – ALTER INDEX …. NOT PADDED - so wird der IX in den Status „rebuild pending“ (RBDP) versetzt, bis er neu erstellt (REBUILD) oder reorganisiert wird. Aber auch hier gilt: NOT PADDED IX sind komplex in ihrer Verarbeitung (Längenermittlung) NOT PADDED IX verbrauchen mehr CPU Spaltenvergleiche sind bei NOT PADDED erheblich teurer 3.8 Weitere Limits in DB2 seit Version 8 bis V11 Seit der DB2 V11 gelten weitere Limits, die hier berücksichtigt werden müssen. Ihre Listen und Eigenschaften sind im Anhang unter Pkt. 6.2 ff aufgeführt. Hier nur ein kurzer Auszug: Objekte Länge des Tabellennamens(*) beim CREATE Länge des „column“ Namens Maximale Gesamtlänge des HostIndikators auf den in der SQLDA gezeigt werden kann DB2 V11 128 30 32767 Bytes 2147483 Bytes(2GB – 1 Byte) bei einem LOB. Beeinflusst durch Limits des „applicationsenvironment“ und die Programmsprache maximale Grösse der AP SQLDA für ein Statement, das HV oder Parametermarkers referenzieren kann Maximale Anzahl von Partitions in einem PTS oder einem PI © S.K.Consulting Services GmbH Next DB2 99016 Bytes 64 bei TS, die nicht mit LARGE oder einer DSSIZE > 2 GB definiert ++49 (0)162 4468790 www.sk-consulting.de Seite 34 von 77 DB2 –Physisches Design Empfehlungen zum physischen Design bei DB2 DBs Objekte DB2 V11 sind. 4096, abhängig davon, was in DSSIZE oder LARGE und der Pagegrösse angegeben ist. Maximale der Summe der Längen aller Limit Key Werte für eine Partitiongrenze Maximale Grösse von „non“-LOB Tabellen oder TSs Maximale Grösse Logspace 6Byte Format 10Byte Format Maximale Anzahl von Spalten in einer Tabelle/View(der Wert hängt von der Komplexität des CFREATE VIEW ab) oder der Anzahl von Spalten, die von einer „table function“ zurückgegeben werden können Maximale Anzahl von Basistabellen in einem VIEW, SELECT, UPDATE, INSERT, MERGE, DELETE Maximale Anzahl von „rows“, die mit einem einzelnen INSERT oder MERGE eingefügt werden können Maximale Anzahl von VOLUME IDs in einer „storage group“ Next DB2 765 UTF-8 Bytes 128 TB 48 2 Byte 42 2 Byte 750 , oder weniger(inklusive der „hidden columns“) 749 , wenn die Tabelle eine abhängige Tabelle ist 225 32767 133 Bild-15: Neue Längen und Limits in DB2 V10/V11 © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 35 von 77 DB2 –Physisches Design 4 DB2 Objekte - Strukturierungsempfehlungen Empfehlungen zum physischen Design von DB2 Datenbanken Die Empfehlungen zum physischen Design von DB2-Datenbanken gliedern sich in einen Allgemeinen Teil und einen Anwendungsorientierten Teil 4.1 Allgemeines zum Design von DB2-Datenbanken (1) "Keep Like Things Together" Fassen Sie alle Tabellen, die zur selben Applikation gehören möglichst in einer Datenbank zusammen und geben Sie jedem Anwendungsprozess, der eigene Tabellen benötigt eine eigene "private" Datenbank. In einem idealen Umfeld nutzt jeder Anwendungsprozess so wenige Datenbanken wie nur irgendwie möglich. Gleich große Tabellen können bei DB2 in einem „segmented“ TS angelegt werden, vorausgesetzt, sie sind annähernd gleich groß und können gemeinsam „recovered“ werden. Trotzdem gilt immer noch: Jede Tabelle (ob groß oder klein) behält ihr grundsätzliches Anrecht auf einen eigenen Tablespace. (2) "Keep Unlike Things Apart" Geben Sie den Benutzern unterschiedliche Autorisierungen für ihre Arbeit in unterschiedlichen Datenbanken; z.B. eine AUTHID für die Arbeit in einer gemeinsamen und eine AUTHID für die Arbeit mit der "privaten" Datenbank. (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. (4) "Consider Type 2 Indexes" Bei Typ 2 Indizes werden nur die Daten gesperrt, nicht aber die Index-Pages. Dies verursacht weniger Engpässe, da in den IX-Pages in der Regel mehr Daten gespeichert sind, als in einer Datenpage. Auch IX-Page-Splits werden vom Typ 2 Index effizienter gehandhabt als von einem Typ 1 Index. – Übrigens: Der Default Index-Typ ist Typ 2. 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 (!) © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 36 von 77 DB2 –Physisches Design (5) DB2 Objekte - Strukturierungsempfehlungen "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 Sperr-Level und/oder LOCKMAX aus den Systemparametern. Bevor man LOCKSIZE auf ROW, PAGE, 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. (6) "Examine Small Tables" Für kleine Tabellen mit hoher Parallelverarbeitungsqualität überprüfe man die Anzahl Pages auf dem Tablespace und im Index. Ist der Indexeintrag kurz oder gibt es viele doppelte Werte, 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". (7) "Partition your 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 seltener. Die beiden Verarbeitungsarten sind nicht besonders gut für parallele Verarbeitungsprozesse geeignet. Es ist also häufig wichtig, Online und Batch voneinander zu trennen, falls dies möglich ist. Unterstützend dazu sollte auf der Datenbankseite über eine entsprechende Partitionierung der Daten nachgedacht werden. (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 das in "data sharing environments" oft gewünscht wird, da dort ein "row locking" übergroßen "overhead" erzeugen würde. MAXROWS wirkt nicht auf Indizes. (9) "Access Data in Consistent Order" Greifen unterschiedliche Applikationen auf dieselben Daten zu, sollte man versuchen die Programme 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. © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 37 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen (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 (ab-)setzen. (11) ”Retry Application After Deadlock/Timeout" Man sollte bei „deadlock“/“timeout“-Fehlern eine Logik in die Programme einbauen, die die aktuelle (gescheiterte) Funktion/Transaktion nach einem "deadlock" oder einem "timeout" erneut versucht. Dies macht Eingriffe seitens des Betriebspersonals bzw. des „Operatings“ überflüssig und erhöht den Komfort der Applikation für den User. 3-5 Versuche sind ein üblicher Wert. (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). Aber nicht nur dann, denn wenn ein Cursor n ach Fehler nicht geschlossen wird, bleiben SKCT-Teile unnötigerweise im EDM-Pool erhalten. (13) "Bind Plans/Packages With ACQUIRE(USE)" Hier sollen nur die gängigsten Kombinationen dieser BIND-Parameter diskutiert werden: ACQUIRE(USE) / RELEASE(DEALLOCATE): Diese Kombination führt in den meisten Fällen zur effizientesten Nutzung von Prozessorzeiten: Table, Partition oder Tablespace, die in einem Plan/Package verwendet werden, werden nur gesperrt, wenn dies notwendig ist. Alle Tables / Tablespaces werden freigegeben, wenn der Plan beendet wird. Der am höchsten restriktive Lock, der für die Ausführung des SQL Statements erforderlich ist, wird angewendet, mit der Ausnahme, dass, falls ein noch einschränkender Lock von einem vorangegangenen Statement existiert, dieser ohne Änderungen übernommen wird. Nachteil: Diese Kombination kann die Häufigkeit von "deadlocks" erhöhen. Da alle Locks nur für den aktuellen Ablauf in ihrer Sequenz vorhersehbar angefordert werden, können mehr und längere Verzögerungen bei konkurrierender Verarbeitung entstehen. ACQUIRE(USE) / RELEASE(COMMIT): Diese Kombination stellt zugleich die "default"-Kombination dieser Parameter dar und ermöglicht größtmögliche Parallelität in der Verarbeitung. ABER: Es wird mehr Verarbeitungszeit verbraucht, wenn die Applikation häufig COMMITs absetzt. Table oder Tablespace werden nur gesperrt, wenn dies notwendig ist. Dies ist wichtig, © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 38 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen wenn ein Prozess viele SQL-Statements enthält, die selten genutzt werden oder solche, die dazu tendieren unter Umständen "access data only" durchzuführen. Alle Tables und TS werden freigegeben wenn: ___ TSO, Batch, and CAF ____________________________________________ | | | Ein SQL COMMIT oder ROLLBACK Statement abgesetzt wurde oder die | | Applikation beendet hat | |___________________________________________________________________| ___ IMS ____________________________________________________________ | | | Ein CHKP oder SYNC Call (für "single-mode transactions"), ein GU | | Call auf den I/O PCB oder ein ROLL / ROLB Call gesetzt wurde | |____________________________________________________________________| ___ CICS ___________________________________________________________ | | | Ein SYNCPOINT Kommando gesetzt wurde | | | |____________________________________________________________________| Bild-16: Lock-Freigaben im DB2 Ausnahme: Wurde der Cursor mit der Klausel WITH HOLD definiert, so werden alle Locks auf Table/Tablespace gehalten, die notwendig sind, die Cursorposition zu sichern – auch nach dem COMMIT. Der am höchsten restriktive Lock, der für die Ausführung des SQL Statements erforderlich ist, wird angewendet, mit der Ausnahme, dass, falls ein noch einschränkender Lock von einem vorangegangenen Statement existiert, dieser ohne Änderungen übernommen wird. Nachteile: Diese Kombination kann die Häufigkeit von "deadlocks" erhöhen. Da alle Locks nur für den aktuellen Ablauf in ihrer Sequenz vorhersehbar angefordert werden, können mehr und längere Verzögerungen bei konkurrierender Verarbeitung entstehen. (14) "Bind With ISOLATION(CS) und CURRENTDATA(NO)" Die verschiedenen "isolation levels" bieten mehr oder weniger Möglichkeiten der Parallelverarbeitung zu Lasten von mehr oder weniger Schutz für die Anwendungsprozesse gegeneinander. Die Werte sollten gemäß den Anforderungen der jeweiligen Applikation gewählt werden. Die CURRENTDATA Option hat mehrere unterschiedliche Auswirkungen, abhängig davon, ob ein Zugriff „local“ oder "remote" erfolgt: Für "local access", bedeutet die Option, ob die Daten, auf die ein Cursor positioniert ist, identisch ( oder "current with" ) mit den Daten in der lokalen Basistabelle bleiben muss. Für Cursor, die auf Daten einer "work file" positioniert sind hat die CURRENTDATA Klausel keine Auswirkung. Sie wirkt nur auf "read-only" oder "ambiguous" Cursors in Plänen oder Packages, die mit dem "isolation level" CS gebunden sind. Anmerkung: Ein Cursor heißt "ambiguous" wenn DB2 nicht feststellen kann, ob er "for update" oder nur für "read-only" Verarbeitung genutzt werden soll. Bei einem Request an ein "remote system" hat CURRENTDATA Auswirkungen auf "ambiguous cursors" mit den "isolation levels" RR, RS oder CS. In diesem Fall wird "block fetching" ein- bzw. ausgeschaltet ("Read-only cursors" und UR Isolation bedeuten grundsätzlich "block fetch"). "Block fetch" bietet natürlich die beste Performance bei „remote“-Zugriffen, aber es bedeutet auch, dass der Cursor nicht mit der Aktualität der Basistabelle auf dem "remote" Knoten übereinstimmen muss. © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 39 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen (15) Vermeide Probleme mit sogen. "ambiguous cursors" "ambiguous cursors" können manchmal DB2 davon abhalten, sogenannte "lock avoidance“ Techniken anzuwenden. Deshalb gilt es immer als eine gute Programmiergepflogenheit, die Möglichkeit der Mehrfachverwendbarkeit eines Cursors für DB2 auszuschließen, indem man ihn entweder mit FOR FETCH ONLY oder aber mit FOR UPDATE definiert. Soweit die grundlegenden Empfehlungen zum Umgang mit DB2-Objekten und DB2Programmen. 4.2 Spezielle Empfehlungen zum physischen Design von DB2 Datenbanken Viel Entwickler- und DBA-Zeit kann in das physische Design der Datenbank und in Datenbank-Abfragen gesteckt werden, alles auf Annahmen basierend. Vieles dieser Zeit ist vergeudet, da diese Annahmen nicht genau genug sein können. Killerphrasen wie “Das geht nicht…”, “Ich glaube die DB wird den folgenden Zugriffspfad wählen…“, „Alles soll so schnell, wie nur irgend möglich sein…“ prägen diese Entwicklungsphasen. Wenn dann die Applikationen implementiert sind und, wer hätte das gedacht, auch noch schlechte Performance aufweisen, werden genau diese Leute überrascht sein: „Wir haben doch an alles gedacht, oder ????“ Ein anderer Ansatz wäre es, so wenig wie möglich Zeit während der Entwicklung in die Vorwegnahme möglicher Performance-Scenarios zu stecken und stattdessen, Zeit für Performance Tests und Tuning im Projekt zu reservieren. Dies befreit die Entwickler davon, ständig über Performance-Aspekte nachzudenken und gibt ihnen den Vorteil, mehr Logik in ihren Queries zu verankern. Dies heißt kürzere Entwicklungszeit und mehr Möglichkeiten des (DB-)Tunings, was, wenn alle Logik im Programm stecken würde, normalerweise sehr schwer ist. Es sollte ein Einfaches sein, Testtabellen zu erstellen und wichtige PerformanceSituationen mit einfachen Testprogrammen zu simulieren, um Fakten zu schaffen und nicht auf Vermutungen bauen zu müssen. Also: Testen Sie Ihre Ideen! • Sie haben VLDB(Very Large Database) Design Vorgaben - Versteckte Updates auf die Datenbank “High Speed Update” Anforderungen Ausgewogenheit von Batch/Online bei der Zugriffshäufigkeit Die Table ist physisch zu groß für eine einzelne DB2 Table „Online Access” auf dem “Primary Index” ist zu langsam Zusätzliche NPI sind erforderlich • DB2 sollte uns sagen, WAS zu tun ist - Aufbau von Test Tables Fertigen Sie Daten und Statements an Führen Sie eine Datenanalyse durch Lassen Sie die Queries laufen (und “tracen” sie sie) Messen Sie die Alternativen Erstellen Sie Dokumentationen und Reports über Ihre Tuningmassnahmen © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 40 von 77 DB2 –Physisches Design 5 DB2 Objekte - Strukturierungsempfehlungen 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) / View / Alias Benutzersichten (view) Synonyme (synonym) – in Kürze « deprecated » Indizes (index) Tabellenspeicher (tablespace / partition ) Speicherplatz-Gruppen (storage group / file / extent) Constraints / Triggers / „stored procedures“ / “user defined functions” User Plans Packages .... Schemas usw. Die Objekte, die für das physische Design von vorrangiger Bedeutung sind werden in den folgenden Abschnitten detailliert besprochen. 5.1 Die Hierarchie der physischen DB2-Objekte Um Wirkung und Arbeitsweise von DB2-Optionen und Objekten beurteilen zu können, ist es unbedingt notwendig, die Zusammenhänge von logischen und physischen DB2-Objekten zu kennen. Die metamodellhafte (interne) Schematisierung der DB2-relevanten Objekte sollte für Designer, DBA’s und auch Anwendungsprogrammierer zum Basiswissen über DB2 gehören. Der hierarchische Zusammenhang der DB-Objekte zur Speicherung von Daten lässt sich in der Übersicht wie folgt darstellen: © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 41 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen Database Non-partitioned TS Storage Group G1 Table t2 Table t1 Volume 1 Index Space Index Space Index X1 Index X2 Volume 3 Volume 2 Partitioned Táblespace Indexspace Table Part1 Partitioning IX Part1 Part2 Part2 Part3 Part3 Part4 Part4 Storage Group G2 Volume 3 Volume 1 Volume 2 Bild-17: Physische DB2-Objekte in ihrem hierarchischen Zusammenhang 5.2 Datenbanken (Databases) Die DB2-Datenbank dient als Objekt der Regelung von Zugriffen zum Starten und Stoppen von Info-Speichern (Datenverfügbarkeit) zur organisatorische Abgrenzung von Datenobjekten Auf Datenbankebene können DB-weit geltende Standards vereinbart werden, z.B. Nutzung von "Storage Group" Nutzung von "Bufferpool" usw. Sie gelten für alle "Tablespaces" der jeweiligen "database", solange bei der Definition der untergeordneten Objekte keine anderweitige Festlegung getroffen wurde. © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 42 von 77 DB2 –Physisches Design 5.2.1 DB2 Objekte - Strukturierungsempfehlungen Die wichtigsten Definitionsparameter DB2 Databases sind ein „set of DB2 structures”, das eine Sammlung von Tabellen, ihre zugeordneten IX und die Tablespaces auf denen sie liegen, enthält. Man definiert eine Datenbank in DB2 mit dem CREATE DATABASE Statement. Empfehlung: Man sollte eine möglichst kleine Anzahl von TS in einer DB verwalten und damit eine kleinen Menge von Tabellen. Exzessive TS-Zahlen und Mengen von Tabellen können Performance Einbussen zur Folge haben und sind zudem nicht einfach zu verwalten. Vermindert man Anzahl TS und Tabellen in einer DB, wird man bessere Performance erhalten, die Wartung minimieren, die Parallelitäten der Verarbeitung erhöhen und die Belastung der LOG-Platten heruntersetzen. database-name benennt die “database”. Der Name darf nicht mit DSNDB beginnen und darf keine Datenbank bezeichnen, die auf dem „current server“ bereits existiert. database-name sollte aus nicht mehr als 8 Zeichen bestehen, besonders, wenn sie in der z/OS JCL verwendet werden soll. Soll die Datenbank eine „work file database” in einem “data sharing environment” sein, so ist DSNDB07 ein akzeptabler Name für diese „work file database“. Aber es kann immer nur EIN „member” der “data sharing group” den Namen DSNDB07 als Namen seiner „work file database” verwenden. BUFFERPOOL bpname spezifiziert den “default buffer pool” Namen für die TS in der DB. Ist die DB eine „work file database”, so ist die Spezifikation von 8KB und 16KB Bufferpools nicht zulässig. Wird der Parameter BUFFERPOOL nicht angegeben, so wird der BP für User-Daten aus dem Installationspanel DSNTIP1 angenommen. Der „default” Wert ist dort BP0. INDEXBP bpname definiert den “default bufferpool” Namen für Indizes in der DB. Dieser BP kann 4KB, 8KB, 16KB, oder 32KB Bufferpools referenzieren. Wird der Parameter BUFFERPOOL nicht angegeben, so wird der BP für User-Indexe aus dem Installationspanel DSNTIP1 angenommen. Der „default” Wert ist dort BP0. AS WORKFILE gibt an, dass die Datenbank eine “work file database” sein soll. Die “work file database” wird für “work files”, “created global temporary tables”, “declared temporary tables” und “sensitive static scrollable cursors” genutzt. Die Authorisierung PUBLIC erhält implizit das CREATETAB Privilege (ohne die Authorisierung zum GRANT), um “declared temporary table” in der Work file database anlegen zu können. Dieses implizite Privilege wird im DB2 Katalog nicht aufgezeichnet und kann nicht widerrufen („revokes“) werden. Die CCSID Klausel ist in einer „work file database“ nicht unterstützt. FOR member-name spezifiziert das “member”, für das diese DB erzeugt wurde. FOR membername darf nur in einer “data sharing” Umgebung angegeben werden. Ist FOR member-name undefiniert, so ist das zugehörige “member” das DB2 Subsystem auf dem der CREATE DATABASE ausgeführt wird. © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 43 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen STOGROUP stogroup-name definiert die angegebene “storage group” als “default storage group” für Platzanforderungen von TS und Indexen innerhalb dieser DB. Der „default” ist SYSDEFLT. CCSID encoding-scheme definiert das “default encoding scheme” für die Daten in dieser DB. Die Angabe gilt für die TS in der DB. Alle Tabellen in einem TS müssen dasselbe “encoding scheme” nutzen. ASCII ASCII CCSIDs EBCDIC EBCDIC CCSIDs UNICODE UNICODE CCSIDs. Normalerweise benötigt jedes “encoding scheme” eine CCSID. Zusätzliche CCSIDs werden gebraucht, wenn “mixed“, „graphic“ oder UNICODE Daten verarbeitet werden. Diese Option stützt sich als “default” auf den Wert des Feldes DEF ENCODING SCHEME im Installationspanel DSNTIPF. Die CCSID Klausel ist nicht erlaubt, wenn die Klausel AS WORKFILE angegeben wurde. 5.2.2 Autorisierungen Die erforderlichen Privilegien für einen CREATE DATABASE müssen mindestens eine der folgenden Autorisierungen beinhalten: 5.2.3 CREATEDBA CREATEDBC SYSADM oder SYSCTRL System DBADM Beispiele zur Definition von Databases Beispiel 1: Die Datenbank D8D91P ist anzulegen. STG8G910 sei dabei die “default storage group” for die TS und IX in der “database”. Es soll ein 8KB Bufferpool BP8K1 als “default bufferpool” für die TS und BP2 als „default buffer pool“ für die Indexe zugewiesen werden CREATE STOGROUP BUFFERPOOL INDEXBP DATABASE D8D91P STG8G910 BP8K1 BP2; Bild-18: Beispiel eines CREATE DATABASE - 1 Beispiel 2: Die Datenbank D8TEMP sei anzulegen. Dabei sollen die “defaults” für die “default storage group“ und die „default Bufferpools“ gelten. ASCII sei das “default encoding scheme” für die Daten in der DB. CREATE CCSID DATABASE D8TEMP ASCII; Bild-19: Beispiel eines CREATE DATABASE - 2 © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 44 von 77 DB2 –Physisches Design 5.2.4 DB2 Objekte - Strukturierungsempfehlungen Gründe separate „Databases“ zu erzeugen 1. Nutzen Sie DB2-Datenbanken als Einheiten für die Verfügbarkeit von Tabellen und Indizes (START/STOP). 2. Separate DBs können auch fachlich/organisatorisch eine Abgrenzung der Daten darstellen. 3. Man kann die Status der einzelnen (DB-)eigenen Charakteristiken über einzelne Kommandos darstellen und mit ihnen nur die EINE DB abfragen. 4. Einige Operationen sperren eine ganze Database. Beispielsweise, einige Phasen des LOAD Utility verhindern einige SQL Statements (CREATE, ALTER und DROP) dieselbe DB konkurrierend zu nutzen. Deshalb ist die Platzierung von nicht abhängigen Tabellen in einer einzelnen DB oft lästig. 5. DB2-"security"-Mechanismen können auch auf "database"-Ebene vergeben werden. 6. Vermeiden Sie Verweilzeiten im DB2-Katalog. Geben Sie JEDEM Entwickler und JEDEM QMF User möglichst SEINE (private) "database". 7. Es kann sinnvoll sein, nur EINE TS pro DATABASE zu erlauben, besonders, wenn die Tabelle(n) sehr groß sind 8. generell gilt die Regel, dass nicht mehr als 50 bis 100 TS in einer “database” angelegt werden sollten 9. Die maximale Anzahl von „database“.-Objekten, die in einem DB2Subsystem verwaltet werden können, sind derzeit 65279. 10. Die internen „database descriptors” (DBDs) könnten ungewöhnlich gross werden. DBDs wachsen in dem Masse, in dem neue Objekte definiert werden, schrumpfen aber nicht unmittelbar, wenn die Objekte „gedropped“ werden. Der DBD „space“ für ein „dropped object“ kann nicht wiederverwendet werden bis ein MODIFY RECOVERY Utility die überflüssigen Kopien aus der SYSIBM.SYSCOPY löscht. DBDs belegen Speicher und sind Objekte gelegentlicher Input und Output Operationen. 11. Außerdem ist das Limitieren der Größen von DBDs ein weiterer Grund neue Datenbanken anzulegen. © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 45 von 77 DB2 –Physisches Design 5.3 DB2 Objekte - Strukturierungsempfehlungen Tabellenspeicher (Tablespaces) Der Tablespace(TS) besteht letztendlich aus einer oder mehreren VSAM ESDS – Datei(en), in der/denen alle Zeilen einer oder mehrerer Tabellen gespeichert werden können. Der TS ist physisch einer oder mehreren „storage groups“ zuzuordnen und gehört zu genau einer Datenbank („database“). Seit DB2 V9 gibt es einige Neuheiten, was die TS betrifft: “Simple table spaces” können nicht mehr erzeugt, aber noch verwaltet werden Der “default table space” Typ ist nun der “segmented” TS Ein neuer TS-Typ ist der „universal TS“ (UTS) Bild-20: Die neuen TS Typen seit DB2 V9 TS 5.3.1 Die Privilegien für CREATE TS Das “privilege set”, muss mindestens eine der folgenden Authorisiertungen umschließen: Das CREATETS Privileg für die “database“ DBADM, DBCTRL oder DBMAINT Autorisierung für die “database” SYSADM oder SYSCTRL Autorisierung System DBADM © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 46 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen Ist die DB implizit erzeugt, müssen die Privilegien auf der impliziten DB oder auf DSNDB04 liegen. Zusätzliche Privilegien könnten notwendig sein (siehe auch Beschreibung der BUFFERPOOL und USING STOGROUP Klauseln). Das „Privilege set”: Ist das Statement in einem AP “embedded” ist das “privilege set” als Privilegien, die vom OWNER eines Plans/Packages gehalten werden zu sehen. Wird die Applikation in einem “trusted context” mit der Klausel ROLE AS OBJECT OWNER spezifiziert, ist die “role” der OWNER. Ansonsten ist eine „authorization ID der OWNER. Wird das Statement dynamisch “prepared”, ist das “privilege set” dien Menge an Privilegien die von der SQL “authorization ID” des Prozesses gehalten werden, außer der Prozess läuft innerhalb eines „trusted context” und die Klausel ROLE AS OBJECT OWNER ist angegeben. In diesem Fall ist das “privilege set” die Privilegien, die von der “role“ gehalten werden, die mit der „primary authorization ID” des Prozesses verknüpft ist. 5.3.2 Die Namensvergabe für TS Ein TS-Name kann aus bis zu acht Buchstaben/Ziffern bestehen und muß den Namenskonventionen für z/OS Dateien genügen. Der TS kann über den DB-Namen qualifiziert werden. Tut man das nicht, so ist die „default“-Database DSNDB04. Tablespaces(TS) können EXPLIZIT oder IMPLIZIT erzeugt werden. Spezifiziert man den TS nicht explizit, so wird der TS implizit erzeugt; d.h. DB2 leitet den Namen aus dem Namen der Tabelle ab. Ab dem CM (V9) ist der TS Typ dabei „segmented“. Im NFM (V9) ist der TS Typ entweder „partition-by-growth“ oder „range-partitioned“. Im CM ist die „default“ Database die DB DSNDB04, im NFM erzeugt DB2 entweder eine neue DB für den „tablespace“ oder verwendet eine bereits implizit erzeugte DB. 5.3.3 Explizites Erzeugen eines Tablespace Mit dem Statement CREATE TABLESPACE wird ein TS EXPLIZIT definiert. Das Statement ermöglicht die Angabe aller erlaubten Attribute. Generell wird DB2 beim CREATE TABLESPACE Statement mit einer USING STOGROUP Klausel die “data sets” für den TS zuweisen. Gibt man jedoch die Klausel DEFINE NO an, kann man das Allokieren der “datasets” bis zum ersten INSERT oder einem LOAD in die entsprechende Tabelle/TS verzögern (siehe auch Pkt. Fehler! Verweisquelle konnte nicht gefunden werden. ff). Detaillierte Information über CREATE TABLESPACE erhält man aus den Manual “DB2 SQL Reference”. 5.3.4 Implizites Erzeugen eines Tablespace Ebenso wie bei DB2 Storage Groups und Databases, muss man keinen TS erzeugen, bevor man eine Tabelle anlegt, außer, man will eine “declared temporary table” © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 47 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen anlegen bzw. alle eigenen „data sets“ selbst verwalten. Setzt man ein CREATE TABLE ab, so erzeugt DB2 einen passenden TS dazu. Aber: DB2 generiert den TS nur dann, wenn CREATE TABLE ohne Angabe eines existierenden TS abgesetzt wurde. Befindet sich in der Tabelle eine LOB Spalte und SQL-RULES ist STD, erzeugt DB2 den LOB TS, die „auxiliary table“ und den „auxiliary index“. Ist kein Datenbankname mitgegeben, so versucht DB2 die „default database“ DSNDB04 und die „default DB2 storage group“ SYSDEFLT zu verwenden. In den meisten DB2-Umgebungen ist die „default“-Database für die Nutzung durch „normale“ User über die entsprechende Rechtevergabe gesperrt. Das führt bei fehlender Angabe einer Database bei einem CREATE TABLE zum SQLCODE -551. Wird der TS implizit erzeugt, so nutzt DB2 natürlich auch „defaults“ für die Speicherplatz-Zuweisung. Die „default“-Werte für PRIQTY und SECQTY spezifizieren die Platzzuweisung für den TS. Ist der Wert des Subsystem Parameters TSQTY ungleich 0, so werden darüber die „default“ Werte für PRIQTY und SECQTY bestimmt. Ist der Wert von TSQTY 0, so werden die “default” Werte für PRIQTY und SECQTY wie beim CREATE TABLESPACE Statement im Manual „DB2 SQL Reference“ bestimmt. Wird kein TS Name im CREATE TABLE Statement angegeben (und der TS wird implizit erzeugt), so leitet DB2 den TS-Namen aus dem Namen der Tabelle nach folgenden Regeln ab: Der TS Name ist gleich dem Tabellennamen, wenn folgendes zutrifft: o Kein anderer TS oder IX Space in der DB besitzt bereits diesen Namen o Der Tabellenname ist nicht länger als 8 Zeichen o Die Zeichen sind alle alphanumerisch und das erste Zeichen ist keine Zahl. Besitzt irgendein anderer TS in der DB bereits den Namen der Tabelle, so weist DB2 einen Namen in der Form xxxxnyyy zu. Dabei sind xxxx die ersten 4 Zeichen des Tabellennamens und nyyy ist eine einstellige Zahl und 3 Buchstaben, die die Eindeutigkeit des Namens sicherstellen sollen. DB2 speichert den Namen in der Katalog Tabelle SYSIBM.SYSTABLESPACE zusammen mit allen anderen TS Namen. Die Vorgaben für LOB TS findet man im Manual “DB2 SQL Reference“. Zu beachten ist bei der Definition von TS, dass es verschiedene Typen gibt; z.B.: „simple Tablespaces“ (wird nur noch selten/nicht mehr genutzt) „partitioned Tablespaces“ (PTS) „segmented Tablespaces“ (STS) „universal Tablespaces“ (UTS) mit PBG/PBR Charakteristika usw. Sie sind entsprechend ihrer Verwendungsabsicht zu definieren, um so u.a. ein Fundament für gute, technische DB2-Performance zu legen. 5.3.5 Die DB2 Tablespace Typen Jeder TS-Typ verfolgt bestimmte Ziele, besitzt eigene Stärken und Schwächen und unterstützt bestimmte Eigenheiten der physischen Speicherung von Daten. Jeder TS-Typ weist also somit auch unterschiedliche Charakteristika auf: (1) Tablespaces, die „segmented“ sind © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 48 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen Ein “segmented” Tablespace (STS) ist ideal für die Abspeicherung von mehr als einer Tabelle in einem TS – vor allem, wenn es sich dabei um kleine Tabellen handelt. Die „page-sets” sind in diesem TS-Typ zu Segmenten zusammengefasst und jedes Segment enthält den Satztyp genau einer Tabelle. (2) Tablespaces, die „partitioned“ sind Ein “partitioned” Tablespace (PTS) enthält genau eine Tabelle und DB2 teilt den Tablespace physisch in sogenannte Teile eines TS/„Partitions“ auf. Diese Partitions können im Endeffekt jeder seine eigenen TS-Parameter bekommen. (3) „EA-enabled table spaces“ und Indexspaces Man kann “partitioned tablespaces” für erweiterte Adressierbarkeit (extended addressability (EA)), eine Funktion des DFSMS™, vorbereiten. Die Bezeichnung für solche Tablespaces bzw. Indexspaces ist “EA-enabled”. (4) „Simple Tablespaces“ Ein “simple Tablespace” ist weder “partitioned” noch “segmented”. Das Erzeugen von “simple Tablespaces” wird seit DB2 Version 9 nicht mehr unterstützt, ihre Existenz und Verwaltung wird aber noch geduldet. (5) „Universal Tablespaces“ Man hat in DB2 V9 nun die Vorteile der Verwaltung von “segmented” Speicher mit denen der Organisation von “partitioned Tablespaces“ kombiniert und nutzt dazu den sogenannten „universal“ Tablespace Typ(UTS). Ein UTS ist also nichts anderes als eine Kombination der Eigenschaften des “partitioned” TS mit den Charakteristika eines „segmented“ TS. (6) „Large object“ Tablespaces “Large object” TS (LOB TS zusammen mit den als “auxiliary” TS) sind erforderlich zur Speicherung von LOB-Daten(BLOBs, CLOBs, DBCLOBs), wie Grafiken, Videodaten oder sehr große (meist eingescannte) Text-Strings. „Auxiliary TS“ werden bei “inline LOBs“ (< Tabellenpage) nicht erforderlich. Passen die Daten nicht mehr in eine Datenpage, so kann man eine oder mehrere Spalten einer Tabelle als LOB Spalte definieren. (7) XML Tablespaces Ein XML Tablespace speichert eine XML Tabelle. 5.3.6 “EA-enabled” Tablespaces und Indexspaces 5.3.6.1 Eigenschaften von “EA-enabled TS und IXS Man kann “partitioned tablespaces” für erweiterte Adressierbarkeit (extended addressability (EA)), eine Funktion des DFSMS™ vorbereiten. Die Bezeichnung für Tablespaces bzw. Indexspaces, die dafür vorgesehen sind, ist “EA-enabled”. “EA-enabled Tablespaces / Indexspaces” muss man dann einsetzen, wenn man die © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 49 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen maximale Partitiongrösse (DSSIZE) so gewählt hat, dass sie im CREATE TABLESPACE Statement 4 GB übersteigt. Beide “EA-enabled” und “non-EA-enabled partitioned TS” können eine Tabelle mit bis zu 4096 Partitions enthalten. Im Folgenden werden die Unterschiede klar: EA-enabled Tablespaces Non-EA-enabled Tablespaces Bis zu 4096 Partitions mit je 64 GB Bis zu 4096 Partitions mit jeweils 4 GB Erzeugt mit einem beliebigen Wert für DSSIZE DSSIZE kann nicht grösser als 4 GB sein Datasets sind “SMS managed” Datasets sind “VSAM-“ oder “SMSmanaged” Erfordert einen speziellen Setup Kein spezieller Setup erforderlich Bild-21: Unterschiede zwischen „EA-enabled“ und „non-EA enabled“ TS 5.3.6.2 Erzeugen von “EA-enabled” TS und Indexspaces DFSMS™ besitzt eine “extended-addressability” Funktion. Sie ist erforderlich zur Darstellung von Datasets, die grösser als 4 GB sind. „page sets”, die für “extended addressability” angelegt wurden, heißen “EA-enabled”. Um diese “page sets” zu erzeugen muss man: 1. SMS nutzen, um die Datasets zu verwalten, die mit den “EA-enabled page sets“ belegt werden sollen. 2. Die Verbindung der Datasets zu den „page sets“ sollte über eine “data class” (ein SMS Konstrukt) erfolgen, die das erweiterte Format und die „extended addressability“ Optionen definiert. Um die Verbindung zwischen „data sets” und der “data class” darzustellen, benutzt man die “automatic class selection” (ACS) Routine. Sie weist die DB2® „data sets“ der relevanten SMS „data class“ zu. Die ACS Routine erledigt dies auf der Basis der “data set” Namen. Es gibt dabei keinerlei Bedenken bezüglich der Performance, wenn man auf einer Datenklasse „non-EA-enabled“ und „EAenabled“ „page sets“ gemeinsam unterbringt. Bei “user-managed data sets”, kann man die ACS Routine nutzen oder aber auch die entsprechende “data class” im DEFINE CLUSTER Kommando angeben, wenn das „data set“ angelegt wird. 3. Man erzeugt nun den “partitioned” oder LOB TS mit einer DSSIZE von 8 GB oder größer. Der „partitioning Index” des “partitioned table space” übernimmt nun das Attribut “EA-enabled” vom zugehörigen TS. Nachdem ein „page set” erzeugt wurde, kann man mit dem ALTER TABLESPACE Statement die DSSIZE nicht mehr ändern. Man muss dazu den TS mit DROP und CREATE behandeln. Außerdem kann man die „datasets” des “page set” nicht mehr ändern, um z.B. die „extended addressability“ bzw. die „extended format“ Attribute abzuschalten. Ändert jemand die „data class”, um die „extended addressability“ bzw. die „ex- © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 50 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen tended format“ Attribute abzuschalten, so setzt DB2 eine Fehlermeldung ab, sobald das “page set” das nächste Mal geöffnet werden soll. 5.3.7 Simple table spaces Ein “simple Tablespace” ist weder “partitioned” noch “segmented”. Man kann zwar keine “simple” TS mehr erzeugen, aber, falls noch welche existieren, diese ändern, die Daten modifizieren bzw. lesen. Wird ein TS implizit oder explizit angelegt, ohne dass SEGSIZE, NUMPARTS, oder die MAXPARTITIONS Option verwendet wird, so erzeugt DB2® einen „segmented“ TS anstatt eines „simple Tablespace“. Per “default” hat der “segmented” TS dann eine SEGSIZE von 4 und eine LOCKSIZE Angabe ROW. Empfehlung: Man sollte alle noch existierenden “simple” TS so schnell, wie möglich, in “segmented” UTS konvertieren. 5.3.8 Universal Table spaces Mit DB2 9 wurde ein neuer TS-Typ eingeführt: „universal table space“ (UTS). Ein UTS ist ein TS, der die Eigenschaften eines “segmented” und eines „partitioned“ TS miteinander kombiniert. Wichtig sind zwei Typen von UTS: “partition-by-growth” TS(PBG) und “range-partitioned” TS(PBR). Der letztendliche UTS Typ wird über die Spezifikation in den Klauseln SEGSIZE, MAXPARTITIONS bzw. NUMPARTS festgelegt. Gibt man beispielsweise SEGSIZE mit NUMPARTS an, so wird der TS als “range-partitioned” UTS angelegt. Ist SEGSIZE mit MAXPARTITIONS angegeben, wird der TS als “partition-by-growth” UTS angelegt. Die weiteren Kominationsmöglichkeiten sind im folgenden Schaubild dargestellt: SEGSIZE Klausel MAX PARTITIONS Klausel NUMPARTS Klausel TS-Typ spezifiziert spezifiziert Nicht spezifiziert Partition-by-growth TS spezifiziert Nicht spezifiziert Nicht spezifiziert Segmented TS spezifiziert Nicht spezifiziert spezifiziert Range-partitioned UTS Nicht spezifiziert spezifiziert Nicht spezifiziert PBG TS mit implizit SEGSIZE 4 Nicht spezifiziert Nicht spezifiziert Nicht spezifiziert Segmented TS mit implizit SEGSIZE 4 Nicht spezifiziert Nicht spezifiziert spezifiziert Partitioned TS Bild-22: UTS: Die Tablespace-Typen © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 51 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen Der UTS ist also eine Hybride zwischen „partitioned“ und „segmented“ Tablespace und ist inkompatibel mit MEMBER CLUSTER (ab DB2 10 ist diese Restriktion aufgehoben) • Besitzt ein verbessertes „space management“ • Unterstützt Massen-Deletes / TRUNCATE • Lässt immer noch nur EINE Tabelle pro Tablespace zu Kann “Range Based partitioning (PBR)” oder “Partitioned By Growth (PBG)” unterstützen • DROP / CREATE ist erforderlich, um bestehende “page sets” nach UTS zu migrieren ( in DB2 V9 noch ) • Eine „segmented space-map page” besitzt mehr Information über “free space” als eine “ partitioned space-map page“ • Partitioning ermöglicht den/ “support” von “large” TS und parallele Verarbeitung von Zugriffen • Alle TS auch die UTS werden per „default“ im RRF Format angelegt, außer der DSNZPARM SPRMRRF ist auf DISABLE gesetzt • Die Option MEMBER CLUSTER , eingeführt für “partitioned” TS in “data sharing” Umgebungen wird von UTS in der Version DB2 10 wieder unterstützt. Die Katalogtabelle SYSIBM.SYSTABLESPACE identifiziert die TS über folgende Werte in der Spalte TYPE column: blank L R P O G Der TS wurde ohne LOB oder CLUSTER Optionen erstellt der TS kann größer als 64 GB sein UTS “range-partitioned” Impliziter UTS für XML Spalten LOB TS UTS “partitioned-by-growth” TS 5.3.8.1 Die Nutzung von UTS in DB2 9/10 und V11 In DB2 9 wurden UTS für folgende Zwecke angelegt: XML TS, wobei die “base table” segmentiert, partitioniert oder UTS sein kann CLONE Tables In DB2 10/11 werden UTS angelegt für „Hashing access“ XML „versioning“ Funktion. Die XML „base table“ muss UTS sein. Die Nutzung von ALTER „online schema“ Verbesserungen. Einige „schema“ Änderungen sind wichtig für UTS mit neuen „pending changes” Techniken, die für andere Strukturen von TS nicht zur Verfügung stehen „Inline“ LOBs. Zugriff auf „currently committed“ Daten Insert IX I/O Parallelverarbeitung. Dies funktioniert für UTS oder klassische © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 52 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen “partitioned table spaces“, nicht aber mit „segmented table spaces“ 5.3.8.2 Konvertieren auf UTS In DB2 9 kann man einen TS nicht auf UTS konvertieren, ohne DROP und reCREATE. DB2 10 vereinfacht diese Änderung auf die TS-Struktur und die Attribute. Es gibt einen ALTER TS mit Konvertierungsfunktion und zwar wie folgt: Konvertieren von “index partitioned” TS nach “table partitioned” TS. Konvertieren von klassisch “table partitioned” TS nach “range-partitioned” TS mit Hinzufügen der Option SEGSIZE. Konvertieren von “simple” TS mit EINER Tabelle auf einen “partition-by-growth” TS Konvertieren von “segmented” TS mit EINER Tabelle auf einen “partition-bygrowth” TS Konvertieren von “partition-by-growth” TS auf “hash table space” Konvertieren von “range-partitioned” TS auf “hash table space” © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 53 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen 5.3.8.3 ALTER TS Dazu die Syntax des ALTER ALTER TABLESPACE >>__ALTER TABLESPACE____________________________table-space-name____________>< |_database-name._| >_BUFFERPOOL__bpname______________________________________________| |_LOCKSIZE____ANY_________________________________________________| | |_TABLESPACE_| | | |_TABLE______| | | |_PAGE_______| | | |_ROW________| | | |_LOB________| | |_LOCKMAX____SYSTEM_______________________________________________| | |_integer_| | |_CLOSE______YES__________________________________________________| | |_NO__| | |_USING______VCAT__catalog-name___________________________________| | |_STOGROUP__stogroup-name_| | |_PRIQTY_____integer______________________________________________| |_SECQTY_____integer______________________________________________| |_ERASE______YES__________________________________________________| | |_NO__| | |_FREEPAGE___integer______________________________________________| |_PCTFREE__ _integer_____________________________________________ | |_COMPRESS____YES_________________________________________________| | |_NO__| | |_DROP PENDING CHANGES____________________________________________| |_DSSIZE_integer_G________________________________________________| |_MEMBER CLUSTER YES______________________________________________| ||_MEMBER CLUSTER NO__| | |_SEGSIZE_integer_________________________________________________| |_GBPCACHE___CHANGED______________________________________________| | |_ALL_____| | | |_SYSTEM__| | | |_NONE____| | |_LOCKPART____YES_________________________________________________| | |_NO__| | |_MAXROWS_____integer_____________________________________________| |_MAXPARTITIONS_integer___________________________________________| |_TRACKMOD____YES_________________________________________________| | |_NO__| | |___LOGGED________________________________________________________| | |_NOT LOGGED__| | |_CCSID__ccsid-value______________________________________________| >>__ALTER PARTITION__integer____________________________________________________>< |_USING____VCAT__catalog-name_____________________________________| | |_STOGROUP__stogroup _| | |_PRIQTY__integer_________________________________________________| |_SECQTY__integer_________________________________________________| |_ERASE_______YES_________________________________________________| | |_NO__| | |_FREEPAGE__integer_______________________________________________| |_PCTFREE___integer_______________________________________________| |_COMPRESS____YES_________________________________________________| | |_NO__| | |_GBPCACHE____CHANGED_____________________________________________| | |_ALL_____| | | |_SYSTEM__| | | |_NONE____| | |_TRACKMOD____YES_________________________________________________| |_NO__| Bild-23: UTS: Der ALTER TABLESPACE Sie verwenden das Attribut MAXPARTITIONS des ALTER TABLESPACE Statements, um die maximale „partition size“ für „partition-by-growth“ TS festzulegen. © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 54 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen Bei Erreichen dieses „thresholds“ wird eine neue PGB-Partition angelegt. Man kann dieses Attribut auch dazu verwenden, um eine „single-table“ in einem „simple tablespace“ oder eine „single-table“ in einem „segmented tablespace“ auf einen „partition-by-growth“ Universal TS zu konvertieren. Zusätzlich dazu kann man das Attribut SEGSIZE im ALTER TABLESPACE dazu nutzen, einen „partitioned tablespace“ in einen „range-partitioned universal table space“ zu konvertieren. Single table Simple TS PBG TS PBG TS PBG TS PBG TS PBG TS Hash TS Single table Segmented TS ONE Classic PTS trolled Table controlled ONE PBG TS PBG TS PBG TS PBG TS PBR TS Hash TS ALTER verfügbar ab DB2 V8 Antique PTS trolled Index conrolled Bild-24: UTS: Konvertierung von Tablespaces Diverse Konvertierungen sind nur erlaubt für “single-table table spaces”. Auch benutzen Konvertierungen aus “hash table spaces” zurück, nicht mehr die Technik der „pending changes“. 5.3.8.4 Neuer “default table space” zur CREATE Zeit In DB2 V10 sind “segmented table spaces” nicht mehr der “default”, wenn ein neuer Tablespace angelegt werden soll. „Partition-by-growth” UTS lautet der neue “default” jetzt. Will man einen “range partitioned” UTS (PBR) anlegen, so müssen die Werte für NUMPARTS und SEGSIZE gesetzt werden. Will man nur einen klassischen „partitioned table space” erzeugen, muss man SEGSIZE 0 beim CREATE TABLESPACE verwenden. © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 55 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen Man kann aber auch den neuen “default partition SEGSIZE” im DSNZPARM DPSEGSZ=0 im Makro DSN6SYSP setzen („default“ ist 32), dann entsteht per „default“ ein „segmented partitioned TS“. Will man nur einen “segmented table space” spezifizieren, darf MAXPARTITIONS und NUMPARTS keinesfalls gesetzt sein und welcher Wert auch immer in DPSEGSZ gesetzt ist, man bekommt einen „segmented table space“ mit 4 KB SEGSIZE(!), was nicht wirklich effizient ist. 5.3.8.5 Die MEMBER CLUSTER Option für UTS MEMBER CLUSTER zeigt an, dass in einer INSERT Operation eingefügte Daten nicht über den Impliziten “clustering” Index (erster Index) oder den expliziten “clustering” Index “geclustered” werden.. Stattdessen wählt DB2 den Platz im TS in den die Daten geschrieben warden sollen anhand des verfügbaren Platzes. MEMBER CLUSTER für “segmented table spaces” ist verboten. MEMBER CLUSTER für einen LOB TS oder einen TS in einer “work file database“ ist verboten. MEMBER CLUSTER kann zusammen mit dem Parameter MAXPARTITIONS angegeben werden. 5.3.8.6 UTS “workload performance” N/A für “non SYSPLEX” 5.3.8.7 “Non-range-defined table spaces” N/A 5.3.8.8 “Range defined table spaces” N/A 5.3.8.9 Überlegungen zur UTS Performance In den meisten Fällen bieten “universal table spaces” eine optimale parallele Verarbeitung beim INSERT und damit höchste Performance in “data sharing environment”, umso mehr, wenn man die Option MC beim PBG UTS einsetzen kann. Auch wenn MEMBER CLUSTER nicht verwendet wird, liefert ein PBG TS gute Performance. PBR liefert ebenfalls sehr gute Performance, wenn PLL “Locking” zum Einsatz kommt oder wenn die INSERT’s “random” erfolgen. Der einzige Fall, in dem die UTS Performance signifikant einbricht, ist bei einem PBR “sequential“ INSERT mit „row level locking“ in einer „data sharing“ Umgebung und ohne Angabe von MC. Ist ein hoher Durchsatz bei parallelem INSERT wichtig, und man will MC nicht nutzen, jedoch andere neue Funktionen auf UTS, so sollte man „row level locking“ dringend vermeiden. © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 56 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen 5.3.8.10 Inferenzen zu “hash tables” Angenommen, man überlegt sich “hash” Zugriffe einzusetzen: Um eine „hash” Organisation zu erzeugen, muss man einen „cluster index“ vorlegen. Startet man mit einer leeren Tabelle, und füllt diese später mit INSERTs, so befindet sich in der “hash table” normalerweise eine Menge an freiem Platz und es gibt keinen Anlass, lange nach „free space“ zu suchen. Diese INSERTs erfolgen “random”, da die “hash“ Werte „pseudo random“ sind(„hash“ Algorithmus). Wird die “hash table” aber allmählich – sagen wir 80% bis 90% voll - so fangen die INSERTS an, immer öfter die “overflow area” in Anspruch zu nehmen und dann beginnen die „overflow“ INSERTs sich wie sequentielle INSERTs auf normalen Tabellen zu benehmen. 5.3.8.11 Inferenzen zu “inline LOBs” Angenommen, man überlegt sich „inline“ LOBs einzusetzen, so veranlassen diese ein Anwachsen der „row size”; d.h. es existieren weniger „rows“ pro Page. Gibt es nur noch eine “row” pro Page, so verhalten sich RLL und PLL identisch, ausser in „data sharing“ Umgebungen, wo RLL einen „data page“ P-Lock erforderlich macht. In Messungen kann man sehen, wie die RLL Performance “in die Knie geht”. Das passiert allerdings nicht, wenn die “rows” sehr groß sind. Also, wenn man die Performance von großen “rows” evaluieren will, so sollte man sich die Messungen der PLL ansehen, auch wenn man plant RLL einzusetzen. 5.3.8.12 UTS: “Partition by growth” “Partition-by-growth” TS erlauben eine Partitionierung, die sich dem Datenwachstum des TS anpasst. Das heißt, dass “segmented tables” gemäß ihrem Wachstum partitioniert werden können, ohne die Erfordernis “key ranges” für die Partitionierung festlegen zu müssen. PBG’s verhalten sich, wie einzelne “segmented” DB2 TS. DB2 verwaltet die PBG TS, indem es automatisch eine Partition erzeugt, wenn mehr Platz für die Daten, beispielsweise beim INSERT, erforderlich wird. Der TS startet mit einer einzigen Partition und wächst von da an automatisch bis auf maximal 128 TB. Diese maximale Größe wird über die Parameter MAXPARTITIONS und DSSIZE bestimmt. Obwohl PBG’s partitioniert sind, sind sie in den einzelnen Partitions auch „segmented“ und besitzen damit automatisch die Eigenschaften von STS. Die partitionierte Struktur erlaubt DB2 Utilities Operationen auf „part level“ und parallele Verarbeitungstechniken. „Partition By Growth“ TS sind immer UTS (PBG) • • • CREATE TABLESPACE MAXPARTITIONS integer CREATE TABLE PARTITIONED BY SIZE EVERY integer G Bei einem „Single Table Tablespace“ und bei Universal Tablespaces (UTS) möglich (max. 128 TB) „default segsize“ = 4 (ab DB2 V10: 32) max. Größe für die einzelne Partition = 4GB und die max. Anzahl Partitions = 256 dies begrenzt die „default size“ einer Tabelle auf 1 TB Bei einem implizit erzeugten TS kann man die Anzahl Partitions über die Klausel © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 57 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen PARTITION BY SIZE im CREATE TABLE Statement steuern: CREATE LARGE TABLESPACE suts001 IN dbuts001 MAXPARTITIONS 2 SEGSIZE 16 … CREATE TABLE tuts001 … PBG Bild-25: UTS: PBG Tablespace CREATE TABLESPACE TS1 IN DB1 MAXPARTITIONS 55 SEGSIZE 64 DSSIZE 2G LOCKSIZE ANY; CREATE TABLE PARTITION EVERY MYTABLE BY SIZE INTEGER G in DB1.TS1; Bild-26: UTS: DDL für PBG Tablespace 5.3.8.12.1 Überlegungen zu PBG TS “Partition-by-growth” TS müssen über “storage groups” angelegt sein Die Option MEMBER CLUSTER ist in der CREATE TABLESPACE Syntax nicht mehr möglich(erst ab DB2 10 wieder). LOB und XML Spaces, die mit einem “partition-by-growth” TS verknüpft sind, werden von DB2 IMMER implizit definiert, unabhängig davon, ob SQLRULES DB2 oder STD angewendet wird Ein “partition-by-growth” TS kann nur eine einzige Tabelle beinhalten. Wird eine neue Partition hinzugefügt, so werden die Werte für “drain” und „claim“ von der vorangehenden Partition abgeleitet einige DBET Status werden ebenfalls von der vorangehenden Partition abgeleitet, wenn eine neue Partition hinzugefügt wird. Dies sind vor allem die DBET Status: RO*, UTUT, UTRO, PSRBD und ICOPY. 5.3.8.12.2 PBG Restriktionen Die Option PART beim LOAD Utility ist nicht unterstützt REBALANCE beim REORG ist nicht unterstützt Die TS müssen „DB2-managed“ sein (nicht „user-managed“). DB2 muss die Möglichkeit haben, „data sets“ zu erzeugen, wenn Partitions voll werden © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 58 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen Partitions können nicht hinzugefügt, rotiert oder geändert(ALTER) werden und so sind die folgenden Optionen für “partition-by-growth” TS nicht zulässig: – – – ALTER TABLE ADD PARTITION ALTER TABLE ROTATE PARTITION ALTER TABLE ALTER PARTITION Ein „non-partitioning“ Index (NPI) verwendet einen 5 Byte langen „record identifier“(RID) „partitioned IX“ werden nicht unterstützt, es sind nur NPI’s erlaubt “Partition-by-growth” (PBG) TS sind sinnvoll für TS, in denen Tabellen keinen wirklichen “partitioning key” besitzen, aber erwartungsgemäß über 64 GB wachsen und so das Limit für „simple“ bzw. “segmented” TS überschreiten werden. Die Größe eines PBG TS liegt bei einem maximalen Limit von 128TB. Ein PBG TS startet i. d. R. mit einem “single-partition” TS und wächst dann automatisch über weitere Partitions – falls erforderlich. Wird die erste Partition gefüllt, entsteht keinerlei “resource unavailable” Bedingung – auch nicht, wenn die nächste Partition erzeugt wird usw. Dies geschieht solange, bis das zum Erstellungszeitpunkt definierte Maximum an Partitions erreicht ist. Erst dann entsteht eine „resource unavailable” Situation. Die Datenstruktur eines PBG TS ähnelt der eines “segmented” Tablespace. Weitere Informationen zum PBG TS bezüglich des Utility Einsatzes im Handbuch „DB2 - Utilities allgemein (Best Practise)“. 5.3.8.13 UTS: “Partition by range” "Range-partitioned”(“partitioned by range” oder auch PBR) UTS hat die Eigenschaften von “partitioned” und „segmented“ TS miteinander kombiniert. Sie sind ab DB2 V8 auch als „table controlled“ PTS bekannt. Man erzeugt diesen Typ TS, indem man die Schlüsselworte NUMPARTS oder SEGSIZE und NUMPARTS in einem CREATE TABLESPACE Statement angibt. PBR TS können mit im CREATE TABLESPACE erzeugt werden. Die „ranges“ der einzelnen Partitions können in einem folgenden CREATE TABLE Statement festgelegt werden. Hat man einmal einen „range-partitioned” TS erzeugt, kann man die meisten Aktionen, die man auch auf “partitioned” / “segmented” TS durchführen kann, ansteuern. Einige Vorteile von “range-partitioned” TS: Verbessertes “space” Management in Verbindung mit Sätzen variabler Länge. Der Grund: Eine “segmented space map page” besitzt mehr Informa-tionen über “free space“, als eine „partitioned space map page“. Verbesserte “mass delete” Performance. Der “mass delete” auf einem “segmented” TS ist schneller als auf andere TS Typen, wie “partitioned” oder gar „simple“ TS. DB2 benutzt alle bzw. die meisten Segmente nach einem DROP bzw. einem “mass delete” wieder, wenn diese Aktion “committed” ist. Hier ein Beispiel eines SQL CREATE Statement für einen PBR. SEGSIZE und © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 59 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen NUMPARTS definieren den PBR. Nach dem CREATE des TS sollte eine “tablecontrolled partitioning” Tabelle erstellt werden: CREATE LARGE TABLESPACE suts001 IN dbuts001 NUMPARTS 2 SEGSIZE 16 … CREATE TABLE tuts001 … PARTITON BY RANGE ( PNR ASC) ( PARTITION 1 ENDING ( 20 ) , PARTITION 2 ENDING ( 40 ) ) PBR Bild-27: UTS: PBR Tablespace CREATE TABLESPACE NUMPARTS SEGSIZE LOCKSIZE PRB_TS1 IN UTS_DB1 3 64 ANY; CREATE TABLE MyTable ( C1 CHAR(4), C2 VARCHAR(20), C3 INTEGER ) PARTITION BY (C1) ( PARTITION 1 ENDING AT (‘DDDD’), PARTITION 2 ENDING AT (‘HHHH’), PARTITION 3 ENDING AT (‘ZZZZ’) ) IN UTS_DB1.PRB_TS1; Bild-28: UTS: CREATE eines PBR Tablespace 5.3.8.13.1 Einige Überlegungen zu PBR TS Alle “range-partitioned” UTS sind LARGE Tablespaces. Die Spalte TYPE in SYSIBM.SYSTABLESPACE erhält ein 'R' für „rangepartitioned“ Universal Tablespaces. Das Schlüsselwort MEMBER CLUSTER ist für “range-partitioned” Universal Tablespaces nicht erlaubt(erst ab DB2 10 wieder) „Range partitioned” TS folgen dem regulären “partitioned table space” Locking Schema; d.h. LOCKSIZE TABLE ist ungültig in der CREATE TABLESPACE Syntax Man muss die Syntax für „table-controlled partitioning” einsetzen, wenn man einen “range-partitioned universal table space” anlegen will “Range-partitioned universal table spaces” existieren zusätzlich zu den regulären “partitioned tablespaces”. “Mass delete” Locks werden auf Tabellenebene, anstatt auf TS „level” gesetzt Enthält ein „range-partitioned universal table space” eine XML Spalte, so ist der zugehörige XML Tablespace ebenfalls ein „range-partitioned“ UTS Achtung: “index-controlled partitioning” ist nicht mehr erlaubt. Derartige Aktionen führen zu einem SQLCODE = -662 Fehler. © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 60 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen 5.3.8.14 Vorteile / Nachteile von UTS generell Einige der wichtigsten Vorteile eines “universal Tablespaces” (UTS) sind: Besseres “space management” für variabel lange “rows”, da eine “segmented space-map page” mehr Information über den freien Platz auf dem TS besitzt als eine “partitioned space-map page” Verbesserte „mass delete” Performance “Table scans” werden auf Segment-Ebene durchgeführt Unmittelbare Wiederverwendbarkeit aller oder fast aller Segmente einer Tabelle nach DROP bzw. “mass delete”. Restriktionen: UTS können nicht in der “work file database” angelegt werden. UTS erfordern mehr “space map pages” als ein “partitioned” TS 5.3.9 Large Object Tablespaces (LOB TS) © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 61 von 77 DB2 –Physisches Design © S.K.Consulting Services GmbH DB2 Objekte - Strukturierungsempfehlungen ++49 (0)162 4468790 www.sk-consulting.de Seite 62 von 77 DB2 –Physisches Design © S.K.Consulting Services GmbH DB2 Objekte - Strukturierungsempfehlungen ++49 (0)162 4468790 www.sk-consulting.de Seite 63 von 77 DB2 –Physisches Design 6 DB2 Objekte - Strukturierungsempfehlungen Anhang 6.1 Checkliste zum physischen DB-Design DB2 I. Logisches DB-Modell und seine Umsetzung nach DB2 1. Beachten Sie die Stärken und Schwächen des Ziel-DBMS 2. Überführen des logischen DM 3. Legen Sie Satztypen zusammen, wo erforderlich 4. Trennen Sie Satztypen auf, wo nützlich 5. Nutzen Sie die Denormalisierungsmöglichkeiten 6. Erzeugen Sie zusätzliche Tabellen, wo dienlich 7. Ergänzen Sie das DM um zusätzliche Felder 8. Überführen Sie die Beziehungen 9. Richten Sie die Zugriffspfade in DB2 ein (mindestens PK, FK als Indexe) 10. Bestimmen Sie die IX-Typen 11. Ermitteln Sie Ihr Mengengerüst 12. Untersuchen Sie die Nutzungsfrequenz der Objekte Notizen: © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 64 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen II. Festlegen der physikalischen DB2-Struktur 1. Legen Sie die DB2 Datentypen fest 2. Bestimmen Sie TS-Größe und TS-Typ 3. Berechnen Sie die Index-Größen 4. Planen Sie mit Ihrem Betrieb die Verteilung derTS auf die Platten Notizen: © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 65 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen III. DB2-Objekte – Strukturierungsempfehlungen 1. Definieren Sie Ihre Datenbank(en) (Databases) 2. Definieren Sie Ihre Tabellenspeicher (Table Spaces) 3. Entwerfen Sie Ihre Tabellen (Tables) a. Beachten Sie die Größe von Tabellen (Tables) b. Beachten Sie die INSERT-Algorithmen c. Behandeln Sie „Code Tables" d. Behandeln Sie „Flip-Flop Tables" e. Behandeln Sie „Hot spots" f. Berücksichtigen Sie die weiteren Tips zum Table –Design 4. Definieren Sie Ihre Indizes (Index) a. Prüfen Sie mögliche Indexstrukturen und Konzepte b. Prüfen Sie den Einsatz von „clustering" Indizes c. Prüfen Sie den Einsatz von „Partitioned Index" d. Prüfen Sie den Einsatz von „Non-Unique Index" e. Nutzen Sie UNIQUE WHERE NOT NULL, falls erforderlich f. Bestimmen Sie „Non-Partititioned" Index „Pieces" g. Definieren Sie Indizes zur Vermeidung von Sort-Vorgängen h. Setzen Sie Indizes aus mehr als einer Spalte ein i. Beachten Sie die Indizierung von langen alphanumerischen Spalten j. Beachten Sie die Indizierung von VARCHAR Spalten k. Beachten Sie die weiteren Tips zum Index-Design 5. Definieren Sie Ihre Views Notizen: © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 66 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen IV. Parallele Verarbeitung 1. Prüfen Sie Ihre LOCKSIZE-Angaben 2. Beachten Sie die Anzahl „rows per page" 3. Beachten Sie die Ebenen der Kontrolle beim LOCK 4. Beachten Sie die „Lock Escalation" 5. Beachten Sie die Kosten von „row locking" 6. Prüfen Sie Index-Design und konkurrierende Verarbeitung Notizen: © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 67 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen V. Überlegungen zu Queries 1. Queries und Partitionierung 2. Gibt es einen minimalen Parallelitätsgrad ? 3. Wann sollten PTS eingerichtet werden ? 4. SQL Formulierungen für Parallelverarbeitung Notizen: © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 68 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen VI. DB2 Speicherplatzzuweisung und Speicherverwaltung 1. Definieren Sie Ihre Speicherplatzgruppe(n) (Storage Group) 2. Beachten Sie die Speicherplatzgruppen und die Verteilung der Datasets 3. Beachten Sie weitere Tips zu STORAGE GROUPS VII. DBMS Systemressourcen 1. Der Buffer Manager 2. DB2 Logging 3. Work Files 4. Katalog und Directory 5. Die IRLM-Umgebung und die LOCK-Anforderungen 6. Traces VIII. z/OS-Ressourcen Notizen: © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 69 von 77 DB2 –Physisches Design 6.2 DB2 Objekte - Strukturierungsempfehlungen Limits bei DB2 (V11) © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 70 von 77 DB2 –Physisches Design © S.K.Consulting Services GmbH DB2 Objekte - Strukturierungsempfehlungen ++49 (0)162 4468790 www.sk-consulting.de Seite 71 von 77 DB2 –Physisches Design © S.K.Consulting Services GmbH DB2 Objekte - Strukturierungsempfehlungen ++49 (0)162 4468790 www.sk-consulting.de Seite 72 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen 6.3 Abbildungsverzeichnis 6.4 Glossar 6.5 © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 73 von 77 DB2 –Physisches Design 6.6 DB2 Objekte - Strukturierungsempfehlungen Literaturhinweise DB2 Universal Database Server for OS/390 und z/OS Version 7/8/9 “product libraries”: DB2 for OS/390 and z/OS v DB2 Administration Guide, SC26-9931 v DB2 Application Programming and SQL Guide, SC26-9933 v DB2 Application Programming Guide and Reference for Java, SC26-9932 v DB2 Command Reference, SC26-9934 v DB2 Data Sharing: Planning and Administration, SC26-9935 v DB2 Data Sharing Quick Reference Card, SX26-3846 v DB2 Diagnosis Guide and Reference, LY37-3740 v DB2 Diagnostic Quick Reference Card, LY37-3741 v DB2 Image, Audio, and Video Extenders Administration and Programming, SC26-9947 v DB2 Installation Guide, GC26-9936 v DB2 Licensed Program Specifications, GC26-9938 v DB2 Messages and Codes, GC26-9940 v DB2 ODBC Guide and Reference, SC26-9941 v DB2 Reference for Remote DRDA Requesters and Servers, SC26-9942 v DB2 Reference Summary, SX26-3847 v DB2 Release Planning Guide, SC26-9943 v DB2 SQL Reference, SC26-9944 v DB2 Text Extender Administration and Programming, SC26-9948 v DB2 Utility Guide and Reference, SC26-9945 v DB2 What's New? GC26-9946 v DB2 XML Extender for OS/390 and z/OS Administration and Programming, SC27-9949 v DB2 Program Directory, GI10-8182 DB2 Administration Tool v DB2 Administration Tool for OS/390 and z/OS User’s Guide, SC26-9847 DB2 Buffer Pool Tool v DB2 Buffer Pool Tool for OS/390 and z/OS User’s Guide and Reference, SC26-9306 Net.Data ® v Net.Data Library: Administration and Programming Guide for OS/390 and z/OS v Net.Data Library: Language Environment Interface Reference v Net.Data Library: Messages and Codes v Net.Data Library: Reference DB2 PM for OS/390 v DB2 PM for OS/390 Batch User's Guide, SC27-0857 v DB2 PM for OS/390 Command Reference, SC27-0855 v DB2 PM for OS/390 Data Collector Application Programming Interface Guide, SC27-0861 v DB2 PM for OS/390 General Information, GC27-0852 v DB2 PM for OS/390 Installation and Customization, SC27-0860 v DB2 PM for OS/390 Messages, SC27-0856 v DB2 PM for OS/390 Online Monitor User's Guide, SC27-0858 v DB2 PM for OS/390 Report Reference Volume 1, SC27-0853 v DB2 PM for OS/390 Report Reference Volume 2, SC27-0854 v DB2 PM for OS/390 Using the Workstation Online Monitor, SC27-0859 v DB2 PM for OS/390 Program Directory, GI10-8223 Query Management Facility (QMF ™ ) v Query Management Facility: Developing QMF Applications, SC26-9579 v Query Management Facility: Getting Started with QMF on Windows, SC26-9582 © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 74 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen v Query Management Facility: High Peformance Option User’s Guide for OS/390 and z/OS, SC26-9581 v Query Management Facility: Installing and Managing QMF on OS/390 and z/OS, GC269575 CICS Transaction Server for OS/390 v CICS Application Programming Guide, SC33-1687 v CICS External Interfaces Guide, SC33-1703 v CICS DB2 Guide, SC33-1939 v CICS Resource Definition Guide, SC33-1684 Data Facility Data Set Services v Data Facility Data Set Services: User's Guide and Reference, SC26-4388 Database Design v DB2 Design and Development Guide by Gabrielle Wiorkowski and David Kull, Addison Wesley, ISBN 0-20158-049-7 v Handbook of Relational Database Design by C. Fleming and B. Von Halle, Addison Wesley, ISBN 0-20111-434-8 DB2 Connect ® v DB2 Connect Enterprise Edition for OS/2 and Windows: Quick Beginnings, GC09-2953 v DB2 Connect Enterprise Edition for UNIX: Quick Beginnings, GC09-2952 v DB2 Connect Personal Edition Quick Beginnings, GC09-2967 v DB2 Connect User's Guide, SC09-2954 DB2 Red Books v DB2 UDB Server for OS/390 Version 6 Technical Update, SG24-6108-00 v DB2 for z/OS and OS/390 Version 7: Using the Utilities Suite, SG24-6289 v DB2 UDB Server for OS/390 and z/OS Version 7 Presentation Guide, SG24-6121 v DB2 Java Stored Procedures -- Learning by Example, SG24-5945 v DB2 UDB for OS/390 Version 7 Performance Topics, SG24-5351 v DB2 for OS/390 Capacity Planning, SG24-2244 v DB2 for OS/390 and Continuous Availability, SG24-5486 v Parallel Sysplex Configuration: Cookbook, SG24-2076-00 v DB2 for OS390 Application Design for High Performance, GG24-2233 v Storage Management with DB2 for OS/390, SG24-5462 DB2 Universal Database for UNIX, Windows, OS/2 v DB2 UDB Administration Guide: Planning, SC09-2946 v DB2 UDB Administration Guide: Implementation, SC09-2944 v DB2 UDB Administration Guide: Performance, SC09-2945 v DB2 UDB Administrative API Reference, SC09-2947 v DB2 UDB Application Building Guide, SC09-2948 v DB2 UDB Application Development Guide, SC09-2949 v DB2 UDB CLI Guide and Reference, SC09-2950 v DB2 UDB SQL Getting Started, SC09-2973 v DB2 UDB SQL Reference Volume 1, SC09-2974 v DB2 UDB SQL Reference Volume 2, SC09-2975 Distributed Relational Database Architecture ™ v Data Stream and OPA Reference, SC31-6806 v IBM SQL Reference, SC26-8416 v Open Group Technical Standard v DRDA Version 2 Vol. 1: Distributed Relational Database Architecture (DRDA) v DRDA Version 2 Vol. 2: Formatted Data Object Content Architecture v DRDA Version 2 Vol. 3: Distributed Data Management Architecture Parallel Sysplex ® Library © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 75 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen v OS/390 Parallel Sysplex Application Migration, GC28-1863 v System/390 Z/OS Sysplex Hardware and Software Migration, GC28-1862 v OS/390 Parallel Sysplex Overview: An Introduction to Data Sharing and Parallelism, GC28-1860 v OS/390 Parallel Sysplex Systems Management, GC28-1861 v OS/390 Parallel Sysplex Test Report, GC28-1963 Storage Management v DFSMS/Z/OS Storage Management Library: Implementing System-Managed Storage, SC26-3123 v MVS/ESA Storage Management Library: Leading a Storage Administration Group, SC263126 v MVS/ESA Storage Management Library: Managing Data, SC26-3124 v MVS/ESA Storage Management Library: Managing Storage Groups, SC26-3125 System/370 ™ and System/390 ® v ESA/370 Principles of Operation, SA22-7200 v ESA/390 Principles of Operation, SA22-7201 v System/390 MVS Sysplex Hardware and Software Migration, GC28-1210 © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 76 von 77 DB2 –Physisches Design DB2 Objekte - Strukturierungsempfehlungen ENDE © S.K.Consulting Services GmbH ++49 (0)162 4468790 www.sk-consulting.de Seite 77 von 77