ibm db2 for z/os - s.k. consulting · 1 januar 2013 db2 version 10 kapitel 10: „performance“...

29
1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM IBM DB2 for z/OS DB2 for z/OS (*) (*) ist eingetragenes Warenzeichen der IBM International Business Machines Inc.

Upload: others

Post on 11-Oct-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

1 Januar 2013

DB2 Version 10

Kapitel 10: „Performance“

(10_DB2V10_performance.pptx)

IBMIBM DB2 for z/OSDB2 for z/OS

(*)

(*) ist eingetragenes Warenzeichen der IBM International Business Machines Inc.

Page 2: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

2 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Inhalte:

(10) Performance und Automation DBA, Anwendungsentwickler • Verbesserte Optimierungstechniken

• Verbesserungen am „Dynamic prefetch“

• „Dynamic statement cache“ Verbesserungen

• INSERT Performance Verbesserungen

• „Hash access“

• Zusätzliche “non-key” Spalten in einem “unique” Index

• Parallelismus Verbesserungen

• Bufferpool Verbesserungen

• „Work file“ Verbesserungen

• Sonstige Verbesserungen

Performance Verbesserungen für lokale Java und ODBC Applikationen

Logging Verbesserungen

LOB Verbesserungen

DB2 Support für “solid state drive”

Erweiterter Support für SQL/PL

„Referential integrity“ checking Verbesserungen

„Preemptable backout“

DDF Verbesserungen

Eliminierung von “mass delete locks” für UTS

Unterstützung des z/OS „enqueue management“

Online performance buffers in 64-bit common

„Enhanced instrumentation“

Page 3: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

3 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Performance-Erwartungen

• Verbesserungen der „access paths“ zur Laufzeit

• Index I/O Parallelismus und generelle „sequential insert“ Verbesserungen

• Verbesserte “dynamic prefetch” und “list prefetch” Verfahren für Indexes

• Mehr “query parallelism” und deshalb mehr Verlagerung von Queries und Teilen davon in die zIIP

• Verbesserungen des “buffer pool system paging”

• DDF Optimierung und RELEASE(DEALLOCATE) Nutzung

• Logging Verbesserungen und damit Reduzieren von I/Os und “buffer fixing”

• Synergien mit der neuen Hardware

• Ausnutzen der neuen „hardware instructions“ (z10, z196)

Historisches Ziel unter 5% Performance Rückschritt

Ziel 5% -10% initiale Performance Verbesserung

Einige Transaktionen reduzieren die CPU Zeit um 10% - 20% Durchschn. % C P U Verbesserung von

Version zu Version

Page 4: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

4 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Verbesserte Optimierungstechniken – „safe optimization“

Eine rein kostenbasierte Optimierung wird nicht immer den optimalen “access plan” generieren.

Dafür gibt es eine Menge Gründe; z.B.:

• Falsche Annahmen bei der Query Optimierung, wie die “default” Selektivität bei einem RANGE Prädikat

• Ein unbekanntes „runtime environment“, wie z.B.: konkurrierende RID Pool Nutzung etc.

Der DB2 Optimizer kann manchmal das “filtering” eines Prädikat überbewerten. Das passiert z.B.: wenn

Literalwerte unbekannt sind; z.B.: wenn das Prädikat ein “range predicate” ist, wenn die datenverteilung “non uniform”

ist oder wenn Hostvariable bzw. “Parameter Markers” verwendet werden.

Der folgende Wert kann 0-100% einer Tabelle betreffen – abhängig vom vorgesehenen Literalwert:

WHERE BIRTHDATE < ?

Im folgenden Beispiel ist der Wert zu 99% “Y” und zu 1% “N” abhängig vom zur “run time“ eingesetzten Wert:

WHERE STATUS = ?

VOR DB2 10 war die empfohlene Lösung der Einsatz des REOPT BIND Parameters, um so DB2 die Möglichkeit zu

geben, die “access paths” auf der Basis der aktuellen Hostvariablen-Werte neu zu evaluieren. Dennoch ist diese Lösung

nicht in allen Fällen eine gute Lösung, da der “overhead” bei der “reoptimization” jeder SQL Ausführung zutrifft.

DB2 10 quantifiziert diese Kostenunsicherheit und bezieht sie in das “cost-based optimizing” während der Festlegung

des “access path” mit ein, besonders bei der Auswahl eines Index. Haben also zwei IX ähnliche (geschätzte) Kosten-

werte, so wird der DB2 Optimierungsvorgang die Unsicherheit von “matching” und “screening” Prädikaten bei der

Wahl des effizientesten IX berücksichtigen. DB2 wird den IX mit höherer (sicherer) Kostenschätzung einem anderen

mit weniger Kostensicherheit vorziehen.

Diese “safer optimization” Funktion steht bereits unter DB2 10 CM zur Verfügung, wenn BIND/REBIND erfolgt ist.

