Vor der Aufteilung – Übersicht

Dieses Dokument enthält Informationen, die Ihnen dabei helfen, Ihre Datenbank im Voraus aufzuteilen.

Spanner verwaltet Datenbankaufteilungen und Skalierungen als Reaktion auf Lade- und Größenänderungen. Das Aufteilen und Zusammenführen erfolgt dynamisch je nach Traffic. Wenn ein Split mehr Traffic erhält, teilt Spanner ihn in kleinere Bereiche auf und verteilt die resultierenden Splits auf andere verfügbare Ressourcen in der Instanz. Spanner führt den Split zusammen, wenn er durchweg weniger Traffic empfängt.

Die Aufteilung erfolgt nicht sofort. Wenn die Aufteilung und der Ausgleich nicht mit dem Traffic Schritt halten kann, kann ein Split möglicherweise seine verfügbaren Rechen- und Speicherressourcen aufbrauchen. In diesem Fall stellt der Arbeitsplaner von Spanner weitere Anfragen in die Warteschlange, wodurch die Latenz erhöht wird und möglicherweise zu Zeitüberschreitungen und abgebrochenen Transaktionen führt.

Durch die Aufteilung der Datenbank im Voraus kann Spanner auf einen vorhersehbaren erhöhten Traffic vorbereitet sein. Sie können Ihre Datenbank im Voraus aufteilen, indem Sie Aufteilungspunkte erstellen.

Erwägen Sie in den folgenden Szenarien, Ihre Datenbank im Voraus aufzuteilen:

  • Sie laden zum ersten Mal ein großes Dataset in neue Tabellen und Indexe in einer Spanner-Datenbank, beispielsweise einen einmaligen Bulk-Upload.
  • Sie erwarten in naher Zukunft einen Anstieg der Traffic-Auslastung in einer vorhandenen Spanner-Datenbank. Beispielsweise müssen Sie möglicherweise ein Ereignis mit vielen Zugriffen unterstützen, z. B. eine Produkteinführung oder eine Verkaufskampagne.

Teilungsanzahl ermitteln

Wir empfehlen, 10 Aufteilungspunkte pro Knoten zu erstellen. Da Spanner für kleinere Instanzen schnell eine Aufteilung und Anpassung an den Traffic durchführen kann, müssen Sie kleinere Instanzen nicht im Voraus aufteilen.

Aufteilungspunkte bestimmen

Beachten Sie Folgendes, wenn Sie Aufteilungspunkte für Ihre Datenbank festlegen:

  • Wenn der Traffic gleichmäßig über den Schlüsselbereich verteilt ist, z. B. bei Verwendung von UUIDs oder bitumkehrenden Sequenzschlüsseln, wählen Sie Aufteilungspunkte aus, durch die der Bereich des Schlüssels nach dem Traffic gleichmäßig aufgeteilt wird.

  • Wenn Ihr Traffic auf eine Reihe bekannter Schlüsselbereiche konzentriert ist, teilen und isolieren Sie diese Schlüsselbereiche.

  • Wenn Sie für Ihre Indexe Traffic erwarten, verwenden Sie Splitpoints beim entsprechenden Index.

  • Verschränkte Tabellen werden aufgeteilt, wenn der übergeordneten Tabelle Aufteilungspunkte hinzugefügt werden. Wenn Sie einen höheren Traffic für die verschränkte Tabelle erwarten, achten Sie darauf, Split-Punkte in der entsprechenden verschränkten Tabelle zu verwenden.

  • Sie können die Aufteilungspunkte Schemaobjekte proportional zum erhöhten Traffic zuweisen.

Beispiel-Workflow zum Festlegen von Aufteilungspunkten

Angenommen, Ihre Datenbank hat die durch die folgende DDL definierten Tabellenstrukturen:

CREATE TABLE UserInfo (
 UserId INT64 NOT NULL,
 Info BYTES(MAX),
) PRIMARY KEY (UserId);


CREATE TABLE UserLocationInfo (
 UserId INT64 NOT NULL,
 LocationId STRING(MAX) NOT NULL,
 ActivityData BYTES(MAX),
) PRIMARY KEY (UserId, LocationId), INTERLEAVE IN PARENT UserInfo ON DELETE CASCADE;


CREATE INDEX UsersByLocation ON UserLocationInfo(LocationId);

UserId ist ein zufällig generierter Hash im Bereich INT64. Sie müssen 100 Aufteilungspunkte hinzufügen, um den erwarteten Anstieg des Traffics auf die Tabelle UserInfo und ihre verschränkten Tabellen gleichmäßig zu verteilen. Da die Aufteilungspunkte gleichmäßig verteilt sind, müssen Sie die Anzahl der Zeilen oder den offset zwischen den einzelnen Aufteilungspunkten ermitteln:

offset = der Maximalwert des Bereichs UserId ÷ 99

