von Markus Winand.

DB2 Skripts 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;
Vorherige SeiteNächste Seite

Du kannst nicht alles an einem Tag lernen. Abonniere den Newsletter via E-Mail, Twitter oder RSS um sukzessive aufzuholen. Und sieh dir auch modern-sql.com an.

Über den Autor

Foto von Markus Winand

Markus Winand gibt auf modern-sql.com Einblick in SQL und zeigt, wie es von verschiedenen Systemen unterstützt wird. Zuvor machte er use-the-index-luke.com, was er noch immer wartet. Markus kann als Trainer, Sprecher und Berater auf winand.at engagiert werden.

Sein Buch kaufen

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

Die Essenz: SQL-Tuning auf 200 Seiten

Jetzt Kaufen
(Taschenbuch und/oder PDF)

Sein Training

Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how

Erfahren Sie mehr»

Mit Markus Winand verbinden

Markus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf Twitter
„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 und DSGVO | CC-BY-NC-ND 3.0 Lizenz