DB2 Universal Database - Systemverwaltung


Entwerfen von Knotengruppen

Eine Knotengruppe ist eine benannte Gruppe aus einem oder mehreren Knoten, die als zu einer Datenbank gehörig definiert sind. Jede Datenbankpartition, die Teil einer Datenbanksystemkonfiguration ist, muß bereits in einer Partitionskonfigurationsdatei namens db2nodes.cfg definiert sein. Eine Knotengruppe kann eine Datenbankpartition, mehrere Datenbankpartitionen und auch alle für das Datenbanksystem definierten Datenbankpartitionen enthalten.

Eine neue Knotengruppe wird mit Hilfe der Anweisung CREATE NODEGROUP erstellt und kann mit Hilfe der Anweisung ALTER NODEGROUP geändert werden. Es können eine oder mehrere Datenbankpartitionen einer Knotengruppe hinzugefügt oder aus ihr entfernt werden. Die Datenbankpartitionen müssen in der Datei db2nodes.cfg definiert sein, bevor die Knotengruppe geändert wird. Tabellenbereiche befinden sich innerhalb von Knotengruppen. Tabellen befinden sich innerhalb von Tabellenbereichen.

Wenn eine Knotengruppe erstellt oder geändert wird, wird ihr eine Partitionierungszuordnung zugeordnet. Die Partitionierungszuordnung wird vom Datenbankmanager in Verbindung mit einem Partitionierungsschlüssel und einem Hash-Algorithmus verwendet, um festzulegen, in welcher Datenbankpartition der Knotengruppe eine bestimmte Datenzeile gespeichert wird. Weitere Informationen zu Partitionierungszuordnungen finden Sie im Abschnitt Partitionierungszuordnungen. Weitere Informationen zu Partitionierungsschlüsseln enthält der Abschnitt Partitionierungsschlüssel.

in einer nichtpartitionierten Datenbank ist kein Partitionierungsschlüssel und keine Partitionierungszuordnung erforderlich. Wenn Sie eine nichtpartitionierte Datenbank verwenden, spielen Überlegungen zu Knotengruppen keine Rolle. Eine Datenbankpartition ist ein Teil einer Datenbank, mit eigenen Benutzerdaten, Indizes, Konfigurationsdateien und Transaktionsprotokollen. Vom Datenbankmanager werden Standardknotengruppen verwendet, die erstellt werden, wenn die Datenbank erstellt wird. IBMCATGROUP ist die Standardknotengruppe für den Tabellenbereich, der die Systemkatalogtabellen enthält. IBMTEMPGROUP ist die Standardknotengruppe für die Tabellenbereiche mit den temporären Systemtabellen. IBMDEFAULTGROUP ist die Standardknotengruppe für die Tabellenbereiche, die die benutzerdefinierten Tabellen enthalten, die Sie dort speichern. Ein temporärer Benutzertabellenbereich für deklarierte temporäre Benutzertabellen kann in IBMDEFAULTGROUP bzw. in einer beliebigen benutzererstellten Knotengruppe, jedoch nicht in IBMTEMPGROUP erstellt werden.

Wenn Sie eine Knotengruppe mit mehreren Partitionen verwenden, beachten Sie die folgenden Gesichtspunkte:

Kleine Tabellen sollten in Knotengruppen mit einer Einzelpartition angelegt werde, außer wenn Sie Nutzen aus der Kollokation mit einer größeren Tabelle ziehen wollen. Unter Kollokation (Zusammenfassung) ist die Platzierung von Zeilen aus verschiedenen Tabellen, die zusammengehörige Daten enthalten, in die gleiche Datenbankpartition zu verstehen. Zusammengefaßte Tabellen ermöglichen DB2 den Einsatz effizienterer Verknüpfungsstrategien. Durch Kollokation zusammengefaßte Tabellen können sich in einer Knotengruppe mit einer Einzelpartition befinden. Tabellen werden als durch Kollokation zusammengefaßt betrachtet, wenn sie sich in einer Knotengruppe mit mehreren Partitionen befinden, dieselbe Anzahl von Spalten im Partitionierungsschlüssel haben und die Datentypen der sich entsprechenden Spalten partitionskompatibel sind. Zeilen in zusammengefaßten Tabellen mit demselben Wert im Partitionierungsschlüssel werden in derselben Datenbankpartition gespeichert. Tabellen können sich in separaten Tabellenbereichen in derselben Knotengruppe befinden und trotzdem als durch Kollokation zusammengefaßt betrachtet werden.