Page 5: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

5 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Verbesserte Optimierungstechniken und „RID Pool“ - Verbesserungen

DB2 nutzt den RID Pool für eine Reihe von SQL “access plans”, inklusive “list prefetch” und “hybrid join”. Wenn

aber der RID Pool voll wird, so sinkt die SQL Performance dramatisch. Der RID Zugriff geht auf einen TS Scan zu-

rück. Alle Arbeit, die bis zu diesem Zeitpunkt geleistet wurde, ist umsonst auch das “index filtering”.

Um diese Fehler abzumildern führt DB2 eine Prüfung der RID Pool Schwellwerte zur BIND Zeit durch. Aber diese

Typen von “RID pool failures” können trotzdem nicht komplett vermieden werden.

Beispiel: DB2 trifft zur BIND-Zeit keine Auswahl eines SQL Zugriffspfads, der “list prefetch”-Verarbeitung enthält,

wenn es schätzt, dass die Query mehr als 25% der “rows” einer Tabelle betrifft. Schätzt der Optimizer allerdings

weniger als 25% “rows” als “matching rows” und wird diese Schätzung schließlich zur “run time” überschritten, so wird

der “list prefetch” abgebrochen. Dieser Schwellwert heisst auch TERMINATED - EXCEEDED RDS LIMIT.

RUNSTATS und REBIND: Es ist in DB2 10 wie auch in vorherigen Versionen eine gute Vorgehensweise RUN-

STATS und REBIND regelmäßig durchzuführen. Das stellt sicher, dass die Statistiken in Plans und Packages aktuell

sind und vermeidet unnötige RID Pool Fehler.

Beispiel: Der RDS “threshold” (25% der “rows” einer Tabelle) wird zur BIND Zeit kalkuliert und in der “skeleton plan

table” bzw. der “skeleton cursor table” gespeichert. Erhöht sich nun die “row”-Zahl der Tabelle signifikant und

RUNSTATS / REBIND wird nicht angestossen, um diese Änderungen zu reflektieren, so kann der gespeicherte RDS

“threshold” leicht überschritten werden, auch in Fällen, in denenn weit weniger als 25% der “rows” gelesen werden. In

diesem Fall steuert DB2 9 unnötiger weise einen TS Scan an.

DB2 10 verwaltet den RID Pool besser und ermöglicht einem “access plan” den RID Pool so lange zu nutzen, so lange

er der günstigste Plan ist. Dies lässt den Optimizer die RID List “access plans” öfter auswählen als früher.

Zur Laufzeit erfolgt ein “overflow” der RIDs auf eine “work file” und die Verarbeitung wird mit 32 KB großen

Sätzen fortgesetzt. Jeder Satz hält nun die RIDs aus einem 32 KB RID Block.

Page 6: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

6 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Verbesserte Optimierungstechniken – „Dynamic prefetch“ - Verbesserungen

Mit der DB2 Version 2.3 wurde der “dynamic prefetch” eingeführt. DB2 9 enthielt folgende

Änderungen zum Prefetch:

• “Sequential prefetch” wird nur für TS Scans eingeschaltet

• Beim SQL Zugriff reicht das Maximum für einen Prefetch von 128 KB (32 Pages) bei DB2 V8

bis 256 KB (64 Pages) bei DB2 9 bei “sequential prefetch” und LOB-bezogenem “list prefetch”

für “table spaces” und “indexes”, die auf 4 KB Bufferpools zugewiesen wurden. In DB2 10

beträgt die maximale “prefetch”-Rate immer noch 32 Pages bei “dynamic prefetch” und

“non-LOB list prefetch“.

• Für Utilities, die auf Objekte in 4 KB Bufferpools zugreifen, wurde die “prefetch quantity”

von 256 KB (64 Pages) bei DB2 V8 auf 512 KB (128 Pages) bei DB2 9 angehoben. Diese

Werte ändern sich für DB2 10 nicht.

DB2 10 verbessert die “prefetch” Verarbeitung dennoch und zwar beim “index access”:

• Index Scans können “list prefetch” nutzen

• „Row level sequential detection“ (bisher auf Page – Ebene)

• Progressive „prefetch“ Mengen

Diese Neuerungen sind bereits in DB2 10 CM ohne REBIND oder BIND verfügbar.

Page 7: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

7 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Verbesserte Optimierungstechniken – „Dynamic statement cache “ - Verbesserungen

VOR DB2 V5 haben sich viele Applikationsentwickler geweigert, “dynamic SQL” zu nutzen, da jeder

Statement PREPARE Verarbeitung verursachte – ähnlich einem BIND – um den DB2 “access path”

zu wählen. Die Einführung des “dynamic statement cache” bedeutete, dass beim ersten Ausführen