Dann werden die Aufteilungspunkte für die Tabelle UserInfo aus der ersten Zeile von UserId oder UserId_first ermittelt. Verwenden Sie die folgende Berechnung, um den n-ten Aufteilungspunkt zu ermitteln:

Teilpunkt N: UserId_first + (offset * (N-1))

Der erste Split-Punkt ist beispielsweise UserId_first + (offset * 0) und der dritte Split-Punkt UserId_first + (offset * 2).

Da die Tabelle UserLocationInfo eine verschränkte Tabelle der Tabelle UserInfo ist, wird sie auch an den UserId-Grenzen aufgeteilt. Sie können auch Split-Punkte in der Tabelle UserLocationInfo in der Spalte LocationId erstellen.

LocationId entspricht dem Format $COUNTRY_$STATE_$CITY_$BLOCK_$NUMBER. Beispiel: US_CA_SVL_MTL_1100_7.

Für ein UserId können Sie basierend auf dem Präfix des Strings LocationId Splits bestimmen, um die Tabelle UserLocationInfo für das UserId in drei verschiedenen Ländern in drei verschiedenen Splits zu platzieren:

  • Aufteilungspunkt 1: (1.000, "CN")
  • Aufteilungspunkt 2: (1.000, "FR")
  • Aufteilungspunkt 3: (1.000, "US")

Sie können neue Aufteilungspunkte nur mit einem Präfix hinzufügen und müssen nicht mit dem angegebenen Format für eine Spalte oder einen Index übereinstimmen. In diesem Beispiel entsprechen die Aufteilungspunkte nicht dem angegebenen Format für LocationId und verwenden nur $COUNTRY als Präfix.

Wenn Sie den Index UsersByLocation aufteilen möchten, können Sie die Aufteilungspunkte gleichmäßig auf die Spalte LocationId verteilen oder einige LocationId-Spaltenwerte isolieren, für die voraussichtlich mehr Traffic vorhanden ist:

  • Splitpoint 1: „CN“
  • Splitpoint 2: „US“
  • Teilpunkt 3: "US_NYC"

Sie können den Index weiter aufteilen, indem Sie die Schlüsselteile der indexierten Tabelle für Standorte verwenden, die noch mehr Traffic erhalten. Wenn Sie beispielsweise erwarten, dass der Standort CN erhöhten Traffic erhält, können Sie die folgenden Aufteilungspunkte einführen:

  • Aufteilungspunkt 1: "CN" und TableKey: (1000, "CN")
  • Aufteilungspunkt 2: „CN“ und TableKey: (2000, „CN“)
  • Aufteilungspunkt 3: „CN“ und TableKey: (3000, „CN“)

Ablauf von Aufteilungspunkten

Sie können für jeden Splitpoint eine Ablaufzeit festlegen. Je nach Anwendungsfall sollten Sie die Aufteilungspunkte so einrichten, dass sie ablaufen, wenn der erwartete Anstieg des Traffics nachlässt.

Die standardmäßige Ablaufzeit beträgt zehn Tage nach dem Erstellen oder Aktualisieren der Teilung. Die maximal zulässige Ablaufzeit beträgt 30 Tage nach dem Erstellen oder Aktualisieren des Splits.

Nach Ablauf des Splits übernimmt Spanner die Verwaltung des Splits und Sie können den Split nicht mehr anzeigen. Spanner kann den Split abhängig vom Traffic zusammenführen.

Sie können auch die Ablaufzeit für einen Splitpoint aktualisieren, bevor er abläuft. Wenn beispielsweise der erhöhte Traffic nicht nachgelassen hat, können Sie die Ablaufzeit der Zwischenzeit verlängern. Wenn Sie einen Aufteilungspunkt nicht mehr benötigen, können Sie festlegen, dass er sofort abläuft. Informationen zum Festlegen der Ablaufzeit von Aufteilungspunkten finden Sie unter Aufteilungspunkte ablaufen lassen.

Ergebnisse der Vorabaufteilung Ihrer Datenbank

Die folgenden Ergebnisse sind wahrscheinlich nach dem Hinzufügen von Aufteilungspunkten zu erwarten:

  • Latenzänderungen: Durch das Hinzufügen von Split-Punkten können Sie Steigerungen des Traffics in der Datenbank simulieren. Wenn eine Datenbank mehr Splits hat, kann es aufgrund von mehr Transaktionsteilnehmern und Abfrageaufteilungen dauerhaft zu einer dauerhaften Erhöhung der Lese- und Schreiblatenz kommen. Sie können auch mit einem Anstieg der Rechen- und Abfragenutzung pro Lese- oder Schreibanfrage rechnen.

  • Splitpoint-Effizienz: Um festzustellen, ob die hinzugefügten Aufteilungspunkte vorteilhaft sind, überwachen Sie das Latenzprofil auf minimale Änderungen und den Key Visualizer auf Hotspots. Wenn Sie Hotspots bemerken, können Sie die Split-Punkte sofort ablaufen und neue erstellen. Weitere Informationen zu ablaufenden Aufteilungspunkten Erwägen Sie die Einführung einer kleineren Anzahl von Splits in der nächsten Iteration des Hinzufügens von Splits und beobachten Sie das Latenzprofil.

  • Aufteilungspunkteverhalten nach der Trafficerhöhung: Die hinzugefügten Aufteilungspunkte sollten entfernt werden, sobald sich der Traffic stabilisiert hat. Die Aufteilungsverteilung konvergiert möglicherweise nicht an der Stelle vor dem Lastanstieg. Die Datenbank kann sich aufgrund der Trafficänderung und der Aufteilung, die zur Unterstützung des Traffics erforderlich ist, auf ein anderes Latenzprofil festlegen.