Mittelgroße Tabellen sollten nicht über zu viele Datenbankpartitionen verteilt werden. Zum Beispiel ist es möglich, daß eine 100-MB-Tabelle in einer Knotengruppe mit 16 Partitionen zu besseren Leistungen führt als in einer Knotengruppe mit 32 Partitionen.

Sie können Knotengruppen dazu verwenden, OLTP-Tabellen (OLTP - Online-Transaktionsverarbeitung) von Entscheidungshilfetabellen (DSS-Tabellen - Decision Support System) zu trennen, um sicherzustellen, daß die Leistung von OLTP-Transaktionen nicht beeinträchtigt wird.

Überlegungen zum Aufbau von Knotengruppen

Der logische Datenbankentwurf und die Menge an Daten, die verarbeitet werden muß, legen eine Antwort auf die Frage nahe, ob eine Datenbank partitioniert werden muß. Dieser Abschnitt behandelt die folgenden Themen zur Datenbankpartitionierung:

Datenpartitionierung

DB2 unterstützt ein partitioniertes Speichermodell, das Ihnen ermöglicht, Daten über verschiedene Datenbankpartitionen in der Datenbank verteilt zu speichern. Dies bedeutet, daß die Daten zwar physisch über mehr als eine Datenbankpartition verteilt werden, jedoch so auf sie zugegriffen werden kann, als ob sie sich an derselben Speicherposition befänden. Anwendungen und Benutzer, die auf Daten in einer partitionierten Datenbank zugreifen, brauchen die physische Speicherposition der Daten nicht zu kennen.

Die Daten werden trotz der physischen Trennung als logische Einheit verwendet und verwaltet. Benutzer können wählen, wie Ihre Daten partitioniert werden, indem Sie Partitionierungsschlüssel festlegen. Benutzer können darüber hinaus bestimmen, auf welche und auf wie viele Datenbankpartitionen Ihre Tabellendaten verteilt werden können, indem sie den Tabellenbereich und die Knotengruppe auswählen, in der die Daten gespeichert werden sollen. Weiterhin wird eine aktualisierbare Partitionierungszuordnung zusammen mit einem Hash-Algorithmus verwendet, um die Zuordnung von Werten der Partitionierungsschlüssel zu Datenbankpartitionen anzugeben, wodurch das Plazieren und Abrufen der einzelnen Datenzeilen festgelegt wird. Dadurch können Sie die Auslastung für große Tabellen über eine partitionierte Datenbank hinweg verteilen, während kleinere Tabellen in einer oder mehreren Datenbankpartitionen gespeichert werden können. Jede Datenbankpartition verfügt über lokale Indizes für die in ihr gespeicherten Daten, so daß für den lokalen Datenzugriff eine erhöhte Leistung erzielt wird.

Sie sind nicht darauf beschränkt, alle Tabelle über alle Datenbankpartitionen in der Datenbank verteilt zu speichern. DB2 unterstützt eine Teilentclusterung, das heißt, Sie können die Tabellen und die zugehörigen Tabellenbereiche über eine Teilgruppe der Datenbankpartitionen im System (d. h. eine Knotengruppe) verteilen.

Als alternative Methode, wenn Sie Tabellen in den einzelnen Datenbankpartitionen angelegt haben wollen, sollten Sie die Verwendung von Übersichtstabellen in Erwägung ziehen, die anschließend repliziert werden. Sie können eine Übersichtstabelle mit den von Ihnen benötigten Informationen erstellen und diese dann auf jeden Knoten replizieren. Weitere Informationen finden Sie in Replizierte Übersichtstabellen.

Partitionierungszuordnungen

In einer Umgebung mit einer partitionierten Datenbank muß der Datenbankmanager eine Möglichkeit besitzen, zu wissen, welche Tabellenzeilen in welcher Datenbankpartition gespeichert werden. Der Datenbankmanager muß wissen, wo er die benötigten Daten findet. Zum Auffinden der Daten verwendet er ein Zuordnungsverzeichnis, das als Partitionierungszuordnung bezeichnet wird.