des SQL der “access path” berechnet wurde und jedes weitere Mal, wenn dasselbe SQL Statement

ausgeführt werden sollte, der PREPARE übergangen werden konnte, da der “access path” wieder-

verwendet werden konnte. Dies machte “dynamic SQL “ ähnlich effizient, wie “static SQL”. Gut für

alle Arten von “Customer Relationship Management”(CRM) Applikationen.

In DB2 10 können noch mehr SQL Statements aus dem Cache wiederverwendet werden und

zwar auch für unterschiedliche User. “Dynamic” SQL Statements können nun mit anderen bereits

“cached dynamic SQL Statements” gemeinsam verwendet werden, wenn der einzige Unterschied der

Statements in den “literal values” besteht.

Im “dynamic statement cache” werden Literale mit einem “ampersand” (&) ersetzt, das sich dann

ähnlich einem Parameter Marker verhält. Beispiel:

SELECT BALANCE FROM ACCOUNT WHERE ACCOUNT_NUMBER = 123456

Wird im SQL Cache ersetzt durch:

SELECT BALANCE FROM ACCOUNT WHERE ACCOUNT_NUMBER = &

Wird ein Gemisch aus Literal-Konstanten und Parameter Markers genutzt, so wird DB2 keine Literal

Translation durchführen.

Page 8: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

8 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Verbesserte Optimierungstechniken – „Dynamic statement cache “ - Verbesserungen

Folgende Methoden schalten diese Funktion ein:

• Auf dem Client sollte das PREPARE Statement die neue Klausel ATTRIBUTES enthalten, die

CONCENTRATE STATEMENTS WITH LITERALS spezifiziert

• Auf dem Client sollte der JCC “Driver” das Schlüsselwort “enableliteralReplacement=‘YES’”

enthalten. Es spezifiziert die “data source” bzw. die “connection property”.

• Die Option LITERALREPLACEMENT in der ODBC Initialisierungsdatei in z/OS sollte

gesetzt sein. Es ermöglicht allen SQL, die über ODBC ins DB2 kommen, das das “literal

replacement” eingeschaltet ist.

Die “lookup” Sequenz im “dynamic statement cache” ist dann wie folgt:

• Original SQL mit Literalen werden im Cache erkannt, was dem Verhalten von “pre-DB2 10”

Releases entspricht.

• Wird es nicht gefunden, so werden Literale ersetzt und das neue SQL im Cache erkannt. DB2

kann nur eine Übereinstimmung mit einem SQL feststellen, das mit demselben Attribut gespeichert

ist. So wird ein SQL im Cache mit “parameter markers” nicht als gleich erkannt.

• Wenn nicht gefunden wird ein neues SQL “prepared” und im Cache gespeichert.

Page 9: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

9 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Verbesserte Optimierungstechniken – „Dynamic statement cache “ - Verbesserungen

Hier ein Beispiel, wie man die neue Klausel ATTRIBUTES im SELECT nutzen kann:

EXEC SQL DECLARE C1 CURSOR FOR DYNSQL_WITH_LITERAL;

DYNSQL_SELECT = ‘SELECT X, Y, Z FROM TABLE1 WHERE X < 9’;

attrstring = ‘CONCENTRATE STATEMENTS WITH LITERALS’;

EXEC SQL PREPARE DYNSQL_WITH_LITERAL ATTRIBUTES :attrstring FROM :DYNSQL_SELECT;

EXEC SQL OPEN C1;

Hier ein Beispiel, wie man die neue Klausel ATTRIBUTES im INSERT nutzt:

DYNSQL_INSERT = ‘INSERT INTO TABLE1 (X, Y, Z) VALUES (1, 2, 3)’;

attrstring = ‘CONCENTRATE STATEME NTS WITH LITERALS’;

EXEC SQL PREPARE DYNSQL_WITH_LITERAL ATTRIBUTES :attrstring FROM :DYNSQL_INSERT;

EXEC SQL EXECUTE SYNSQL_WITH_LITERAL;

Beim Einsatz von Parameter Markers kann man von einer höheren “dynamic statement cache hit ratio”

ausgehen. Mit Literalen kann man einen besseren Zugriffspfad erhalten. Diese Methode enthält einen

Zielkonflikt, abhängig davon, welche Performance von einem “dynamic SQL call “ erwartet wird. Mit

CONCENTRATE STATEMENTS WITH LITERALS kann man auch eine schlechtere “execution-

only” Performance auslösen. Also ist der größte Performance-Gewinn für kleine “SQL Statements” mit

Literalen zu erwarten, die jetzt einen “cache” Treffer haben, vorher aber keinen hatten.

Page 10: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

10 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Verbesserte Optimierungstechniken – „INSERT Performance“ - Verbesserungen

Applikationen mit hoher INSERT Aktivität, können eine Reihe von Anforderungen aufstellen, die

