Auf dieser Seite wird beschrieben und erläutert, wie Sie Spanner-Leseleases verwenden. Leseleases helfen Ihren Datenbanken, die starke Leselatenz in Lese-/Schreib- oder schreibgeschützten Regionen zu reduzieren, was jedoch eine höhere Schreiblatenz nach sich zieht.
Wenn Spanner standardmäßig eine Anfrage für einen starken Lesevorgang in einer Region empfängt, die nicht als Leader fungiert, kontaktiert das Replikat, das den Lesevorgang ausführt, die nicht schreibgeschützte Leader-Region der Instanz. Dieser Kontakt bestätigt, dass seine Daten aktuell sind, bevor die Anfrage bearbeitet wird. Bei diesem Vorgang ist ein Netzwerk-Roundtrip zwischen der Region, die die Anfrage empfängt, und der Leader-Region erforderlich. Im Gegensatz zur Kommunikation innerhalb einer einzelnen Region führt die geografische Entfernung zwischen Regionen zu einer zusätzlichen Latenz bei der Anfrage.
Durch die Verwendung von Spanner-Leseleases ist dieser Roundtrip nicht mehr erforderlich. Wenn Sie eine oder mehrere Regionen für Leseleases für Ihre Datenbank festlegen, erhalten diese Regionen das Recht, konsistente Lesevorgänge lokal auszuführen. So können die Nicht-Leader-Regionen starke Lesevorgänge direkt ausführen, ohne mit der Leader-Region kommunizieren zu müssen. Wenn starke Lesevorgänge aus einer Region ohne Leader ausgeführt werden, die näher am Client liegt, wird die Latenz über Regionen hinweg verringert. Dadurch wird die Latenz innerhalb der Region für starke Lesevorgänge in dual- oder multiregionalen Instanzen erreicht. Wenn Leseleases aktiviert sind, werden starke Lesevorgänge in schreibgeschützten Transaktionen lokal ausgeführt, ohne dass der Leader kontaktiert wird. Bei Lese-Schreib-Transaktionen werden Lesevorgänge weiterhin an die Leader-Region weitergeleitet, es sei denn, Sie verwenden die Isolation vom Typ „Repeatable Read“ mit deaktiviertem Leader-fähigen Routing.
Das Aktivieren oder Deaktivieren der Funktion „Read Leases“ in einer Region erfordert keine Ausfallzeiten. Schreibvorgänge haben jedoch eine höhere Latenz, wenn Sie die Funktion verwenden, da der Leader beim Ausführen von Schreibvorgängen die Regionen für Leseleases kontaktieren muss. Als Nebeneffekt werden Sperren für Schreibvorgänge länger gehalten, was sich auf Schreibarbeitslasten mit hoher Konfliktwahrscheinlichkeit auswirken kann. Weitere Informationen finden Sie unter Leseleases verwenden. Read Lease eignet sich am besten für Anwendungen, bei denen eine höhere Schreiblatenz für schnellere, stark konsistente Lesevorgänge in Kauf genommen wird. Ein Beispiel ist ein Zugriffskontrollsystem, bei dem die Arbeitslast häufige Lesevorgänge, aber seltene Schreibvorgänge umfasst.
Informationen zum Aktivieren von Leseleases finden Sie unter Leseleases verwenden.
Wann sollten Lese-Leases verwendet werden?
Aktivieren Sie Leseleases, wenn Ihre Anwendung und Arbeitslast die folgenden Kriterien erfüllen:
- Eine niedrige Latenz für starke Lesevorgänge ist wichtiger als eine niedrige Latenz für Schreibvorgänge.
- Ihre Arbeitslast kann längere Schreibsperren tolerieren oder es gibt nur wenige Konflikte beim Schreiben.
Bei gleichzeitigen Schreibvorgängen wirkt sich die Wahl zwischen den Abfrage-APIs und den Lese-APIs auf die Leistung einer Datenbank aus, die Lese-Lease-Regionen verwendet.
Weitere Informationen zur Monitoring-Latenz finden Sie unter Monitor.
Anwendungsbeispiel
Stellen Sie sich eine weltweit bereitgestellte Anwendung vor, die Schreibvorgänge in den USA ausführt und Clients in den USA, Europa und Asien hat. Sie können eine multiregionale Spanner-Instanz wie nam-eur-asia1
mit einer führenden Region in us-central1
und schreibgeschützten Replikaten in europe-west1
und asia-east1
konfigurieren.
Wenn Sie die Leselease in den schreibgeschützten Regionen europe-west1
und asia-east1
aktivieren, führt Spanner starke Lesevorgänge aus Europa und Asien über diese lokalen Replikate aus, wodurch die Latenz reduziert wird. Dafür steigt die Latenz bei allen Schreibvorgängen. Die erhöhte Latenz entspricht der Round-Trip-Zeit zwischen der Leader-Region us-central1
und den am weitesten entfernten Regionen mit Leseleases.
Beschränkungen
Für Spanner-Leseleases gelten die folgenden Einschränkungen:
- Sie können keine Leseleases mit geografischer Partitionierung verwenden.
- Lese-Leases verringern die Latenz nicht für Lesevorgänge, die Teil einer Lese-/Schreibtransaktion sind. Wenn Sie die Latenz innerhalb der Region für Lesevorgänge in Lese-Schreib-Transaktionen erreichen möchten, müssen Sie die Isolationsstufe „Wiederholbarer Lesevorgang“ verwenden und Leader-fähiges Routing deaktivieren, um Lese-Leases zu verwenden. Auch wenn die Isolation „Repeatable Read“ verwendet wird, können Lesevorgänge in Lese-Schreib-Transaktionen weiterhin an die Leader-Region weitergeleitet werden, insbesondere nach einem Schreibvorgang innerhalb der Transaktion, um die Konsistenz „Read-Your-Writes“ zu gewährleisten.
- Wenn Sie Ihre Instanz in eine andere Instanzkonfiguration verschieben, bleiben die Einstellungen für die Lese-Lease nicht erhalten. Sie müssen die Lese-Lease für die Datenbank nach Abschluss der Migration wieder aktivieren.
Leseleases verwenden
Sie müssen Lese-Leases aktivieren, bevor Sie sie verwenden können.
Zugriffssteuerung mit IAM
Zum Festlegen von Lese-Lease-Regionen benötigt ein Nutzer die IAM-Berechtigung spanner.databases.create
oder spanner.databases.updateDdl
. Die vordefinierte Rolle „Datenbankadministrator“ (roles/spanner.databaseAdmin
) enthält diese Berechtigungen. Weitere Informationen finden Sie unter IAM-Übersicht für Spanner.
Informationen zum Gewähren von Berechtigungen finden Sie unter IAM-Berechtigungen anwenden.
Vorbereitung für PostgreSQL-Datenbanknutzer
Wenn Sie Read Lease in einer PostgreSQL-Datenbank verwenden möchten, nehmen Sie eine der folgenden Konfigurationsänderungen an Ihrer Datenbank vor. Andernfalls werden Ihre Lesevorgänge weiterhin von der Leader-Region bereitgestellt, auch wenn Sie Regionen für Leseleases festgelegt haben.
Wenn Sie nur schreibgeschützte Transaktionen verwenden, konfigurieren Sie Ihre PostgreSQL-Verbindung so, dass der Standardstatus jeder neuen Transaktion in der Datenbank auf „schreibgeschützt“ festgelegt ist. Setzen Sie dazu die Option
default_transaction_read_only
auftrue
.postgres://USER_ID:PASSWORD@localhost:5432/DATABASE_ID?sslmode=disable&options=-c \ default_transaction_read_only=true host=/tmp port=5432 database=DATABASE_ID \ options='-c default_transaction_read_only=true'
Ersetzen Sie Folgendes:
USER_ID durch die eindeutige Kennung Ihres Nutzers.
PASSWORD durch Ihr Passwort.
DATABASE_ID durch die eindeutige Kennung Ihrer Datenbank.
Wenn Sie eine Latenz für Lese-Schreib-Transaktionen innerhalb der Region erreichen möchten oder Ihre Verbindungsoption nicht immer wechseln können, verwenden Sie die Isolationsebene „Wiederholbares Lesen“ und deaktivieren Sie Leader-fähiges Routing. Diese Einstellungen sind auch dann erforderlich, wenn Ihre Lese-/Schreibtransaktion nur Lesevorgänge enthält. Andernfalls werden die Lesevorgänge in Lese-Schreib-Transaktionen immer an die Leader-Region weitergeleitet. In einer solchen Transaktion wird die Lese-Lease deaktiviert, nachdem die erste DML-Anweisung für Schreibvorgänge angezeigt wird. Das liegt daran, dass Schreibvorgänge immer an die Leader-Region gerichtet werden. Daher müssen nachfolgende Lesevorgänge auch an die führende Region gesendet werden.
postgres://USER_ID:PASSWORD@localhost:5432/DATABASE_ID?sslmode=disable&options=-c \ default_isolation_level=REPEATABLE_READ -c routeToLeader=false host=/tmp port=5432 database=DATABASE_ID \ options='-c default_isolation_level=REPEATABLE_READ -c routeToLeader=false'
Lesevorgänge aktivieren
Wenn Sie beim Erstellen einer neuen Datenbank Leseleases aktivieren möchten, legen Sie die Option read_lease_regions
in der DDL-Anweisung ALTER DATABASE
(GoogleSQL, PostgreSQL) fest:
Console
Rufen Sie in der Google Cloud Console die Seite Instanzen auf.
Wählen Sie die Instanz aus, in der Sie die Lese-Lease aktivieren möchten.
Klicken Sie auf der Seite Instanzübersicht, die sich öffnet, auf Datenbank erstellen.
Geben Sie einen Namen für die Datenbank ein.
Wählen Sie einen Datenbankdialekt aus.
Klicken Sie auf Erstellen.
In der Google Cloud Console wird die Seite Übersicht für die erstellte Datenbank angezeigt.
Klicken Sie im Navigationsmenü auf Spanner Studio.
Klicken Sie auf der Seite Spanner Studio auf
Neuer Tab oder verwenden Sie den leeren Editor-Tab.Geben Sie die folgende
ALTER DATABASE
-DDL-Anweisung ein.GoogleSQL
ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');
Ersetzen Sie Folgendes:
DATABASE_ID durch die eindeutige Kennung Ihrer Datenbank.
READ_LEASE_REGION durch die Region, in der Sie die Leselease aktivieren möchten. Beispiel:
europe-west1
. Sie können die Leselease für mehrere Regionen aktivieren. Trennen Sie die einzelnen Regionen durch Kommas.
PostgreSQL
ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';
Ersetzen Sie Folgendes:
DATABASE_ID durch die eindeutige Kennung Ihrer Datenbank.
READ_LEASE_REGION durch die Region, in der Sie die Leselease aktivieren möchten. Beispiel:
europe-west1
. Sie können die Leselease für mehrere Regionen aktivieren. Trennen Sie die einzelnen Regionen durch Kommas.
Klicken Sie auf Ausführen.
gcloud
Verwenden Sie gcloud spanner databases create
, um die Datenbankoption read_lease_regions
beim Erstellen der Datenbank festzulegen.
GoogleSQL
gcloud spanner databases create DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');"
Ersetzen Sie Folgendes:
DATABASE_ID
: Die permanente Kennzeichnung Ihrer Spanner-Datenbank.INSTANCE_ID
: Die permanente Kennzeichnung Ihrer Spanner-Instanz.READ_LEASE_REGION
: Die Region, in der Sie die Leselease aktivieren möchten. Beispiel:europe-west1
. Sie können die Lesefreigabe für mehrere Regionen aktivieren. Trennen Sie die einzelnen Regionen durch Kommas.
PostgreSQL
gcloud spanner databases create DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID \
SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';"
Ersetzen Sie Folgendes:
DATABASE_ID
: Die permanente Kennzeichnung Ihrer Spanner-Datenbank.INSTANCE_ID
: Die permanente Kennzeichnung Ihrer Spanner-Instanz.READ_LEASE_REGION
: Die Region, in der Sie die Leselease aktivieren möchten. Beispiel:europe-west1
. Sie können die Lesefreigabe für mehrere Regionen aktivieren. Trennen Sie die einzelnen Regionen durch Kommas.
Wenn Sie die Leselease beim Aktualisieren einer vorhandenen Datenbank aktivieren möchten, legen Sie die Option read_lease_regions
in der ALTER DATABASE
-DDL-Anweisung (GoogleSQL, PostgreSQL) fest:
Console
Rufen Sie in der Google Cloud Console die Seite Instanzen auf.
Wählen Sie die Instanz aus, in der Sie die Lese-Lease aktivieren möchten.
Wählen Sie die Datenbank aus, in der Sie die Leselease aktivieren möchten.
Klicken Sie im Navigationsmenü auf Spanner Studio.
Klicken Sie auf der Seite Spanner Studio auf
Neuer Tab oder verwenden Sie den leeren Editor-Tab.Geben Sie die folgende
ALTER DATABASE
-DDL-Anweisung ein.GoogleSQL
ALTER DATABASE DATABASE_ID \ SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');
Ersetzen Sie Folgendes:
DATABASE_ID durch die eindeutige Kennung Ihrer Datenbank.
READ_LEASE_REGION durch die Region, in der Sie die Leselease aktivieren möchten. Beispiel:
europe-west1
. Sie können die Leselease für mehrere Regionen aktivieren. Trennen Sie die einzelnen Regionen durch Kommas.
PostgreSQL
ALTER DATABASE DATABASE_ID \ SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';
Ersetzen Sie Folgendes:
DATABASE_ID durch die eindeutige Kennung Ihrer Datenbank.
READ_LEASE_REGION durch die Region, in der Sie die Leselease aktivieren möchten. Beispiel:
europe-west1
. Sie können die Leselease für mehrere Regionen aktivieren. Trennen Sie die einzelnen Regionen durch Kommas.
Klicken Sie auf Ausführen.
gcloud
Verwenden Sie gcloud spanner databases ddl update
, um die Datenbankoption read_lease_regions
festzulegen.
GoogleSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID \
SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');"
Ersetzen Sie Folgendes:
DATABASE_ID
: Die permanente Kennzeichnung Ihrer Spanner-Datenbank.INSTANCE_ID
: Die permanente Kennzeichnung Ihrer Spanner-Instanz.- READ_LEASE_REGION durch die Region, in der Sie die Leselease aktivieren möchten. Beispiel:
europe-west1
. Sie können die Leselease für mehrere Regionen aktivieren. Trennen Sie die einzelnen Regionen durch Kommas.
PostgreSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID \
SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';"
Ersetzen Sie Folgendes:
DATABASE_ID
: Die permanente Kennzeichnung Ihrer Spanner-Datenbank.INSTANCE_ID
: Die permanente Kennzeichnung Ihrer Spanner-Instanz.- READ_LEASE_REGION durch die Region, in der Sie die Leselease aktivieren möchten. Beispiel:
europe-west1
. Sie können die Leselease für mehrere Regionen aktivieren. Trennen Sie die einzelnen Regionen durch Kommas.
Lesevorgänge deaktivieren
Die Lese-Lease ist standardmäßig deaktiviert.
Wenn Sie die Funktion für eine vorhandene Datenbank aktualisieren und deaktivieren möchten, legen Sie die Option read_lease_regions
in der DDL-Anweisung ALTER DATABASE
(GoogleSQL, PostgreSQL) auf NULL
fest:
Console
Rufen Sie in der Google Cloud Console die Seite Instanzen auf.
Wählen Sie die Instanz aus, in der Sie die Lese-Lease deaktivieren möchten.
Wählen Sie die Datenbank aus, in der Sie die Leselease deaktivieren möchten.
Klicken Sie im Navigationsmenü auf Spanner Studio.
Klicken Sie auf der Seite Spanner Studio auf
Neuer Tab oder verwenden Sie den leeren Editor-Tab.Geben Sie die folgende
ALTER DATABASE
-DDL-Anweisung ein.GoogleSQL
ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = NULL);
Ersetzen Sie DATABASE_ID durch die eindeutige Kennung Ihrer Datenbank.
PostgreSQL
ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = NULL;
Ersetzen Sie DATABASE_ID durch die eindeutige Kennung Ihrer Datenbank.
Klicken Sie auf Ausführen.
gcloud
Verwenden Sie gcloud spanner databases ddl update
, um die Datenbankoption read_lease_regions
festzulegen.
GoogleSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = NULL);"
Ersetzen Sie Folgendes:
DATABASE_ID
: Die permanente Kennzeichnung Ihrer Spanner-Datenbank.INSTANCE_ID
: Die permanente Kennung Ihrer Spanner-Instanz.
PostgreSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = NULL;"
Ersetzen Sie Folgendes:
DATABASE_ID
: Die permanente Kennzeichnung Ihrer Spanner-Datenbank.INSTANCE_ID
: Die permanente Kennung Ihrer Spanner-Instanz.
Best Practices
Um die Vorteile dieser Funktion optimal zu nutzen, sollten Sie gemultiplexte Sitzungen verwenden. Damit können Sie eine große Anzahl gleichzeitiger Anfragen in einer einzigen Sitzung erstellen.
Überwachen
Nachdem Sie die Lese-Lease aktiviert haben, sollten Sie die Latenz im Blick behalten, um zu prüfen, ob die Funktion den gewünschten Effekt erzielt. Ermitteln Sie dazu die Leader-Region und die Regionen, in denen die Leselease aktiviert ist, indem Sie die Informationsschematabelle data_options
(GoogleSQL, PostgreSQL) oder Ihre Datenbank abfragen. In Regionen, in denen die Lesefreigabe aktiviert ist, wird erwartet, dass starke Lesevorgänge eine Latenz innerhalb der Region aufweisen. Gleichzeitig steigt die Schreiblatenz um eine Round-Trip-Zeit zwischen der Leader-Region und der am weitesten entfernten Region mit aktivierter Lesefreigabe.
Mit dem folgenden Spanner-Latenzmesswert können Sie die Latenz von Leseanfragen in Ihren Instanzen überwachen:
spanner.googleapis.com/api/read_request_latencies_by_serving_location
Sie können diesen Messwert mit dem Feld /serving_location
filtern. Das Feld /serving location
gibt den Standort des Spanner-Servers an, von dem die Anfrage verarbeitet wird.
Eine vollständige Liste der verfügbaren Messwerte finden Sie unter Liste der Messwerte für Spanner.
Kostengesichtspunkte
Für Strong Reads, die aus Regionen mit aktivierter Lesefreigabe bereitgestellt werden, werden etwas weniger Rechenressourcen benötigt. Andererseits werden für Schreibvorgänge für Datenbanken, für die die Funktion „Read Lease“ aktiviert ist, etwas mehr Rechenressourcen benötigt. Weitere Informationen finden Sie unter Preise für Spanner-Rechenkapazität.
Die Funktion hat keine Auswirkungen auf andere Preiskomponenten wie Speicher und Netzwerk.
Nächste Schritte
- Weitere Informationen zur Spanner-Replikation
- Weitere Informationen zu Lesezugriffen außerhalb von Transaktionen