Eine Partitionierungszuordnung ist eine intern generierte Tabelle von entweder 4 096 Einträgen für Knotengruppen mit mehreren Partitionen oder einem einzigen Eintrag für Knotengruppen mit einer Einzelpartition. Für eine Knotengruppe mit nur einer Partition enthält die Partitionierungszuordnung nur einen Eintrag mit der Partitionsnummer der Datenbankpartition, in der alle Zeilen einer Datenbanktabelle gespeichert werden. Für Knotengruppen mit mehreren Partitionen werden die Partitionsnummern der Knotengruppe immer wiederholt reihum angegeben. Vergleichbar mit der Verwendung einer Stadtkarte, die durch Gitterlinien in Sektoren unterteilt ist, verwendet der Datenbankmanager einen Partitionierungsschlüssel, um die Speicherposition (die Datenbankpartition) zu bestimmen, in der die Daten gespeichert werden.

Nehmen Sie zum Beispiel an, daß Sie eine Datenbank in vier Datenbankpartitionen (mit den Nummern 0-3) erstellt haben. Die Partitionierungszuordnung für die Knotengruppe IBMDEFAULTGROUP dieser Datenbank wäre wie folgt:

   0 1 2 3 0 1 2 ...

Wenn eine Knotengruppe in der Datenbank mit den Datenbankpartitionen 1 und 2 erstellt würde, wäre die Partitionierungszuordnung für diese Knotengruppe wie folgt:

   1 2 1 2 1 2 1 ...

Wenn der Partitionierungsschlüssel für eine in die Datenbank zu ladende Tabelle eine ganze Zahl (Integer) mit möglichen Werten zwischen 1 und 500 000 ist, wird der Partitionierungsschlüssel mit einem Hash-Verfahren auf eine Partitionsnummer zwischen 0 und 4 095 abgebildet. Diese Nummer wird als Index für die Partitionierungszuordnung verwendet, um die Datenbankpartition für die betreffende Zeile auszuwählen.

Abbildung 35 zeigt, wie der Zeile mit dem Partitionierungsschlüsselwert (c1, c2, c3) die Partitionsnummer 2 zugeordnet wird, die ihrerseits auf Datenbankpartition n5 verweist.

Abbildung 35. Datenverteilung mit einer Partitionierungszuordnung

Datenverteilung mit einer Partitionierungszuordnung

Eine solche Partitionierungszuordnung ist eine flexible Steuermethode für die Speicherung von Daten in einer partitionierten Datenbank. Wenn zu einem zukünftigen Zeitpunkt die Notwendigkeit eintritt, die Datenverteilung auf die Datenbankpartitionen Ihrer Datenbank zu ändern, können Sie dazu das Dienstprogramm zur Datenumverteilung verwenden. Dieses Dienstprogramm ermöglicht Ihnen, die Datenverteilung neu auszugleichen oder bewußt ungleichmäßig zu gestalten. Weitere Informationen zu diesem Dienstprogramm finden Sie im Abschnitt zum Umverteilen von Daten über Datenbankpartitionen des Handbuchs Systemverwaltung: Optimierung.

Mit Hilfe der API sqlugtpi zum Abrufen von Informationen zur Tabellenpartitionierung können Sie eine Kopie der Partitionierungszuordnung abrufen, die Sie anzeigen können. Weitere Informationen zu dieser API finden Sie im Handbuch Administrative API Reference.

Partitionierungsschlüssel

Ein Partitionierungsschlüssel ist eine Spalte (oder Spaltengruppe), die dazu verwendet wird, die Partition zu bestimmen, in der eine bestimmte Datenzeile gespeichert ist. Ein Partitionierungsschlüssel wird in einer Tabelle mit Hilfe der Anweisung CREATE TABLE definiert. Wenn kein Partitionierungsschlüssel für eine Tabelle in einem Tabellenbereich, der über mehr als eine Datenbankpartition in einer Knotengruppe verteilt ist, definiert wird, wird ein Partitionierungsschlüssel standardmäßig aus der ersten Spalte des Primärschlüssels erstellt. Wenn kein Primärschlüssel angegeben ist, wird standardmäßig die erste Spalte der Tabelle, die keine langen Daten enthält, als Partitionierungsschlüssel angenommen. (Lang beinhaltet hier alle langen Datentypen (LONG) und alle LOB-Datentypen). Wenn Sie eine Tabelle in einem Tabellenbereich erstellen, der zu einer Knotengruppe mit nur einer Partition gehört, und einen Partitionierungsschlüssel erstellen wollen, müssen Sie den Partitionierungsschlüssel explizit definieren. In diesem Fall wird kein Standardschlüssel erstellt.