Performace, Skalierbarkeit unf Verfühbarkeit beeinträchtigen. DB2 muss diese Hindernisse

beseitigen, indem es die schnelleren Host- und Speicher-Server beansprucht.

DB2 10 verbessert die Performance für Applikationen mit hohen INSERT Raten durch::

• I/O Parallelität bei „index updates“

• Sequentielle INSERTs in der Mitte eines “clustering index”

Page 11: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

11 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Parallelität beim Index Update

• Für Tabellen mit vielen Indexes

• V10 Parallel Index Update

– I/O parallelism für „non-clustered“ Indexes • > 2 Indexes (ohne clustered Index) pro Tabelle

– zPARM: INDEX_IO_PARALLELISM = YES (default)

– Reduzierte Index I/O „wait time“

– Laufzeitvorteil

• Abhängig von Bufferpool „hit ratio“

• Monitoring über IFCID 358 zu I/O Parallelverarbeitung

• bis zu 50% elapsed time Verbesserung gemessen (6 Indexes)

– UTS & klassische „partitioned tablespaces“

Beim INSERT mit DB2 9 muss ein korrespondierender INSERT in alle definierten IX dieser Tabelle

erfolgen. Alle diese INSERTs in die IX werden seriell durchgeführt – immer einer zu einer Zeit.

DB2 10 ermöglicht es, in mehreren IX einer Tabelle parallel zu einzufügen. “Index insert I/O

Parallelismus“ steuert konkurrierende I/O Anforderungen auf unterschiedliche IX im Bufferpool

parallel, mit dem Ziel, die synchrone I/O “wait time” für unterschiedliche IX derselben Tabelle zu

überlagern. Dies kann zu signifikanten Verbesserungen von I/O orientierten INSERT-Lasten und zur

Reduktion von “elapsed times” führen – besonders bei LOAD RESUME YES SHRLEVEL CHANGE

Utility Läufen. Die Utility Funktion ähnelt hier einem MASS INSERT.

Page 12: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

12 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Mehr Flexibilität bei der Datenkomprimierung

• Tablespace mit COMPRESS YES

• Datenkomprimierung benötigt ein Dictionary

• Heute in V9 – Dictionary Erstellung

• LOAD, REORG

• LOAD COPYDICTIONARY 1 ... PART 3

– Problem: keine regelmäßige Nutzung von REORG/LOAD

– Anforderung: Anwendung fügt Daten hinzu!

• V10 Neuerung bei Dictionary Erstellung – MERGE

– INSERT

– LOAD .... SHRLEVEL CHANGE

– „Internal threshold“

– Asynchroner Dictionary Aufbau

• Inserts sind unkomprimiert

Page 13: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

13 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Index INCLUDE Column

• Optimierung von Abfragen auf die KFZ Tabelle mit Vertrags-/Kundennr., Kasko

• In V9

CREATE UNIQUE INDEX I1 ON KFZ (VERTRAGSNR);

CREATE INDEX I2 ON KFZ (VERTRAGSNR, KUNDENNR, KASKO);

ALTER INDEX I1 ADD INCLUDE COLUMN (KUNDENNR); ...

DROP INDEX I2;

Alternativ

Index I1 geht in „rebuild-pending state“

CREATE UNIQUE INDEX I1 ON KFZ (VERTRAGSNR) INCLUDE (KUNDENNR, KASKO)

Optimierung in V10

Page 14: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

14 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

„Index probing“

Eine der Herausforderungen der Querytunings ist, dass einige SQL Statements auf Statistiken extrem

sensitiv reagieren und so zum Grund für die Veränderung von “access paths” werden, wenn Packages

neu “gebunden” werden. Der DB2 Optimizer überschätzt manchmal die Filterung eines Prädikates und

das z.B. wenn ein Literalwert unbekannt ist, wie bei “range predicates”, wenn die Datenverteilung nicht

gleichverteilt ist oder “host variables” bzw. “parameter markers” genutzt werden.

VOR DB2 10 war eine bevorzugte Lösung die Option REOPT BIND zu nutzen und so DB2 zu veran-

lassen, die “access paths” auf der Basis der aktuellen Hostvariablenwerte neu zu evaluieren. Aber:

Diese Lösung ist nicht für jeden Fall wünschenswert, da der “overhead” der “re-optimization” bei jeder

Ausführung des SQL erfolgen muss.

In DB2 10 kann der Optimizer die Real Time Statistics (RTS) Daten nutzen und die IX “non leaf

pages” untersuchen, um so bessere Schätzungen zur Filterung bei “matching predicates” zu erzielen.

DB2 10 nutzt das sogen. “index probing” in folgenden Situationen:

wenn das RUNSTATS Utility anzeigt, dass die Tabelle leer ist

wenn das RUNSTATS Utility anzeigt, dass es leere qualifizierende Partitions gibt

