von Markus Winand.

DB2 Skripte für „Performance und Skalierbarkeit“


Dieser Abschnitt enthält die create und insert-Anweisungen zum Anlegen der Tabellen aus Kapitel 3, „Performance und Skalierbarkeit in einer DB2-LUW-Datenbank.

Warnung

Diese Skript erzeugen große Tabellen.

Um repräsentative Ergebnisse zu erhalten, muss die Tabelle groß genug sein un nicht mehr in den Cache zu passen. Abhängig von dem Test-System muss man die Tabelle gegebenenfalls noch größer machen, um das lineare Wachstum zu erhalten, das im Buch gezeigt wird.

--#SET TERMINATOR ;

-- Disable autocommit
UPDATE COMMAND OPTIONS USING C OFF;

CREATE TABLE scale_data (
   section NUMERIC(10,0) NOT NULL,
   id1     NUMERIC(10,0) NOT NULL,
   id2     NUMERIC(10,0) NOT NULL
) NOT LOGGED INITIALLY;

Hinweise

  • Autocommit wird abgeschalten, damit auch das protokollieren (log) während des Befüllens abgeschalten werden kann.

  • Es gibt keinen Primärschlüssel (um die Daten-Erzeugung einfach zu halten)

  • Es gibt noch keinen Index (wird nach dem Befüllen angelegt).

  • Es gibt keine junk-Spale, da der Test ohnehin nicht auf die Tabelle selbst zugreift.

--#SET TERMINATOR ;

INSERT INTO scale_data (section, id1, id2)
WITH sections (n) AS
( SELECT 1 n   FROM sysibm.sysdummy1
   UNION ALL
  SELECT n + 1 FROM sections
   WHERE n < 300
)
, gen (n) AS
( SELECT 1 n   FROM sysibm.sysdummy1
   UNION ALL
  SELECT n + 1 FROM gen
   WHERE n < 900000
)
SELECT sections.n, gen.n, FLOOR(rand() * 100) 
  FROM sections
     , gen
 WHERE gen.n < sections.n * 3000;

Hinweise:

  • Dieses Statement erzeugt 300 Sektionen – das muss man ggf. an die eigene Umgebung anpassen. Wenn man die Zahl erhöht, muss man auch den zweiten Zeilengenerator vergrößern. Er muss mindestens 3000 x <Anzahl der Sektionen> Zeilen erzeugen.

  • Die Tabelle benötigt einige Gigabyte.

--#SET TERMINATOR ;

CREATE INDEX scale_slow ON scale_data (section, id1, id2);

RUNSTATS ON TABLE scale_data;

Hinweise:

  • Der Index benötigt ebenfalls einige Gigabyte.

  • Vor Version 10 benötigt DB2 den Schema-Namen bei RUNSTATS. Wenn man bei RUNSTATS einen Fehler bekommt, muss man den Schema-Namen explizit angeben (Schema.Tabelle). Die aktuellen Schema-Namen kann man wie folgt abfragen:

    SELECT current_schema FROM sysibm.sysdummy1;

Über den Autor

Foto von Markus Winand

Markus Winand lehrt effizientes SQL – inhouse und online. Er minimiert die Entwicklungszeit durch modernes SQL und optimiert die Laufzeit durch schlaue Indizierung – dazu hat er auch das Buch SQL Performance Explained veröffentlicht.

Kaufen Sie sein Buch bei Amazon

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Bei Amazon kaufen
(Taschenbuch)

Taschenbuch und PDF auch auf Markus' Webseite erhältlich.

Holen Sie sich Markus

…für ein Training ins Büro.

Sein beliebtes Training stimmt Entwickler auf SQL Performance ein.

Erfahren Sie mehr»

„Use The Index, Luke!“ von Markus Winand ist unter einer Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License lizenziert.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz | CC-BY-NC-ND 3.0 Lizenz