Wenn keine Spalte die Voraussetzungen für einen standardmäßig erstellten Partitionierungsschlüssel erfüllt, wird die Tabelle ohne Partitionierungsschlüssel erstellt. Tabellen ohne Partitionierungsschlüssel sind nur in Knotengruppen mit einer Partition zulässig. Sie können Partitionierungsschlüssel auch später noch mit der Anweisung ALTER TABLE hinzufügen oder entfernen. Das Ändern des Partitionierungsschlüssels ist nur möglich in einer Tabelle, deren Tabellenbereich zu einer Knotengruppe mit einer Einzelpartition gehört.

Die Auswahl eines guten Partitionierungsschlüssels ist von großer Bedeutung. Sie sollten sich über folgendes im klaren sein:

Wenn Kollokation kein Hauptgesichtspunkt ist, dann zeichnet sich ein guter Partitionierungsschlüssel für eine Tabelle dadurch aus, daß er die Daten gleichmäßig über alle Datenbankpartitionen in der Knotengruppe verteilt. Der Partitionierungsschlüssel jeder Tabelle in einem Tabellenbereich, der einer Knotengruppe zugeordnet ist, bestimmt, ob die Tabellen durch Kollokation zusammengefaßt werden. Tabellen werden als zusammengefaßt betrachtet, wenn folgende Bedingungen gelten:

Dadurch ist sichergestellt, daß Zeilen zusammengefaßter Tabellen mit denselben Werten für ihre Partitionierungsschlüssel in derselben Partition gespeichert werden. Weitere Informationen zur Partitionskompatibilität finden Sie in Partitionskompatibilität. Weitere Informationen zur Tabellenkollokation finden Sie in Tabellenkollokation.

Ein ungeeigneter Partitionierungsschlüssel kann zu einer ungleichmäßigen Datenverteilung führen. Spalten mit ungleichmäßig verteilten Daten und Spalten mit einer kleinen Anzahl unterschiedlicher Werte sollten nicht als Partitionierungsschlüssel ausgewählt werden. Die Anzahl der unterschiedlichen Werte muß ausreichend groß sein, um eine gleichmäßige Verteilung der Zeilen auf alle Datenbankpartitionen in der Knotengruppe sicherzustellen. Der Aufwand für die Anwendung des Hash-Algorithmus zur Partitionierung ist proportional zur Größe des Partitionierungsschlüssels. Der Partitionierungsschlüssel kann nicht mehr als 16 Spalten enthalten. Jedoch wird bei weniger Spalten eine bessere Leistung erzielt. Nicht benötigte Spalten sollten daher nicht in den Partitionierungsschlüssel aufgenommen werden.

Die folgenden Punkte sollten bei der Definition von Partitionierungsschlüsseln beachtet werden:

Hash-Partitionierung heißt die Methode, mit der die Speicherposition jeder Zeile in der partitionierten Tabelle ermittelt wird. Diese Methode funktioniert folgendermaßen:

  1. Der Hash-Algorithmus wird auf den Wert des Partitionierungsschlüssels angewendet und generiert eine Partitionsnummer zwischen 0 und 4095.
  2. Die Partitionierungszuordnung wird bei der Erstellung einer Knotengruppe erstellt. Die Partitionsnummern werden immer wieder in derselben Reihenfolge nacheinander wiederholt, bis die Partitionierungszuordnung gefüllt ist. Weitere Informationen zu Partitionierungszuordnungen finden Sie im Abschnitt Partitionierungszuordnungen.
  3. Die Partitionsnummer wird als Index für die Position in der Partitionierungszuordnung verwendet. Die Nummer an dieser Position in der Partitionierungszuordnung ist die Nummer der Datenbankpartition, in der die Zeile gespeichert wird.

Tabellenkollokation

Sie stellen möglicherweise fest, daß zwei oder mehr Tabellen häufig zusammen Daten als Antwort für bestimmte Abfragen liefern. In diesem Fall ist es sinnvoll, zusammengehörige Daten aus solchen Tabellen möglichst nah beieinander zu speichern. In einer Umgebung, in der die Datenbank physisch auf zwei oder mehr Datenbankpartitionen verteilt ist, muß es eine Möglichkeit geben, zusammengehörige Teile der verteilten Tabellen so nah wie möglich beieinander zu halten. Diese Möglichkeit wird als Tabellenkollokation bezeichnet.