wenn die Katalogstatistiken “default” Werte aufweisen

Wenn ein “matching predicate” geschätzt 0 “rows” qualifiziert

Diese neue Query Optimierungstechnologie auch als “index probing” bezeichnet, wird nur für “ma-

tching index predicates” mit fix kodierten Literalen oder wenn REOPT() angegeben ist, angewendet.

Page 15: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

15 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

„Index probing“

“Index probing” wird auch bei VOLATILE “tables” und Tabellen, die kleiner sind, als die Page-Anzahl,

die im Systemparameter NPGTHRSH angegeben ist. Der Grund: existierende RUNSTATS Werte

sind für diese Tabellen per definitione unrealistisch.

Explain Resultate für “index probing” (“non VOLATILE”)

Man beachte, dass DB2 10 für 11 von13 Queries gut optimiert, während DB2 9 nur für 3 von 13 Queries optimale

Zugriffe finden konnte.

Page 16: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

16 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Index-Zugriffe sind nicht immer der effizienteste Weg

47582 Maier

Index auf

PERSONUM

Hash Area (fixe Größe) Overflow Area

SELECT NACHNAME FROM OLTP.PERSONTB WHERE PERSONUM = 47582

Overflow Index

DB2-interner Hash Algorithmus

Page 17: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

17 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Index-Zugriffe sind nicht immer der effizienteste Weg – Kandidaten für „HASHING“

Man beobachte Applikationen und “workload” sorgfältig, bevor man “hashing” einführt. “Hash

organized tables” liefern die “response time”-Werte in speziellen Situationen:

die Tabelle besitzt einen eindeutigen “key”

Es gibt Queries, die Gleichheitsprädikate auf “unique” Werte absetzen, damit nur eine “row”

bzw. “columns” einer “row” aus einem einzigen “index key” zurückgegeben werden

Die meisten Zugriffe auf die Daten sind wirklich “random”

Applikationen mit “range scans” über einen “cluster index” werden bei “hash organized tables”

nicht optimal ablaufen. IFCID199 gibt einen Anhaltspunkt, ob Zugriffe wirlich “random” ablaufen.

Die Größe der Daten in den Tabellen ist relativ stabil bzw. die maximale Grösse der Daten

bekannt. Der Platzbedarf für eine “hash organized table” ist fix festgelegt.

Ist die Grösse bekannt, kann der korrekte HASH SPACE zum Zeitpunkt “ CREATE TABLE”

zugewiesen werden, ohne die “overflow area” zu beanspruchen

Es passen möglichst viele einzelne “rows” in eine einzelne Datenpage. – Enthält eine Page zu

wenige “rows”, wird zusätzlich Platz verbraucht, um die Vorteile einer “hash organization” nutzen

zu können

Die Tabelle enthält möglichst viele “rows” von relativ gleicher Größe

Die Vorteile des “hash access” erhöhen sich linear je höher die “levels of an index” eines

“unique key” angelegt sind. “Hash access” wird signifikant besser, wenn ein IX mit 3 oder mehr

Levels ersetzt werden kann.

Page 18: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

18 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Hashing einrichten per CREATE TABLE Statement

CREATE TABLE OLTP.PERSONTB

(PERSONUM INTEGER NOT NULL,

...)

ORGANIZE BY HASH UNIQUE (PERSONNUM)

HASH SPACE 1M;

• DB2 erstellt automatisch einen Overflow Index (dient ggf. auch zur Sicherstellung der

Uniqueness des Primary Keys)

• HASH SPACE ~ geschätzte Größe der Tabelle

• Bis zu 64 Columns:

– Definiert als NOT NULL

– Summe der Length Attribute höchstens 255

– Keine LOB, DECFLOAT oder XML Columns

Page 19: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

19 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Hashing einrichten per ALTER TABLE Statement

ALTER TABLE OLTP.PERSONTB

ADD ORGANIZE BY HASH UNIQUE (PERSNUM)

HASH SPACE 2G;

• Logische Änderung sofort zur Sicherstellung der Uniqueness

• Physische Reorganisation erst nach REORG:

– Table Space steht auf Advisory REORG Pending (AREOR)

– Overflow Index steht auf REBUILD Pending (PSRBD)

Page 20: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

20 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Hashing Performance

Random Select Performance (mit I/O): “Hash table” vs. “3-level Indexed table”

“Class 2 CPU” Reduktion mit “Hash” in Prozent

Page 21: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

21 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Hashing Performance

Performance eines CREATE einer “hash table”

Load einer großen “hash table”

Page 22: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

22 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Bufferpool Verbesserungen – BP Speicherzuweisungen

Die Verbesserungen am Bufferpool in DB2 10, die bereits im CM verfügbar sind, eröffnen die

