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 beiRUNSTATS
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;