Tabellen sind in einer Kollokation zusammengefaßt, wenn sie in derselben Knotengruppe gespeichert sind und ihre Partitionierungsschlüssel kompatibel sind. Durch Speichern beider Tabellen in derselben Knotengruppe wird sichergestellt, daß sie eine gemeinsame Partitionierungszuordnung haben. Die Tabellen können sich in verschiedenen Tabellenbereichen befinden, jedoch müssen die Tabellenbereiche derselben Knotengruppe zugeordnet sein. Die Datentypen der entsprechenden Spalten in den jeweiligen Partitionierungsschlüsseln müssen partitionskompatibel sein. Informationen zur Partitionskompatibilität finden Sie in Partitionskompatibilität.

DB2 kann beim Zugriff auf mehr als eine Tabelle bei einer Verknüpfung oder einer Unterabfrage erkennen, daß sich die zu verknüpfenden Daten in derselben Datenbankpartition befinden. Wenn dies geschieht, kann DB2 entscheiden, die Verknüpfung oder Unterabfrage in der Datenbankpartition auszuführen, in der die Daten gespeichert sind, anstatt die Daten zwischen Datenbankpartitionen auszutauschen. Diese Möglichkeit, Verknüpfungen oder Unterabfragen in der Datenbankpartition auszuführen, bietet wesentliche Leistungsvorteile. Weitere Informationen finden Sie unter "Zusammengefaßte Verknüpfungen" im Handbuch Systemverwaltung: Optimierung.

Partitionskompatibilität

Die Basisdatentypen entsprechender Spalten von Partitionierungsschlüsseln werden verglichen und können als partitionskompatibel deklariert werden. Partitionskompatible Datentypen haben die Eigenschaft, daß ein bestimmter Partitionierungsalgorithmus zwei Variablen mit jeweils einem dieser Datentypen dieselbe Partitionsnummer zuordnet, wenn sie denselben Wert haben.

Partitionskompatibilität hat folgende Merkmale:

Replizierte Übersichtstabellen

Eine Übersichtstabelle ist eine Tabelle, die durch eine Abfrage definiert ist, mit der auch die Daten für die Tabelle festgelegt werden. Durch Übersichtstabellen kann die Leistungsfähigkeit von Abfragen erhöht werden. Wenn DB2 erkennt, daß ein Teil einer Abfrage durch eine Übersichtstabelle aufgelöst werden könnte, kann der Datenbankmanager die Abfrage so abwandeln, daß die entsprechende Übersichtstabelle verwendet wird.

In einer partitionierten Datenbankumgebung können Sie Übersichtstabellen replizieren. Durch die Verwendung replizierter Übersichtstabellen können Sie die Leistung von Abfragen erhöhen. Eine replizierte Übersichtstabelle basiert auf einer Tabelle, die möglicherweise in einer Knotengruppe mit einer Einzelpartition erstellt wurde, die Sie jedoch über alle Datenbankpartitionen in der Knotengruppe replizieren wollen. Die replizierte Übersichtstabelle wird durch Ausführen der Anweisung CREATE TABLE mit dem Schlüsselwort REPLICATED erstellt. Das Schlüsselwort REPLICATED kann nur für eine Übersichtstabelle angegeben werden, die mit der Option REFRESH DEFERRED wurde.

Weitere Informationen zu Übersichtstabellen finden Sie in Erstellen einer Übersichtstabelle .

Mit Hilfe von replizierten Übersichtstabellen können Sie Kollokationen zwischen Tabellen herstellen, die normalerweise nicht kollokiert sind. Replizierte Übersichtstabellen sind besonders nützlich für Verknüpfungen großer Fakttabellen mit kleinen Dimensionstabellen. Zur Minimierung des erforderlichen zusätzlichen Speicherbedarfs sowie des Aufwands zum Aktualisieren aller Replikate, sollten zu replizierende Tabellen klein sein und nicht häufig aktualisiert werden.
Anmerkung:Sie sollten auch in Erwägung ziehen, umfangreiche Tabellen, die selten aktualisiert werden, zu replizieren: Der Zusatzaufwand für eine Replikation durch die mit Hilfe der Kollokation erzielten Leistungsvorteile wettgemacht.

Durch Angeben eines geeigneten Vergleichselements in der Unterauswahlklausel, die zum Definieren der replizierten Tabelle verwendet wird, können Sie ausgewählte Spalten, ausgewählte Zeilen (oder beides) replizieren.

Weitere Informationen zu replizierten Übersichtstabellen finden Sie im Abschnitt zur Anweisung CREATE TABLE im Handbuch SQL Reference. Weitere Informationen zu zusammengefaßten Verknüpfungen finden Sie unter "Zusammengefaßte Verknüpfungen" im Handbuch Systemverwaltung: Implementierung.


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]