Möglichkeit, den Transaktionsdurchsatz zu erhöhen und profitieren von den größeren BP und die

Reduktion der “latch class” 14 und 24 “contention”. Dies wiederum verringert den BP CPU

“overhead” und ,vermeidet “transaktion I/O delays” durch “preloads” von Objekten:

„Buffer storage allocation“

“In-memory table spaces” und Indexes

VOR DB2 10 wurde der Speicher des BP (VPSIZE) zugewiesen, sobald der erste logische “open of a

page set” erfolgte. Dies auch dann, wenn keine Daten eines TS oder IX zugegriffen wurden, die

diesem BP zugeordnet waren. Jetzt wird der BP Speicher “on-demand” allokiert, nämlich, wenn

Daten eingelagert werden. Braucht eine Query dabei nur wenige Datenpages, so wird nur ein kleiner

Teil des BP Speichers zugewiesen.

“logical open” bedeutet, wenn das “page set” entweder physisch OPEN ist (der erste SELECT)

oder “pseudo opened” (beim ersten UPDATE nach einem physischen OPEN für Lesen). Es erfolgt

keine BP “allocation”, da die Zuweisung bereits geschehen ist.

Zusätzlich muss für eine “index-only” Query kein BP für den Tablespace zugewiesen werden. DB2

10 führt keinen “logical open” des TS mher für “index-only” Zugriffe durch.

Bei Bufferpools mit PGFIX=YES Definitionen, fordert DB2 BP mit 1 MB “page frames” an, wenn

solche verfügbar sind – anstatt der bisherigen 4 KB “page frames”.

Page 23: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

23 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Bufferpool Verbesserungen – „in memory tablespaces / indexes“

In der Vergangenheit wurden die Kosten für den physischen OPEN eines “page set” vom ersten SQL,

das das “data set” zugriff, getragen. Diese Kosten hatten natürlich Auswirkungen auf die

Applikationsperformance, typischerweise nach einem DB2 Restart. Ausserdem sind bestimmte

Tabellen kritisch für die Applikationsperformance und sollten “resident” in den Bufferpools sein.

DB2 10 besitzt ein Bufferpool Attribut, das man nutzen kann, um festzulegen, dass alle Objekte in

diesem BP sogen. “in-memory objects” sind. Daten von “in-memory” Objekten werden in den BP

“preloaded”, sobald das Objekt physisch geöffnet wird, ausser das Objekt wird für einen Utility Zugriff

geöffnet. Die Pages bleiben “resident” solange das Objekt offen ist.

Wurde ein “page set” als Teil einer DB2 “restart” Verarbeitung geöffnet, so werden IX und TS nicht mit

“prefetch” in den Bufferpool gestellt.

“Page sets” können immer noch physisch VOR dem ersten SQL Zugriff geöffnet werden, indem man

das Kommando ACCESS DATABASE absetzt. Nun kann man alle Daten in den BP “preloaden”.

Anmerkung: Es ist in DB2 10 wichtig, genügend große Bufferpools zu haben, um alle “in-memory

page sets” speichern zu können. DB2 baut einen “access plan” basierend auf dem minimalen I/O

Aufwand für diese “page sets”. Sind die Bufferpools zu klein, um alle Daten aufnehmen zu können,

kann die Performance beeinflusst werden, da DB2 einen “non-optimal access plan” nutzt, der die “extra

I/Os” nicht erlaubt. Dazu kommt noch, dass, wenn DB2 I/Os machen muss, um eine Page in den BP zu

bringen, dieser I/O synchron abläuft, da der “prefetch” ausgeschaltet ist.

Page 24: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

24 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

„workfile“-Verbesserungen

DB2 10 in NFM unterstützt “partition-by-growth” TS in der “work file database”. “Declared

global tem-porary tables” (DGTTs) bemühen sich um Speicher gegen andere Aktivitäten auf der “work

file data-base”, aber sie können “work file table spaces” nicht zusammensetzen. “PBG work file table

spaces” helfen, diese Applikationen mit SQLCODE -904 (“unavailable resource”) zu minimieren,

indem sie die Möglichkeit schaffen, die maximale Grösse von “work file table spaces” über DSSIZE

und MAXPARTITIONS zu kontrollieren.

Beispiel: Man kann einen “partitioned by growth” TS auf 3 GB begrenzen:

MAXPARTITIONS 3 DSSIZE 1G

Über DB2-”managed segmented table spaces” war diese Funktion nicht verfügbar. Man kann das

Wachstum auf 2 GB oder weniger (mit PRIQTY nK SECQTY 0) limitieren.

Ist der DSNZPARM WFDBSEP NO (“default”), so versucht DB2 ausschliesslich “work file PBG TS”

für DGTT zu verwenden; ist jedoch kein anderer TS vorhanden, so nutzt DB2 diese auch für “work