Anwendungsbeispiel

Stellen Sie sich vor, Sie sind Datenbankadministrator bei einem Spieleunternehmen und erwarten einen erhöhten Traffic für die Einführung eines neuen Spiels. Sie erwarten den Traffic für neue Tabellen, die leer sind.

Sie müssen dafür sorgen, dass keine Dienstunterbrechung auftritt, wenn der Traffic durchläuft, damit keine erfassbaren Auswirkungen auf die Latenz oder die Fehlerraten auftreten.

Betrachten Sie die folgende allgemeine Strategie für die Vorabaufteilung für diesen Anwendungsfall:

  1. Ermitteln Sie die Anzahl der Knoten, die die Instanz für den erhöhten Traffic benötigt. Informationen zum Ermitteln der Knotenanzahl finden Sie unter Leistungsübersicht. Wenn Sie Autoscaling verwenden, legen Sie den Parameter für das maximale Limit auf die angegebene Knotenanzahl fest. Legen Sie außerdem den Parameter „Minimum limit“ auf (von Ihnen angegebene Anzahl der Knoten ÷ 5) fest.

  2. Ermitteln Sie die Tabellen und Indexe mit dem meisten Traffic, die am meisten von der Verwendung von Split-Punkten profitieren können. Analysieren Sie die aktuellen Daten und wählen Sie entweder benutzerdefinierte oder gleichmäßig verteilte Aufteilungspunkte aus.

  3. Erstellen Sie die Aufteilungspunkte nicht früher als sieben Tage und spätestens 12 Stunden vor dem erwarteten Trafficanstieg.

  4. Prüfen Sie, ob die Aufteilungen erstellt wurden. Informationen zum Anzeigen der erstellten Aufteilungspunkte für eine Instanz finden Sie unter Aufteilungspunkte ansehen.

Vorsichtsmaßnahmen

Beachten Sie beim Erstellen von Aufteilungspunkten die folgenden Einschränkungen:

  • Löschen von Tabellen, Indexen und Datenbanken: Bevor Sie eine Tabelle, einen Index oder eine Datenbank löschen, müssen Sie prüfen, ob alle entsprechenden hinzugefügten Split-Punkte abgelaufen sind. Legen Sie dazu das Ablaufdatum der Teilung auf die aktuelle Uhrzeit fest. Das ist erforderlich, damit das Kontingent auf Instanzebene zurückgefordert werden kann. Weitere Informationen zu ablaufenden Aufteilungspunkten finden Sie unter Aufteilungspunkte ablaufen lassen.

  • Datenbanken sichern und wiederherstellen: Hinzugefügte Splits werden nicht gesichert. Sie müssen Splits für eine wiederhergestellte Datenbank erstellen.

  • Asymmetrisches Autoscaling: Wenn Sie asymmetrisches Autoscaling verwenden, ist die Anzahl der Knoten, mit der die Anzahl der Splitpunkte bestimmt wird, die minimale Anzahl von Knoten in allen Regionen.

  • Vorübergehende Erhöhung der Messwerte zur Speichernutzung: Durch das Hinzufügen von Split-Punkten wird der Messwert Gesamtspeicher für die Datenbank vorübergehend erhöht, bis Spanner die Verdichtung abgeschlossen hat. Weitere Informationen finden Sie unter Speicherauslastung. Dies geschieht nur, wenn vorhandene Schlüsselbereiche weiter aufgeteilt werden, und nicht, wenn neue Schlüsselbereiche aufgeteilt werden.

  • Sie sollten Split-Punkte nicht früher als sieben Tage und spätestens 12 Stunden vor dem erwarteten Trafficanstieg erstellen.

Limits vor der Aufteilung

Die Aufteilung Ihrer Datenbank im Voraus unterliegt den folgenden Einschränkungen:

  • Suchindexe können nicht im Voraus aufgeteilt werden. Sie müssen nur die Basistabelle im Voraus teilen. Weitere Informationen finden Sie unter Suchindexfragmentierung.

  • Sie können Vektorindexe nicht im Voraus aufteilen. Weitere Informationen zu Vektorindexen finden Sie unter Vektorindex.

  • Informationen zu den Kontingenten für Splitpoints finden Sie unter Kontingente und Limits.

Nächste Schritte