von Markus Winand.

Db2 (LUW) 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-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, Bluesky 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»

Neuigkeiten Abonnieren

Markus Winands MailinglistenMarkus Winands RSS-FeedMarkus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf TwitterMarkus Winand auf Bluesky
Copyright 2010-2025 Markus Winand. Alle Rechte vorbehalten.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz und DSGVO