files”; z.B.: Sorts und CGTTs.

Mit WFDBSEP YES nutzt DB2 für “work files” ausschliesslich “partitioned by growth” TS bei DGTT

und falls kein anderer TS verfügbar ist, erhält die “workfile” Anwendung eine “resource unavailable“.

Bei DGTTs mit großer DSSIZE, kann man größere “work file” TS - d.h.: größer 64 GB - nutzen.

DB2 10 erweitert die Nutztung der “in-memory work files” durch die einfache

Prädikatsevaluation für “work files”. Dies, um die CPU Zeit für Queries, die kleine “work files”

nutzen, zu reduzieren. Diese “in-memory work file” Verbesserung ist in CM verfügbar.

Page 25: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

25 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Sonstige Performance- Verbesserungen

• Performance Verbesserungen für lokale Java und ODBC Applikationen

• Logging Verbesserungen (siehe DBA Kapitel 11)

• LOB Verbesserungen (siehe Anwendungsoptimierung Kapitel 05)

• DB2 Support für “solid state drive”

Ein “solid state drive” (SSD) ist ein Speichergerät, das Daten auf einem “solid-state flash memory” speichert,

anstatt auf traditionellen Plattengeräten. Ein SSD enthält Elektrik, die sie in die Lage versetzt, “hard disk drives”

(HDD) zu emulieren. Die “drives” besitzen keine beweglichen Teile und nutzen “high-speed memory”, so dass

sie schnell und energie-effizient sind.

• Erweiterter Support für SQL/PL(siehe Anwendungsoptimierung Kapitel 05)

• „Referential integrity“ checking Verbesserungen (siehe Anwendungsoptimierung Kapitel 05)

• „Preemptable backout“

In DB2 10 wird der SRB, der die “backout” Operation durchführen soll, in einer “enclave” eingeplant, so dass

er auch vorweg uaf eine höhere Priorität gesetzt werden kann. Das “n-thread n-way” Scenario kann dabei eine

CPU “Bremse” für niedriger priorisierte Tasks darstellen. Das System ist aber immer noch verantwortlich für

Operator Kommandos und höher priorisierte Aufgaben.

• DDF Verbesserungen

Die Applikationsperformance und die Transaktionslast im Netz wird optimiert wenn die SELECT Statements mit

der FETCH 1 ROW ONLY Klausel kodiert sind. DB2 erkennt die Klausel im SELECT Statement FETCH 1

ROW ONLY und kombiniert die API Calls und die “messages”, um so die Anzahl “messages” auf Netz und

System zu minimieren.

Page 26: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

26 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Sonstige Performance- Verbesserungen

• Eliminierung von “mass delete locks” für UTS Der “mass delete lock” erfolgt, um eine “mass delete” Operation mit einem INSERT auf “table level” zu

serialisieren. “Mass delete locks” werden für klassische “partitioned” TS in V8, DB2 9 und DB2 10 eingesetzt.

Der “mass delete” Prozess erhält einen “exclusive mass delete lock”. Dann fordert der INSERT, wenn der User

ein deallokiertes Page –Segment wieder allokieren will, einen “shared mass delete lock” an, damit der “mass

delete”, der das Segment freigegeben hat “committed” werden kann und somit kann der “mass delete” natürlich

nicht mehr ROLLBACKed werden. Der “mass delete lock” wird auch dazu genutzt “uncommitted readers” auf

den IX für “mass delete” zu serialisieren.

DB2 10 vermeidet die Notwendigkeit eines “mass delete lock” auf UTS. Die Serialisierung erfolgt über einen

“mass delete timestamp”, der in der “Header Page” aufgezeichnet wird.

• Unterstützung des z/OS „enqueue management“ DB2 V8 nutzt das “enqueue management” des Workload Manager for z/OS (WLM). Hat eine Transaktion die

Hälfte der Zeit des “lock timeout” Wertes auf einen Lock gewartet, so wird die Priorität des WLM in Bezug auf

die Transaktion, die den Lock hält, erhöht (auf die Priorität des “lock waiters”, wenn letzterer eine höhere

Priorität besitzt). Wenn die “lock holding transaction” fertig ist, so nimmt sie ihre originale “Service Class”

wieder auf. Im Falle, dass mehrere Transaktionen einen Lock gemeinsam halten, wird dieser Vorgang auf alle

diese Transaktionen angewendet.

DB2 10 nutzt das “enqueue management” des IBM Workload Manager for z/OS um die “lock holders” und die

“waiters” effizienter verwalten zu können. DB2 informiert den WLM auch über “threads”, die verzögert werden,

weil sie Schlüsselressourcen wie z. B. “enqueues” und kritische “latches” halten.

Page 27: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

27 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Sonstige Performance- Verbesserungen

• Online Performance Buffers in 64-bit common

