(*) IBM DB2 for z/OS DB2 Version 9 - Übersicht (DB2_V9_DBAnews.ppt) (*) ist eingetragenes Warenzeichen der IBM International Business Machines Inc. Januar, 2010 1 DB2 Version 9 (DBA) DB2 V9 – neue DBA Funktionalität Index auf Ausdrücke Universal Tablespace (UTS) Clone-tables XML-Tables ( eig. Kapitel ) Änderungen und Verbesserungen an Utilities „autonomic computing“ „security“ ROLE & „trusted context“ Verbesserte DDL Konsistenz Performance Optimization Service Center (OSC) Data Studio Januar, 2010 2 DB2 Version 9 (DBA) DB2 V9 – SQL Erweiterungen INDEX on <expression> CREATE TABLE employee ( id lastname firstname salary bonus INTEGER NOT NULL, VARCHAR(20) NOT NULL, VARCHAR(20) NOT NULL, DEC(15,2) NOT NULL, FLOAT) Folgender Index: CREATE INDEX ( SELECT WHERE upper_empname ON employee UPPER(lastname, 'EN_US'), UPPER(firstname, 'EN_US'), id ) id FROM employee bonus + salary > 100000 ; CREATE INDEX total_compensation ON employee (salary + bonus) Restriktionen: • Jede „key-expression“ muss eine Referenz auf eine Tabellenspalte haben • Alle Tabellenreferenzen müsse unqualifiziert angegeben sein • Referenzierte Spalten können nicht vom Typ LOB, XML, DECFLOAT sein. • Referenzierte Spalten können keine FIELDPROCs oder ein SECURITY LABEL enthalten. • Eine „Key-expression“ darf folgendes NICHT enthalten: „subquery“, „aggregate function“, eine „not deterministic function“, eine Funktion mit einer externen Aktion, eine „user-defined function“, eine Referenz auf eine Sequenz, eine „host variable“, einen „parameter marker“ ein Spezialtregister, einen „CASE“-Ausdruck…. usw. Januar, 2010 3 DB2 Version 9 (DBA) DB2 V9 – Universal Tablespace “Simple table spaces” können nicht mehr erzeugt werden Der “default table space” ist nun der “segmented” TS UTS ist eine Hybride zwischen „partitioned“ und „segmented“ Tablespace • • • • • Inkompatibel mit MEMBER CLUSTER Verbessertes „space management“ Unterstützung von Massen-Deletes / TRUNCATE Immer noch EINE Tabelle pro Tablespace Kann “Range Based partitioning (as before: PBR)” oder “Partitioned By Growth (PBG)” unterstützen DROP / CREATE ist erforderlich, um bestehende “page sets” auf UTS zu migrieren Typ-1: „Partitioned-by-growth“ − immer UTS (PBG) • CREATE TABLESPACE MAXPARTITIONS integer • CREATE TABLE PARTITIONED BY SIZE EVERY integer G • Bei einem „Single Table Tablespace“ und Universal Tablespace (UTS) möglich (max. 128 TB) „default segsize“ = 4, max. Grösse für die einzelne Partition = 4GB und die max. Anzahl Partitions = 256 ; dies begrenzt die „default size“ einer Tabelle auf 1 TB Typ-2: „Partitioned-by-range“ (PBR) • „Mass Delete“ oder Truncate Table, z.B. Lösung für das “Rotate Partition“ Problem CREATE TABLESPACE SEGSIZE integer NUMPARTS integer Januar, 2010 4 DB2 Version 9 (DBA) DB2 V9 – Universal Tablespace Januar, 2010 5 DB2 Version 9 (DBA) DB2 V9 – Universal Tablespace (Beispiele) 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 ) ) CREATE LARGE TABLESPACE suts001 IN dbuts001 MAXPARTITIONS 2 SEGSIZE 16 … CREATE TABLE tuts001 … PBR PBG Restriktionen für „universal tablespace“ • nur EINE einzige Tabelle - Drop ist nicht erlaubt! • es gibt keinen „migration path“ - Drop und „recreate“ erforderlich • KEIN „Member Cluster“ • Reduzieren der “#parts” ist nicht möglich – speziell: Maxpartitions Januar, 2010 6 DB2 Version 9 (DBA) DB2 V9 – CLONE TABLE Annähernd alle Utilities sind “online” nutzbar, nicht aber Load Replace. Alias oder View hilft, um zwischen zwei identischen Tabelle hin-und her zu schalten. Auswirkungen hat ein DROP und “recreate” des ALIAS bzw. des VIEW Entspricht einem ONLINE LOAD REPLACE Kopie der bestehenden TABLE • • • Alle INDEXES werden geclont TABLE und INDEX Daten werden nicht bewegt Die Datasets werden getauscht (wie im Fastswitch) Nur für Single Table Tablespace (muss ein UTS sein) Keine RI, AFTER TRIGGER und MQTs Utilities (ausser RUNSTATS) können gegen den CLONE laufen Januar, 2010 7 DB2 Version 9 (DBA) DB2 V9 – CLONE TABLE DDL: Alter Table bbb Add Clone ccc • • • • • • • • • • • Generiert einen neuen Eintrag in SYSTABLES mit Typ „C“ Die Spaltennamen bleiben identisch Add Column ist nicht mehr möglich (Alter statement) Indexes, LOBs, XMLs sind identisch CREATE eines neuen Index ist erlaubt Es existieren dieselben “check constraints“ ADD / DROP “constraint” ist nicht mehr möglich (Alter statement) Identische “Before triggers“ CREATE neuer „Before Trigger” ist erlaubt KEIN “cloning“ für Views : kann über bbb and ccc definiert werden Identity: gleiche Definition für “Base” und “Clone” Authorization: Kann unterschiedlich für bbb and ccc sein Nur Ein Eintrag in der Tabelle SYSTABLESPACE hlq.DSNDBC.database.tsp.I0002.A001 Neue Spalte „Instance”: Inhalt 1oder 2 NEUE DDL • • • • • Januar, 2010 EXCHANGE: Schaltet zwischen „Base“ und „Clone“ Table um ist in der SYSCOPY registriert: Ictype=A(lter) und Stype=E(xchange) Recover vor den letzten Exchange ist nicht möglich Alter Table bbb Drop Clone: Drop Table ccc ist nnicht erlaubt Alter Tablespace / Index / Table: ist nicht mehr erlaubt 8 DB2 Version 9 (DBA) DB2 V9 – CLONE TABLE Utilities / Commands • TABLE ist syntaktisch erlaubt: entweder „Base“ oder „Clone“; z.B. LOAD REPLACE INTO ccc • TABLE ist syntaktisch NICHT erlaubt: neues Schlüsselwort CLONE bei RECOVER database.tsp CLONE bzw. START/STOP command ... CLONE • RUNSTATS und “Modify Statistics” ist eine Ausnahme: Annahme: Statistiken sind gleich für “Base” und “Clone” Utility ist nicht möglich auf der „Clone“ table (DSNU1457I) • „Base“ und „Clone“ können niemals gemeinsam in EINEM “control statement“ angegeben werden Restriktionen: Sqlcode -148 • “Base table” muss sich in einem Universal Tablespace befinden • Pagesets müssen “DB2 managed” sein • die “Base table” kann keine Catalog Table, MQT oder in ein RI-Konstrukt involvierte Tabelle sein Januar, 2010 9 DB2 Version 9 (DBA) DB2 V9 – DB2 Utility Verbesserungen CPU Reduzierung in LOAD und REORG Parallel REORG bei Partitioned Tablespaces • UNLOAD und LOAD der einzelnen Partitions war vorher seriell • Laufzeit und CPU Verbesserungen LOB File Reference Unterstützung - UNLOAD und LOAD TEMPLATE Switching • z.B. Schreiben von Image Copy auf TAPE oder DASD je nach Grösse ONLINE CHECK DATA - shadow ONLINE CHECK LOB - shadow ONLINE REBUILD INDEX – in place ONLINE REORG ohne BUILD2 Phase - shadow REORG SHRLEVEL REFERENCE für LOB Tablespaces Utilities: CPU Verbesserungen • 10 bis 20% für Image COPY, RECOVER INDEX • 5 bis 30% für LOAD, REORG, REBUILD INDEX • 20 bis 60% für CHECK INDEX • 30% für LOAD PARTITION • 30 bis 40% für RUNSTATS INDEX • 40 bis 50% für REORG INDEX • Bis zu70% für LOAD REPLACE PARTITION mit “dummy input“ Januar, 2010 10 DB2 Version 9 (DBA) DB2 V9 – DB2 Utility Verbesserungen RECOVER RESTOREBEFORE ermöglicht es , eine RBA / LRSN anzugeben, die Db2 veranlasst, kein Image Copy aus SYSCOPY zu verwenden, das eine höhere START_RBA aufweist, als den angegebenen Wert. Das REOVEr Utility wird also einen älteren “full image copy” als Recoverybasis für ein Objekt verwenden und alle folgenden “incremental image copies VOR der angegebenen RBA dazu mischen. Dann werden die Log-Sätze angefügt, um das Objekt auf den aktuellsten Zeitpunkt, oder auch irgendeinen beabsichtigten “point in time” zurückzusetzen. Januar, 2010 11 DB2 Version 9 (DBA) DB2 V9 – Index - Performance Neue Index Grössen • Bufferpool 8K, 16K, 32K • Compression für 8K und 16K möglich • Online ALTER für Bufferpool und Compression Autonomic Index Page Split • Index split passiert wenn 50% der Index Page voll sind • Problem bei sequentiellen INSERTs • Neuer Algorithmus für sequential und random INSERTs - 4K gut für „random“ INSERTs - > 4K gut für sequentielle INSERTs Januar, 2010 12 DB2 Version 9 (DBA) DB2 V9 – Dynamic Index ANDing für Star Joins . . AND AND AND AND AND . ( ( ( ( ( DP.C5 DP.C3 D2.C1 S1.C7 DT.C9 = 0 ) <= 194744 ) = 135 ) BETWEEN 'H' AND 'N' ) BETWEEN 50 AND 60 ) Typischerweise existieren viele Indizes, bestehend aus einer einzelnen Spalte, die möglichst jede Kombination von Filterprädikaten unterstützen sollen. Das „Filtering” kommt von mehreren “dimensions“ Wenig abhängig von perfekten Statistiken!! Januar, 2010 13 DB2 Version 9 (DBA) DB2 V9 – Dynamic Index ANDing Filtering dimensions accessed in parallel Join each dimension table with fact table through index independently Build RID lists As filtering efficiency might not be known until runtime, the runtime optimizer may terminate parallel stream(s) that happen to provide poor filtering. Januar, 2010 Perform RID sort and RID merge (ANDing) of the RID lists Final RID list used to retrieve data from fact table and join back to dimensions 14 DB2 Version 9 (DBA) DB2 V9 – LOB - Performance SHRLEVEL REFERENCE REORG LOB • Freier Platz kann wieder gebraucht werden Eliminierung von LOB locks Neue Technik um LOBs zu lesen • • • FETCH WITH CONTINUE FETCH CURRENT CONTINUE Für BLOBs, CLOBs, DBCLOBs und XML Network Flow Optimierung durch Progressive Locator Online Check LOB UNLOAD/LOAD LOBs > 32K Januar, 2010 15 DB2 Version 9 (DBA) DB2 V9 – LOB - Performance Redesign des LOB Locking Algorithmus V8: - S-LOB Lock temporär für „space search” während der LOB Allokation - bei LOB Deallokation bis zum COMMIT - bei LOB “read” bis zum COMMIT – sogar bei UR Readers! - X-LOB Lock für LOB Allokation bis zum COMMIT V9: - No LOB Locks * für „space search” während der LOB Deallokation * für non-UR Readers (abhängig vom “base row locking”) - S-LOB Lock * bei UR Readers, um festzustellen, ob das LOB vollständig ist (kurz) - X-LOB Lock temporär bei LOB Allokation - Freigabe unmittelbar nachdem die Allokation vollständig ist - “Lock escalation” kann nicht mehr erfolgen… - Neues “locking protocol-3” in NFM erforderlich Januar, 2010 16 DB2 Version 9 (DBA) DB2 V9 – RLF Verbesserungen • DB2 ermöglicht die Beschränkung von Ressourcen für “dynamic SQL” über neue Kriterien • Middleware Server diese Informationen nutzen • CLI/JDBC Client Informationen können über API Einstellungen prüfen: Userid, Workstation und Applikationsname. • Neue RLF Spalten RLFEUID – User-id RLFEUAN – Applisationsname RLFEUWN – Workstation Name RLFIP – Requesters IP Addresse RLFFUNC – kontrolliert den “reactive” bzw. Den “predictive” Governor Beispiele von Query-Limits Januar, 2010 17 DB2 Version 9 (DBA) DB2 V9 – REOPT Verbesserungen V8 REOPT BIND/REBIND parameter Dynamic SQL: NONE, ONCE und ALWAYS Static SQL: NONE, ALWAYS V9 REOPT Verbesserungen Automatische Reoptimierung, wenn sich die Filter der Prädikate dramatisch ändern für “cached dynamic SQL” mit Parameter Markers Reoptimiierung am Anfang und Überwachung der “runtime” Werte für Parameter Markers Neuer REOPT Parameter: AUTO zPARM: REOPTEXT=YES (default = NO) Januar, 2010 18 DB2 Version 9 (DBA) DB2 V9 – Query PLAN Stability Functional Overview • Was steht im Katalog? SYSPACKAGE reflektiert das „current copy“ SYSPACKDEP reflektiert dependencies of all copies der Rest des Katalogs (SYSPKSYSTEM ...) reflektiert die Metadaten aller Kopien • SPT01 erfordert ein Mehrfaches an Speicher es gibt ein APAR zum Komprimieren der SPT01 • Invalidierung und Auto Bind sind erforderlich jede Kopie wird für sich auf INVALID gesetzt Keine Unterstützung für Trigger und “stored procedure” Packages bis jetzt –SPÄTER… Keine Unterstützung für DBRMs die direkt in einem PLAN gebunden sind Query Plan Stability – PLANMGMT = BASIC • Enthält bis zu 2 Kopien eines Package „Current“ und „current -1“(„previous“) • Bei jedem REBIND Wird die “previous copy” verworfen die “Current copy” wird zur “previous copy” Das neue BIND-Ergebnis wird zum “current copy” Kann dazu führen, dass Packages von alten Releases endgültig gelöscht werden • REBIND ... SWITCH (PREVIOUS) schaltet zwischen “current” und “previous copy” hin und her bietet eine Möglichkeit, um ein “fallback” auf die letzte Kopie durchzuführen Januar, 2010 19 DB2 Version 9 (DBA) DB2 V9 – Query PLAN Stability Query Plan Stability PLANMGMT=EXTENDED • enthält bis zu 3 Kopien eines Package „Current“, „Previous“ und „Original“ • Bei jedem REBIND Wird die “previous copy” verworfen Gibt es keine “Originalkopie”, so wird die “current copy” zur Originalkopie die “Current copy” wird zur “previous copy” Das neue BIND-Ergebnis wird zum “current copy” • Die “Original Copy” ist die Kopie, die von Anfang an existiert einmal gespeichert, niemals überschrieben kann auch ein V7/V8 Package sein • REBIND ... SWITCH (PREVIOUS) schaltet zwischen “current” und “previous copy” hin und her • REBIND ... SWITCH (ORIGINAL) “Current copy” wird zur “previous” und “original copy” wird zur “current” KOPIE bietet eine Möglichkeit, um ein “fallback” auf die älteste Kopie durchzuführen Januar, 2010 20 DB2 Version 9 (DBA) DB2 V9 – INSERT Performance CREATE TABLE ... APPEND YES INSERT am Ende der Tabelle DB2 ignoriert die clustering Sequenz - Bei SQL INSERT und ONLINE LOAD Table kann schnell wachsen - FREESPACE und PCTFREE werden nicht beachtet Wenn die „clustering sequenz“ nicht benötigt wird - Clustering kann über REORG wieder erreicht werden Für kritischen Workload mit hohen INSERT Raten DB2 V9 – VARCHAR - Performance Reordered Row Format (RRF) vs Basic Row Format (BRF) zur direkten Adressierung (REORG) CREATE TABLE tbl ( c1 , c2 , c3 , c4 integer NOT NULL Varchar(120) NOT NULL char ( 10 ) NOT NULL varchar (60 ) C1 C2 C3 C4 8000000A 0006 WILSON ANDREW 0008 SAN JOSE C1 C3 O2 O4 C2 C4 8000000A ANDREW 12 18 WILSON SAN JOSE Januar, 2010 Basic row Format 2 byte Längenfeld „reordered“ row Format Offset auf C2 und C4 21 DB2 Version 9 (DBA) DB2 V9 – Sicherheit Roles Network Trusted Contexts Verbessertes „auditing“ Data Encryption Secure Socket Layer(C/S) Januar, 2010 22 DB2 Version 9 (DBA) DB2 V9 – Database ROLEs ROLE ist eine “virtuelle authid” • Zugeordnet via TRUSTED CONTEXT • Ermöglicht zusätzliche Rechte in einem “trusted environment” • Benutzung mit der bestehenden primary AUTHID Januar, 2010 CREATE ROLE PROD_DBA; GRANT DBADM … TO PROD_DBA; CREATE TRUSTED CONTEXT DBA1 … DEFAULT ROLE PROD_DBA OWNER(ROLE); 23 DB2 Version 9 (DBA) DB2 V9 – DDL Erweiterungen RENAME <column> ALTER TABLE tb1 RENAME COLUMN old_column_name TO new_column_name Überlegungen: Plan/Package Invalidation Restriktionen: • Catalog Table • Spalten, die in einem View, in einem Index on expression, in einem check constraint liegen • Field procedure auf der Spalte; valid/edit procedure auf der Tabelle • Tabelle mit „trigger definition“ • MQT RENAME <index> ALTER TABLE tb1 RENAME INDEX old_index_name TO new_index_name • • • • • • Januar, 2010 Der Qualifier wird vom ursprünglichen Index abgeleitet, die OBID bliebt erhalten Überlegungen: Plan/Package/DSC Invalidation und die Plan Table Inhalte passen nicht mehr Restriktionen: Keine Catalog Indexes Keine DGTT Indexes keine Index on expression 24 DB2 Version 9 (DBA) DB2 V9 – DDL Erweiterungen Defaults und weitere Datentyp-Änderungen ALTER TABLE tb1 ALTER c1 SET / DROP DEFAULT NULL, USER, Constant, SESSION_USER ... Neuer default: SESSION_USER ALTER TABLE tb1 ALTER c1 SET DATATYPE LONG VARCHAR to VARCHAR Neuer Spezialregister Wert, wenn SQL Daten ändert oder LOAD erfolgt Ändern eines Schema über CATMAINT UPDATE SCHEMA SWITCH(old_schema_name, new_schema_name) Ändert Creator, Owner und das Schema der Datenbankobjekte, Pläne und Packages Restriktion: Views, MQT, SQL Funktionen, Triggers, “check constraints” OWNER FROM (owner_name) TO ROLE Ändert die “ownership “ von Objekten von einem User aufe eine ROLE Januar, 2010 25 DB2 Version 9 (DBA) DB2 V9 – „Autonomic Computing“ Bufferpool Management durch WLM Recovery einzelner Objekte von Plattensicherungen Änderung des Early Code ohne IPL BACKUP / RESTORE von Band RECOVER auf Konsistenz Punkt MODIFY RECOVERY Automatische Definition von Datenbank und Tablespace Automatischer Index Page Split Schnellerer und automatisierter DB2 Restart Automatische Suche des passenden Checkpoint Januar, 2010 26 DB2 Version 9 (DBA) DB2 V9 – Performance • CM • Januar, 2010 ohne Zusatzaufwand: Utility CPU Reduktion Logging Verbesserungen Verbesserten „index page split“ Grössere prefetch, write & preformat Einheiten LOB Performance DDF VSCR Optimization Service Center, Opt. Expert, & Data Studio Geänderter „online REORG“ Verbesserter RUNSTATS Optimization Verbesserungen, EDMPOOL VSCR Mehr parallele Nutzung der zIIP • NFM LOB lock Vermeidung „Reordered row format“ Index: „grössere Pages“, Kompression und index on expression I/O wait time tuning Buffer pool Tuning Kompression (Daten und Index) Synchroner „read prefetch“ Tuning der I/O Konfiguration o Sicherstellen von genug I/O Ressourcen o Schnellere Geräte, wie z.B. DS8000 wo erforderlich o Parallel Access Volume (PAV) gegen I/O „contentions“ mit hoher IOSQ Zeit in RMF o „I/O striping“ 27 DB2 Version 9 (DBA) DB2 V9 – Performance • Database Design Tuning Index Änderungen: eine ganze Reihe neuer Optionen o Nutzungsmöglichkeiten des Index CLUSTER, PARTITIONed usw. o Clustering o Kompression o „Index on expression“, XML, … Universal Tablespace • Januar, 2010 Indexverbesserungen Variable Länge vn „index keys“ Index-only Zugriff für VARCHAR Daten Maximum “index key” 2000 Bytes Predikate mit nicht gleichen Typen sind “indexable” (CHAR(8) = CHAR(4), INT = DEC…) Unterstützung von Datentypen, die nicht in Programmiersprachen wie JAVA, C++, C# unterstützt werden… Backward Index Scan Partitioning separat vom „clustering“ Data-partitioned secondary indexes (DPSI) Create index online während eines SELECT / INSERT Hinzufügen von Spalten zu einem Index Definieren von RANDOM “index keys” zum Vermeiden von “hot spots” mit mehreren Prozessen, die “sequential keys” einfügen 28 DB2 Version 9 (DBA) DB2 V9 – Performance • Unterschiede zwischen Daten- und Indexkomprimierung Die „Index compression“: DSN1COMP Januar, 2010 29 DB2 Version 9 (DBA) DB2 V9 – „Optimization Center“ Januar, 2010 30