31-bit ECSA war eine wichtige und wertvolle Ressource in Versionen VOR DB2 10 und die “member Konso-

lidierung in DB2 10 ist geeignet, das Anwachsen auf Anforderung für 31-bit ECSA weiterzuführen. In DB2 10,

ist IFC ein signifikanter Nutzer der 64-bit Eigenschaften.

DB2 “online performance buffers” wurden in die 64-bit Umgebung verlagert. Die Buffer unterstützen jetzt

maximal 64 MB. Das “keyword” BUFSIZE im -START TRACE Kommando erlauft einem max. Wert von

67108864. Das Minimum und die “default” Größen sind auf 1 MB gesetzt (VORHER: 16 MB und 256 KB) .

• „Enhanced instrumentation“

Die DB2 Ausstattung inkludiert in DB2 10 auch noch folgende Verbesserungen:

Einminütiges “statistics trace” Intervall – ohne Rücksicht auf die Spazifikation im zugehörigen DSNZPARM

Parameter

IFCID 359 für den „index leaf page split“: Neuer IFCID zum Monitoring der “index leaf page splits”.

Separate DB2 “latch” und Transaction Locks in der “Accounting Class 8”: Eine neue Monitor Klasse zum

Überwachen der SQL Statements auf systemweiter Ebene, anstatt auf “thread-level“.

Separate DB2 “latch” und Transaction Locks in der “Accounting Class” 8 : DB2 10 externalisiert zwei Typen

von WAITs in zwei verschiedenen Feldern.

Speicherstatistiken für DIST “address space”: Nun ist der Speicher im DIST “address space” überwachbar

„Accounting“ der zIIP SECP Werte: zAAP auf zIIP und zIIP SECP Werte

“Package accounting” Information mit “rollup” (Zwischenergebnissen)

DRDA “remote location statistics” Detail: Diese MVS Funktion kann zum Komprimieren von DB2 SMF

Sätzen genutzt werden

DRDA “remote location statistics” Detail: Mehr Granularität bei der Überwachung von DDF Lokationen.

Page 28: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

28 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

Sonstige Performance- Verbesserungen

• Verbessertes Monitoring

In typischen Umgebungen wird DB2 on z/OS “remote” von vielen unterschiedlichen Applikationen zugegriffen.

Diese haben unterschiedliche Eigenschaften. Einige sind wichtiger und einige Applikationen bedienen wiederum

mehr User als andere. Die Unterschiede führen zu folgenden Herausforderungen: Zur Kontrolle der Verbindungen

auf Anwendungsebene enthält DB2 9 ein “set” von Kennzahlen: CONDBAT und MAXDBAT kontrollieren z.B.

“connections” und “threads” auf der Ebene “Subsystem”.

“Rücksichtslose” Programme können DB2 9 Subsysteme überschwemmen, alle “connections” einvernahmen und

wichtige “business applications” behindern.

DB2 9 enthält auch Profile zur Identifikation einer Query bzw. eines “set of queries”. Profil-Tabellen enthalten

Informationen darüber, wie DB2 Statements ausführt oder diese überwacht. Profile werden in der Tabelle

SYSIBM.DSN_PROFILE_TABLE abgelegt. Man überwacht so alle Statements, die über ein Profil identifiziert

werden, auf der Basis von “keywords” und “attributes” aus der Tabelle SYSIBM.DSN_PROFILE_ATTRIBUTES.

Diese tabellen werden von Werkzeugen, wie dem Optimization Service Center (siehe IBM DB2 9 for z/OS: New

Tools for Query Optimization, SG24-7421) verwendet.

DB2 10 for z/OS verbessert die “profile table monitoring” Funktion, indem es die Filterung und die Überwachung

von Schwellwerten für systembezogene Aktivitäten, wie Anzahl “connections”, Anzahl von “threads” und “idle”

Zeiten eines “thread” , unterstützt. Dies bietet die Möglichkeit, die Schwellwerte(Limits), die bisher nur auf “sys-

tem level” über DSNZPARM (CONDBAT, MAXDBAT und IDTHTOIN) verfügbar waren, granularer zu sehen:

• IP Address (IPADDR)

• „Product Identifier“ (PRDID)

• “Role” und “Authorization Identifier” (ROLE, AUTHID)

• “Collection ID” und “Package Name” (COLLID, PKGNAME)

Verfügbar nur für “connections” an DB2 on z/OS über DRDA.

Page 29: IBM DB2 for z/OS - S.K. Consulting · 1 Januar 2013 DB2 Version 10 Kapitel 10: „Performance“ (10_DB2V10_performance.pptx) IBM DB2 for z/OS (*) ist eingetragenes Warenzeichen der

29 Januar 2013

DB2 Version DB2 Version 10 10 -- PerformancePerformance

DB2 10 for z/OS –

Im Einsatz, wo andere längst aufgeben...