Der Spanner PGAdapter unterstützt Anweisungen zur Sitzungsverwaltung, mit denen Sie den Status und das Verhalten Ihrer Verbindung ändern, Transaktionen ausführen und Batches von Anweisungen effizient ausführen können. Alle in diesem Dokument beschriebenen Anweisungen können mit jedem Client oder Treiber verwendet werden, der eine Verbindung zu PGAdapter herstellt.
Eine vollständige Liste der unterstützten PostgreSQL-Treiber und ORMs finden Sie hier. Die folgenden Befehle gelten für Datenbanken im PostgreSQL-Dialekt.
Weitere Informationen zur Verwendung von PGAdapter finden Sie unter PGAdapter starten.
Verbindungsanweisungen
Mit den folgenden Anweisungen werden die Eigenschaften der aktuellen Verbindung geändert oder aufgerufen.
SPANNER.READONLY
Ein boolescher Wert, der angibt, ob sich die Verbindung im Lesemodus befindet. Der Standardwert von false
ist.
SHOW [VARIABLE] SPANNER.READONLY
SET SPANNER.READONLY {TO|=} { true | false }
Sie können den Wert dieser Eigenschaft nur ändern, wenn keine aktive Transaktion vorhanden ist.
▶ Beispiel: Schreibgeschützte Transaktion (zum Maximieren klicken)
Im folgenden Beispiel wird veranschaulicht, wie Sie mit dieser Eigenschaft schreibgeschützte Transaktionen in Spanner ausführen.
SET SPANNER.READONLY = TRUE;
-- This transaction is a read-only transaction.
BEGIN TRANSACTION;
-- The following two queries both use the read-only transaction.
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
SELECT first_name, last_name
FROM albums
ORDER BY title;
-- This shows the read timestamp that was used for the two queries.
SHOW SPANNER.READ_TIMESTAMP;
-- This marks the end of the read-only transaction. The next statement will
-- start a new read-only transaction.
COMMIT;
AUTOCOMMIT
Ein boolescher Wert, der angibt, ob sich die Verbindung im Autocommit-Modus befindet. Der Standardwert von true
ist.
HINWEIS: Normalerweise müssen Sie den Wert dieser Variablen nicht ändern,
indem Sie einen PostgreSQL-Treiber
mit PGAdapter verwenden. Diese Treiber verwalten Transaktionen automatisch für Sie, indem sie bei Bedarf BEGIN
und COMMIT
ausführen. Sie können autocommit
deaktivieren, wenn Sie Befehlszeilentools wie verwenden
psql verwenden, um zu verhindern, dass versehentliche Datenänderungen per Commit durchgeführt werden
automatisch.
SHOW [VARIABLE] AUTOCOMMIT
SET AUTOCOMMIT {TO|=} { true | false }
Sie können den Wert dieser Property nur ändern, wenn keine aktive Transaktion vorhanden ist.
Wenn AUTOCOMMIT
auf „false“ gesetzt ist, wird automatisch eine neue Transaktion initiiert
nachdem Sie COMMIT
oder ROLLBACK
ausgeführt haben. Die erste Anweisung, die Sie ausführen,
startet die Transaktion.
▶ Beispiel: Autocommit (zum Maximieren klicken)
Das folgende Beispiel zeigt, wie die Eigenschaft autocommit
verwendet wird.
-- The default value for AUTOCOMMIT is true.
SHOW AUTOCOMMIT;
-- This insert statement is automatically committed after it is executed, as
-- the connection is in autocommit mode.
INSERT INTO T (id, col_a, col_b) VALUES (1, 100, 1);
-- Turning off autocommit means that a new transaction is automatically started
-- when the next statement is executed.
SET AUTOCOMMIT = FALSE;
-- The following statement starts a new transaction.
INSERT INTO T (id, col_a, col_b) VALUES (2, 200, 2);
-- This statement uses the same transaction as the previous statement.
INSERT INTO T (id, col_a, col_b) VALUES (3, 300, 3);
-- Commit the current transaction with the two INSERT statements.
COMMIT;
-- Transactions can also be executed in autocommit mode by executing the BEGIN
-- statement.
SET AUTOCOMMIT = TRUE;
-- Execute a transaction while in autocommit mode.
BEGIN;
INSERT INTO T (id, col_a, col_b) VALUES (4, 400, 4);
INSERT INTO T (id, col_a, col_b) VALUES (5, 500, 5);
COMMIT;
SPANNER.RETRY_ABORTS_INTERNALLY
Ein boolescher Wert, der angibt, ob die Verbindung automatisch abgebrochen wird
Transaktionen. Der Standardwert ist true
.
SHOW [VARIABLE] SPANNER.RETRY_ABORTS_INTERNALLY
SET SPANNER.RETRY_ABORTS_INTERNALLY {TO|=} { true | false }
Sie können diesen Befehl nur ausführen, nachdem eine Transaktion gestartet wurde (siehe BEGIN [TRANSACTION | WORK]
) und bevor Anweisungen innerhalb der Transaktion ausgeführt werden.
Wenn Sie SPANNER.RETRY_ABORTS_INTERNALLY
aktivieren, erhält die Verbindung einen
Prüfsumme aller Daten, die die Verbindung an die Clientanwendung zurückgibt. Damit wird die Transaktion wiederholt, wenn sie von Spanner abgebrochen wird.
Diese Einstellung ist standardmäßig aktiviert. Wir empfehlen, diese Einstellung zu deaktivieren, wenn Ihre Anwendung wiederholt bereits abgebrochene Transaktionen.
SPANNER.AUTOCOMMIT_DML_MODE
Ein STRING
-Attribut, das den Autocommit-Modus für
Anweisungen der Datenbearbeitungssprache (Data Manipulation Language, DML):
SHOW [VARIABLE] SPANNER.AUTOCOMMIT_DML_MODE
SET SPANNER.AUTOCOMMIT_DML_MODE {TO|=} { 'TRANSACTIONAL' | 'PARTITIONED_NON_ATOMIC' }
Die möglichen Werte sind:
- Im
TRANSACTIONAL
-Modus führt der Treiber DML-Anweisungen als separate atomare Transaktionen aus. Der Treiber erstellt eine neue Transaktion, führt die DML-Anweisung aus und lässt danach entweder bei erfolgreicher Ausführung ein Commit oder im Falle eines Fehlers ein Rollback der Transaktion durchführen. - Im
PARTITIONED_NON_ATOMIC
-Modus führt der Treiber DML-Anweisungen als partitionierte Aktualisierungsanweisungen aus. Partitioniertes update-Anweisung kann als eine Reihe von Transaktionen ausgeführt werden, die jeweils einen Teilmenge der betroffenen Zeilen. Die partitionierte Anweisung liefert abgeschwächter Semantik im Austausch für bessere Skalierbarkeit und Leistung.
Der Standardwert ist TRANSACTIONAL
.
▶ Beispiel: Partitionierte DML (zum Maximieren klicken)
Im folgenden Beispiel wird gezeigt, wie partitionierte DML mit PGAdapter ausgeführt wird.
-- Change autocommit DML mode to use Partitioned DML.
SET SPANNER.AUTOCOMMIT_DML_MODE = 'PARTITIONED_NON_ATOMIC';
-- Delete all singers that have been marked as inactive.
-- This statement is executed using Partitioned DML.
DELETE
FROM singers
WHERE active=false;
-- Change DML mode back to standard `TRANSACTIONAL`.
SET SPANNER.AUTOCOMMIT_DML_MODE = 'TRANSACTIONAL';
STATEMENT_TIMEOUT
Ein Attribut vom Typ STRING
, das den aktuellen Zeitüberschreitungswert für Anweisungen angibt.
SHOW [VARIABLE] STATEMENT_TIMEOUT
SET STATEMENT_TIMEOUT {TO|=} { '<int8>{ s | ms | us | ns }' | <int8> | DEFAULT }
Der Wert int8
ist eine ganze Zahl gefolgt von einem Suffix, das die Zeit angibt
Einheit. Der Wert DEFAULT
bedeutet, dass kein Wert für die Zeitüberschreitung festgelegt ist. Wenn ein
Anweisungszeitlimit festgelegt wurde, Anweisungen, die länger dauern als
angegebener Zeitüberschreitungswert verursacht einen Zeitüberschreitungsfehler und macht die
Transaktion.
Folgende Zeiteinheiten werden unterstützt:
s
: Sekundenms
: Millisekundenus
: Mikrosekundenns
: Nanosekunden
DEFAULT
beträgt 0 Sekunden, es gibt also kein Zeitlimit. Eine int8
-Nummer ohne
Einheiten steht für int8 ms
. Mit den folgenden Befehlen wird beispielsweise
Zeitlimit für Anweisung auf 2 Sekunden festlegen.
SET STATEMENT_TIMEOUT TO 2000;
SET STATEMENT_TIMEOUT TO '2s';
Eine Zeitüberschreitung für Anweisungen während einer Transaktion macht die Transaktion ungültig.
nachfolgende Anweisungen in der ungültigen Transaktion (außer ROLLBACK
) schlagen fehl.
READ_ONLY_STALENESS
Eine Eigenschaft vom Typ STRING
, die den aktuellen
die schreibgeschützte Veralterung,
Spanner verwendet für schreibgeschützte Transaktionen und Abfragen in AUTOCOMMIT
.
SHOW [VARIABLE] SPANNER.READ_ONLY_STALENESS SET SPANNER.READ_ONLY_STALENESS {TO|=} staleness_type staleness_type: { 'STRONG' | 'MIN_READ_TIMESTAMP timestamp' | 'READ_TIMESTAMP timestamp' | 'MAX_STALENESS <int8>{ s | ms | us | ns }' | 'EXACT_STALENESS <int8>{ s | ms | us | ns }' }
Der Wert schreibgeschützter Veralterung gilt für alle
nachfolgende schreibgeschützte Transaktionen und für alle Abfragen im AUTOCOMMIT
-Modus.
Der Standardwert ist STRONG
.
Die Optionen für Zeitstempelgrenzen sind folgende:
STRONG
weist Spanner an, einen starken Lesevorgang auszuführen.MAX_STALENESS
definiert das Zeitintervall, das Spanner verwendet, um einen Lesevorgang von begrenzter Veralterung im Vergleich zunow()
auszuführen.MIN_READ_TIMESTAMP
definiert eine absolute Zeit, die Spanner für die Ausführung verwendet einen Lesevorgang von begrenzter Veralterung.EXACT_STALENESS
definiert das Zeitintervall, das Spanner zum Ausführen eines exakte Veralterung, relativ zunow()
.READ_TIMESTAMP
definiert eine absolute Zeit, die Spanner verwendet, um eine „exakte Veralterung“ zu lesen.
Zeitstempel müssen das folgende Format haben:
YYYY-[M]M-[D]D [[H]H:[M]M:[S]S[.DDDDDD]][timezone]
Folgende Zeiteinheiten werden zum Festlegen der Werte MAX_STALENESS
und EXACT_STALENESS
unterstützt:
s
: Sekundenms
: Millisekundenus
: Mikrosekundenns
: Nanosekunden
Sie können den Wert dieser Eigenschaft nur ändern, wenn keine aktive Transaktion vorhanden ist.
▶ Beispiel: Staleness bei Lesezugriff (zum Maximieren klicken)
Das folgende Beispiel zeigt, wie Sie Abfragen mit einem benutzerdefinierten Gültigkeitszeitraum mit PGAdapter ausführen.
-- Set the read-only staleness to MAX_STALENESS 10 seconds.
SET SPANNER.READ_ONLY_STALENESS = 'MAX_STALENESS 10s';
-- Execute a query in auto-commit mode. This will return results that are up to
-- 10 seconds stale.
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
-- Read-only staleness can also be applied to read-only transactions.
-- MAX_STALENESS is however only allowed for queries in autocommit mode.
-- Change the staleness to EXACT_STALENESS and start a read-only transaction.
SET SPANNER.READ_ONLY_STALENESS = 'EXACT_STALENESS 10s';
BEGIN;
SET TRANSACTION READ ONLY;
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
SELECT title, singer_id
FROM albums
ORDER BY title;
COMMIT;
-- Read staleness can also be an exact timestamp.
SET SPANNER.READ_ONLY_STALENESS = 'READ_TIMESTAMP 2024-01-26T10:36:00Z';
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
SPANNER.OPTIMIZER_VERSION
Eine Eigenschaft vom Typ STRING
, die die Version des Optimierers angibt. Die Version ist entweder eine Zahl oder „LATEST
“.
SHOW [VARIABLE] SPANNER.OPTIMIZER_VERSION
SET SPANNER.OPTIMIZER_VERSION {TO|=} { 'version'|'LATEST'|'' }
Legt die Version des Optimierungstools fest, die für alle folgenden Anweisungen in
die Verbindung. Wenn Sie die Optimierungsversion auf ''
(den leeren String) festlegen, wird die neueste Version verwendet. Ist keine Optimierungsversion festgelegt,
Spanner verwendet die Optimierungsversion, die in der Datenbank festgelegt ist
Der Standardwert ist ''
.
▶ Beispiel: Version des Optimierungstools (zum Maximieren klicken)
Das folgende Beispiel zeigt, wie Abfragen mit einem bestimmten
Optimize-Version mit
PGAdapter aus.
-- Set the optimizer version to 5 and execute a query.
SET SPANNER.OPTIMIZER_VERSION = '5';
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
-- Execute the same query with the latest optimizer version.
SET SPANNER.OPTIMIZER_VERSION = 'LATEST';
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
-- Revert back to using the default optimizer version that has been set for the
-- database.
SET SPANNER.OPTIMIZER_VERSION = '';
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
SPANNER.OPTIMIZER_STATISTICS_PACKAGE
Eine Eigenschaft vom Typ STRING
, die den aktuellen
Optimierungstool Statistics-Paket
das von dieser Verbindung verwendet wird.
SHOW [VARIABLE] SPANNER.OPTIMIZER_STATISTICS_PACKAGE
SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE {TO|=} { 'package'|'' }
Legt das Optimierungstool-Statistikpaket fest, das für alle folgenden Anweisungen in verwendet werden soll
die Verbindung. <package>
muss ein gültiger Paketname sein. Wenn kein Paket mit Optimierungsstatistiken festgelegt ist, verwendet Spanner das Paket mit Optimierungsstatistiken, das auf Datenbankebene festgelegt ist.
Der Standardwert ist ''
.
▶ Beispiel: Statistikpaket für den Optimierer (zum Maximieren anklicken)
Das folgende Beispiel zeigt, wie Sie Abfragen mit einem bestimmten Statistikpaket für das Abfrageoptimierungstool mit PGAdapter ausführen.
-- Show the available optimizer statistics packages in this database.
SELECT * FROM INFORMATION_SCHEMA.SPANNER_STATISTICS;
-- Set the optimizer statistics package and execute a query.
SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE = 'auto_20240124_06_47_29UTC';
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
-- Execute the same query with the default optimizer statistics package.
SET SPANNER.OPTIMIZER_VERSION = '';
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
SPANNER.RETURN_COMMIT_STATS
Ein Attribut vom Typ BOOL
, das angibt, ob Statistiken für Transaktionen über diese Verbindung zurückgegeben werden sollen. Sie können die zurückgegebenen Statistiken anzeigen, indem Sie Folgendes ausführen:
den Befehl SHOW [VARIABLE] COMMIT_RESPONSE
.
SHOW [VARIABLE] SPANNER.RETURN_COMMIT_STATS
SET SPANNER.RETURN_COMMIT_STATS {TO|=} { true | false }
Der Standardwert ist false
.
▶ Beispiel: Commit-Statistiken (zum Maximieren klicken)
Im folgenden Beispiel wird gezeigt, wie Sie Commit-Statistiken für eine Transaktion mit PGAdapter aufrufen.
-- Enable the returning of commit stats.
SET SPANNER.RETURN_COMMIT_STATS = true;
-- Execute a transaction.
BEGIN;
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1), (2, 200, 2), (3, 300, 3);
COMMIT;
-- View the commit response with the transaction statistics for the last
-- transaction that was committed.
SHOW SPANNER.COMMIT_RESPONSE;
SPANNER.RPC_PRIORITY
Eine Eigenschaft vom Typ STRING
, die die relative Priorität für
Spanner-Anfragen. Die Priorität dient als Hinweis für den Spanner-Scheduler und ist keine Garantie für die Ausführungsreihenfolge.
SHOW [VARIABLE] SPANNER.RPC_PRIORITY
SET SPANNER.RPC_PRIORITY {TO|=} {'HIGH'|'MEDIUM'|'LOW'|'NULL'}
'NULL'
bedeutet, dass die Anfrage keinen Hinweis enthalten sollte.
Der Standardwert ist 'NULL'
.
Sie können auch einen Anweisungshinweis verwenden, um die RPC-Priorität anzugeben:
/*@RPC_PRIORITY=PRIORITY_LOW*/ SELECT * FROM Albums
Weitere Informationen finden Sie unter Priority
.
Transaktionsanweisungen
Mit den folgenden Anweisungen werden Spanner-Transaktionen verwaltet und mit Commit durchgeführt.
TRANSAKTIONSISOLIERUNGSSTUFE
SHOW [ VARIABLE ] TRANSACTION ISOLATION LEVEL
Gibt eine Ergebnismenge mit einer Zeile und einer Spalte vom Typ STRING
zurück. Der zurückgegebene Wert ist immer serializable
, da dies die einzige unterstützte Isolationsebene für Spanner-Datenbanken im PostgreSQL-Dialekt ist.
SPANNER.READ_TIMESTAMP
SHOW [VARIABLE] SPANNER.READ_TIMESTAMP
Gibt eine Ergebnismenge mit einer Zeile und einer Spalte vom Typ TIMESTAMP
zurück, die den Lesezeitstempel der letzten schreibgeschützten Transaktion enthält. Diese Anweisung gibt nur dann einen Zeitstempel zurück, wenn entweder eine schreibgeschützte Transaktion noch aktiv ist und mindestens eine Abfrage ausgeführt hat, oder unmittelbar nachdem ein Commit einer schreibgeschützten Transaktion durchgeführt und bevor eine neue Transaktion begonnen wurde. Andernfalls lautet das Ergebnis NULL
.
▶ Beispiel: Zeitstempel lesen (zum Vergrößern klicken)
Im folgenden Beispiel wird gezeigt, wie Sie den Zeitstempel der letzten Lesevorgänge für einen schreibgeschützten Vorgang mit PGAdapter aufrufen.
-- Execute a query in autocommit mode using the default read-only staleness
-- (strong).
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
-- Shows the read timestamp that was used for the previous query.
SHOW SPANNER.READ_TIMESTAMP;
-- Set a non-deterministic read-only staleness and execute the same query.
SET SPANNER.READ_ONLY_STALENESS = 'MAX_STALENESS 20s';
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
-- Shows the read timestamp that was used for the previous query. The timestamp
-- is determined by Spanner, and is guaranteed to be no less than 20
-- seconds stale.
SHOW SPANNER.READ_TIMESTAMP;
-- The read timestamp of a read-only transaction can also be retrieved.
SET SPANNER.READ_ONLY_STALENESS = 'STRONG';
BEGIN;
SET TRANSACTION READ ONLY;
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
-- Shows the read timestamp of the current read-only transaction. All queries in
-- this transaction will use this read timestamp.
SHOW SPANNER.READ_TIMESTAMP;
SELECT title
FROM albums
ORDER BY title;
-- The read timestamp is the same as for the previous query, as all queries in
-- the same transaction use the same read timestamp.
SHOW SPANNER.READ_TIMESTAMP;
COMMIT;
SPANNER.COMMIT_TIMESTAMP
SHOW [VARIABLE] SPANNER.COMMIT_TIMESTAMP
Gibt eine Ergebnismenge mit einer Zeile und einer Spalte vom Typ TIMESTAMP
zurück, die Folgendes enthält:
den Commit-Zeitstempel der letzten Lese-/Schreibtransaktion, die Spanner
verpflichtet. Diese Anweisung gibt nur dann einen Zeitstempel zurück, wenn Sie sie ausführen, nachdem Sie ein Commit einer Lese-/Schreibtransaktion durchgeführt haben und bevor Sie nachfolgende SELECT
-, DML
- oder Schemaänderungs-Anweisungen ausführen. Andernfalls lautet das Ergebnis NULL
.
▶ Beispiel: Commit-Zeitstempel (zum Maximieren anklicken)
Das folgende Beispiel zeigt, wie Sie den Zeitstempel des letzten Commits für eine
mit PGAdapter schreibt.
-- Execute a DML statement.
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1), (2, 200, 2), (3, 300, 3);
-- Show the timestamp that the statement was committed.
SHOW SPANNER.COMMIT_TIMESTAMP;
SPANNER.COMMIT_RESPONSE
SHOW [VARIABLE] SPANNER.COMMIT_RESPONSE
Gibt eine Ergebnismenge mit einer Zeile und zwei Spalten zurück:
COMMIT_TIMESTAMP
(type=TIMESTAMP
) gibt an, wann der letzte Transaktion wurde mit Commit durchgeführt.MUTATION_COUNT
(type=int8
) Gibt an, wie viele Mutationen in der mit Commit durchgeführten Transaktion. Dieser Wert ist bei Ausführung im Emulator.
Die Mutationszahl ist nur verfügbar, wenn SET RETURN_COMMIT_STATS
war
vor dem Commit der Transaktion auf true
gesetzt.
▶ Beispiel: Commit-Antwort (zum Maximieren klicken)
Das folgende Beispiel zeigt, wie Sie die letzte Commit-Antwort für eine
mit PGAdapter schreibt.
-- Enable returning commit stats in addition to the commit timestamp.
SET SPANNER.RETURN_COMMIT_STATS = true;
-- Execute a DML statement.
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1), (2, 200, 2), (3, 300, 3);
-- Show the timestamp that the statement was committed.
SHOW SPANNER.COMMIT_RESPONSE;
{ START | BEGIN } [ TRANSAKTION | ARBEIT ]
{ START | BEGIN } [ TRANSACTION | WORK ] [{ READ ONLY | READ WRITE }]
Startet eine neue Transaktion. Die Keywords TRANSACTION
und WORK
sind optional, äquivalent und haben keine Auswirkungen.
- Verwenden Sie
COMMIT
oderROLLBACK
, um eine Transaktion zu beenden. - Wenn Sie den
AUTOCOMMIT
-Modus aktiviert haben, entfernt diese Anweisung vorübergehend die Verbindung aus demAUTOCOMMIT
-Modus. Die Verbindung kehrt in denAUTOCOMMIT
-Modus zurück, wenn die Transaktion endet. - Wenn
READ ONLY
oderREAD WRITE
nicht angegeben ist, ist der Transaktionsmodus durch den Standard-Transaktionsmodus der Sitzung festgelegt. Diese Standardeinstellung ist mit dem BefehlSET SESSION CHARACTERISTICS AS TRANSACTION
festgelegt werden.
Sie können diese Anweisung nur ausführen, wenn keine aktive Transaktion vorhanden ist.
▶ Beispiel: BEGIN TRANSAKTION (zum Maximieren klicken)
Das folgende Beispiel zeigt, wie verschiedene Arten von Transaktionen mit PGAdapter gestartet werden.
-- This starts a transaction using the current defaults of this connection.
-- The value of SPANNER.READONLY determines whether the transaction is a
-- read/write or a read-only transaction.
BEGIN;
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1);
COMMIT;
-- Set SPANNER.READONLY to TRUE to use read-only transactions by default.
SET SPANNER.READONLY=TRUE;
-- This starts a read-only transaction.
BEGIN;
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
COMMIT;
-- Use the 'READ WRITE' or 'READ ONLY' qualifier in the BEGIN statement to
-- override the current default of the connection.
SET SPANNER.READONLY=FALSE;
BEGIN READ ONLY;
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
COMMIT;
COMMIT [TRANSACTION | WORK]
COMMIT [TRANSACTION | WORK]
Führt ein Commit der aktuellen Transaktion durch. Die Keywords TRANSACTION
und WORK
sind optional und äquivalent und haben keine Auswirkungen.
- Durch das Commit einer Lese-/Schreibtransaktion werden alle Aktualisierungen dieser Transaktion für andere Transaktionen sichtbar und alle Sperren der Transaktion in Spanner werden aufgehoben.
- Durch das Commit einer schreibgeschützten Transaktion wird die aktuelle schreibgeschützte Transaktion beendet. Jede nachfolgende Anweisung startet eine neue Transaktion. Es gibt keinen semantischen Unterschied zwischen
COMMIT
undROLLBACK
für eine schreibgeschützte Transaktion.
Sie können diese Anweisung nur ausführen, während eine aktive Transaktion vorhanden ist.
▶ Beispiel: COMMIT TRANSACTION (zum Maximieren klicken)
Das folgende Beispiel zeigt, wie ein Commit für eine Transaktion mit
PGAdapter aus.
-- Execute a regular read/write transaction.
BEGIN;
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1);
COMMIT;
-- Execute a read-only transaction. Read-only transactions also need to be
-- either committed or rolled back in PGAdapter in order to mark the
-- end of the transaction.
BEGIN READ ONLY;
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
COMMIT;
ROLLBACK [TRANSACTION | WORK]
ROLLBACK [TRANSACTION | WORK]
Führt ein ROLLBACK
der aktuellen Transaktion durch. Die Keywords TRANSACTION
und
WORK
sind optional und äquivalent und haben keine Auswirkungen.
- Durch das Ausführen einer
ROLLBACK
einer Lese-Schreib-Transaktion werden alle zwischengespeicherten Mutationen ausführen, ein Rollback der Transaktion in Spanner durchführen und sperrt die aufbewahrte Transaktion. - Ein
ROLLBACK
einer schreibgeschützten Transaktion beendet die aktuelle schreibgeschützte Transaktion. Jede nachfolgende Anweisung startet eine neue Transaktion. Es gibt keinen semantischen Unterschied zwischenCOMMIT
undROLLBACK
für eine schreibgeschützte Transaktion auf einer Verbindung.
Sie können diese Anweisung nur ausführen, während eine aktive Transaktion vorhanden ist.
▶ Beispiel: ROLLBACK TRANSACTION (zum Maximieren klicken)
Das folgende Beispiel zeigt, wie Sie mit
PGAdapter aus.
-- Use ROLLBACK to undo the effects of a transaction.
BEGIN;
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1);
-- This will ensure that the insert statement is not persisted in the database.
ROLLBACK;
-- Read-only transactions also need to be either committed or rolled back in
-- PGAdapter in order to mark the end of the transaction. There is no
-- semantic difference between rolling back or committing a read-only
-- transaction.
BEGIN READ ONLY;
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
ROLLBACK;
SET TRANSACTION
SET TRANSACTION { READ ONLY | READ WRITE }
Legt den Transaktionsmodus für die aktuelle Transaktion fest.
Sie können diese Anweisung nur ausführen, wenn AUTOCOMMIT
den Wert false
hat, oder
wenn Sie eine Transaktion durch Ausführen
BEGIN [TRANSACTION | WORK]
und noch keine Anweisungen in der Transaktion ausgeführt haben.
Diese Anweisung legt den Transaktionsmodus nur für die aktuelle Transaktion fest. Wann?
oder ein Rollback der Transaktion durchgeführt wird, verwendet die nächste Transaktion den Standardwert
Modus für die Verbindung. (Siehe SET SESSION CHARACTERISTICS
.)
▶ Beispiel: TRANSAKTION FESTLEGEN (zum Maximieren klicken)
Das folgende Beispiel zeigt, wie Transaktionseigenschaften mit
PGAdapter aus.
-- Start a transaction and set the transaction mode to read-only.
BEGIN;
SET TRANSACTION READ ONLY;
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
-- Commit the read-only transaction to mark the end of the transaction.
COMMIT;
-- Start a transaction and set the transaction mode to read/write.
BEGIN;
SET TRANSACTION READ WRITE;
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1);
COMMIT;
SESSION CHARACTERISTICS FESTLEGEN
SET SESSION CHARACTERISTICS AS TRANSACTION { READ ONLY | READ WRITE }
Legt den Standardtransaktionsmodus für Transaktionen in der Sitzung auf READ ONLY
oder READ WRITE
fest. Diese Anweisung ist nur zulässig, wenn keine
aktive Transaktion.
Diese Einstellung kann mit dem Befehl SET TRANSACTION
überschrieben werden.
▶ Beispiel: MERKMALE DER SITZUNG FESTLEGEN (zum Maximieren klicken)
Im folgenden Beispiel wird gezeigt, wie Sitzungsmerkmale mit PGAdapter festgelegt werden.
-- Set the default transaction mode to read-only.
SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;
-- This will now start a read-only transaction.
BEGIN;
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
COMMIT;
-- You can override the default transaction mode with the SET TRANSACTION
-- statement.
SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE;
BEGIN;
SET TRANSACTION READ ONLY;
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
COMMIT;
SPANNER.STATEMENT_TAG
Eine Property vom Typ STRING
, die das Anfrage-Tag für die nächste Anweisung enthält.
SHOW [ VARIABLE ] SPANNER.STATEMENT_TAG
SET SPANNER.STATEMENT_TAG {TO|=} 'tag-name'
Legt das Anfrage-Tag für die nächste auszuführende Anweisung fest. Nur eine
Tag kann pro Anweisung festgelegt werden. Das Tag umfasst nicht mehrere Anweisungen. sie
muss auf Anweisungsbasis festgelegt werden. Ein Anfrage-Tag kann entfernt werden, indem es
in den leeren String (''
).
Der Standardwert ist ''
.
Sie können für dieselbe Anweisung sowohl Transaktions- als auch Anweisungs-Tags festlegen.
Sie können auch einen Anweisungshinweis verwenden, um ein Anweisungs-Tag hinzuzufügen:
/*@STATEMENT_TAG='my-tag'*/ SELECT * FROM albums
Weitere Informationen finden Sie unter Fehlerbehebung bei Anfrage- und Transaktions-Tags.
▶ Beispiel: Statement-Tags (zum Maximieren klicken)
Das folgende Beispiel zeigt, wie Anweisungs-Tags mit
PGAdapter aus.
-- Set the statement tag that should be included with the next statement.
SET SPANNER.STATEMENT_TAG = 'tag1';
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
-- The statement tag property is cleared after each statement execution.
SHOW SPANNER.STATEMENT_TAG;
-- Set another tag for the next statement.
SET SPANNER.STATEMENT_TAG = 'tag2';
SELECT title
FROM albums
ORDER BY title;
-- Set a statement tag with a query hint.
/*@STATEMENT_TAG='tag3'*/
SELECT track_number, title
FROM tracks
WHERE album_id=1 AND singer_id=1
ORDER BY track_number;
SPANNER.TRANSACTION_TAG
Eine Property vom Typ STRING
, die das Transaktions-Tag für die nächste
Transaktion.
SHOW [ VARIABLE ] SPANNER.TRANSACTION_TAG
SET SPANNER.TRANSACTION_TAG {TO|=} 'tag-name'
Legt das Transaktions-Tag für die aktuelle Transaktion fest, die ausgeführt werden soll. Pro Transaktion kann nur ein Tag festgelegt werden. Das Tag deckt nicht mehrere Transaktionen ab, sondern muss pro Transaktion festgelegt werden. Ein Transaktions-Tag kann wie folgt entfernt werden:
auf den leeren String (''
) festgelegt. Das Transaktions-Tag muss festgelegt werden vor
alle Anweisungen in der Transaktion ausgeführt wurden.
Der Standardwert ist ''
.
Sie können sowohl Transaktions- als auch Kontoabrechnungs-Tags für dieselbe Kontoabrechnung festlegen.
Weitere Informationen finden Sie unter Fehlerbehebung mit Anfrage- und Transaktions-Tags
▶ Beispiel: Transaktions-Tags (zum Maximieren klicken)
Im folgenden Beispiel wird gezeigt, wie Transaktions-Tags mit PGAdapter festgelegt werden.
BEGIN;
-- Set the transaction tag for the current transaction.
SET SPANNER.TRANSACTION_TAG = 'transaction-tag-1';
-- Set the statement tag that should be included with the next statement.
-- The statement will include both the statement tag and the transaction tag.
SET SPANNER.STATEMENT_TAG = 'select-statement';
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
-- The statement tag property is cleared after each statement execution.
SHOW SPANNER.STATEMENT_TAG;
-- Set another tag for the next statement.
SET SPANNER.STATEMENT_TAG = 'insert-statement';
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1);
COMMIT;
-- The transaction tag property is cleared when the transaction finishes.
SHOW SPANNER.TRANSACTION_TAG;
Batch-Anweisungen
Die folgenden Anweisungen verwalten Batches von DDL-Anweisungen und senden sie an Spanner.
START BATCH DDL
START BATCH DDL
Startet einen Batch von DDL-Anweisungen auf der Verbindung. Alle nachfolgenden Anweisungen im Batch müssen DDL-Anweisungen sein. Die DDL-Anweisungen werden lokal gepuffert und als ein Batch an Spanner gesendet, wenn Sie RUN BATCH
ausführen.
Die Ausführung mehrerer DDL-Anweisungen in einem Batch ist in der Regel schneller als die separate Ausführung der Anweisungen.
Sie können diese Anweisung nur ausführen, wenn keine aktive Transaktion vorhanden ist.
▶ Beispiel: DDL-Batch (zum Maximieren anklicken)
Das folgende Beispiel zeigt, wie Sie einen DDL-Batch mit
PGAdapter aus.
-- Start a DDL batch. All following statements must be DDL statements.
START BATCH DDL;
-- This statement is buffered locally until RUN BATCH is executed.
CREATE TABLE singers (
id bigint primary key,
first_name varchar,
last_name varchar
);
-- This statement is buffered locally until RUN BATCH is executed.
CREATE TABLE albums (
id bigint primary key,
title varchar,
singer_id bigint,
constraint fk_albums_singers foreign key (singer_id) references singers (id)
);
-- This runs the DDL statements as one batch.
RUN BATCH;
RUN BATCH
RUN BATCH
Sendet alle gepufferten DDL-Anweisungen im aktuellen DDL-Batch an die Datenbank, wartet auf die Ausführung dieser Anweisungen durch Spanner und beendet den aktuellen DDL-Batch.
Wenn Spanner nicht mindestens eine DDL-Anweisung ausführen kann, gibt RUN BATCH
einen Fehler für die erste DDL-Anweisung zurück, die von Spanner nicht ausgeführt werden kann. Andernfalls wird RUN BATCH
erfolgreich zurückgegeben.
ABORT BATCH
Löscht alle gepufferten DDL-Anweisungen im aktuellen DDL-Batch und beendet den Batch.
Sie können diese Anweisung nur ausführen, wenn ein DDL-Batch aktiv ist. Sie können ABORT BATCH
verwenden, unabhängig davon, ob im Batch gepufferte DDL-Anweisungen vorhanden sind oder nicht. Alle vorherigen DDL-Anweisungen im Batch werden abgebrochen.
▶ Beispiel: DDL-Batch abbrechen (zum Maximieren klicken)
Im folgenden Beispiel wird gezeigt, wie ein DDL-Batch mit PGAdapter abgebrochen wird.
-- Start a DDL batch. All following statements must be DDL statements.
START BATCH DDL;
-- The following statements are buffered locally.
CREATE TABLE singers (
id bigint primary key,
first_name varchar,
last_name varchar
);
CREATE TABLE albums (
id bigint primary key,
title varchar,
singer_id bigint,
constraint fk_albums_singers foreign key (singer_id) references singers (id)
);
-- This aborts the DDL batch and removes the DDL statements from the buffer.
ABORT BATCH;
START BATCH DML
Mit den folgenden Anweisungen werden die beiden DML-Anweisungen zusammengefasst und in einem Aufruf an den Server gesendet. Ein DML-Batch kann als Teil einer Transaktion oder im automatischen Commit-Modus ausgeführt werden.
START BATCH DML;
INSERT INTO MYTABLE (ID, NAME) VALUES (1, 'ONE');
INSERT INTO MYTABLE (ID, NAME) VALUES (2, 'TWO');
RUN BATCH;
▶ Beispiel: DML-Batch (zum Maximieren klicken)
Das folgende Beispiel zeigt, wie ein DML-Batch mit PGAdapter ausgeführt wird.
-- Start a DML batch. All following statements must be a DML statement.
START BATCH DML;
-- The following statements are buffered locally.
INSERT INTO MYTABLE (ID, NAME) VALUES (1, 'ONE');
INSERT INTO MYTABLE (ID, NAME) VALUES (2, 'TWO');
-- This sends the statements to Spanner.
RUN BATCH;
-- DML batches can also be part of a read/write transaction.
BEGIN;
-- Insert a row using a single statement.
INSERT INTO MYTABLE (ID, NAME) VALUES (3, 'THREE');
-- Insert two rows using a batch.
START BATCH DML;
INSERT INTO MYTABLE (ID, NAME) VALUES (4, 'FOUR');
INSERT INTO MYTABLE (ID, NAME) VALUES (5, 'FIVE');
RUN BATCH;
-- Rollback the current transaction. This rolls back both the single DML
-- statement and the DML batch.
ROLLBACK;
Speicherpunktbefehle
Savepoints in PGAdapter werden emuliert. Wenn Sie zu einem Positionsspeicherpunkt zurückgehen, wird die gesamte Transaktion rückgängig gemacht und bis zu dem Punkt wiederholt, an dem der Positionsspeicherpunkt festgelegt wurde. Dieser Vorgang schlägt mit einer Meldung fehl:
AbortedDueToConcurrentModificationException
-Fehler, wenn die zugrunde liegenden Daten
wurde von der Transaktion verwendet, bis der Speicherpunkt geändert wurde.
Das Erstellen und Freigeben von Savepoints ist immer erfolgreich, wenn Savepoint-Unterstützung aktiviert.
Mit den folgenden Anweisungen werden emulierte Savepoints in Transaktionen aktiviert und deaktiviert.
SPANNER.SAVEPOINT_SUPPORT
SHOW [VARIABLE] SPANNER.SAVEPOINT_SUPPORT
SET SPANNER.SAVEPOINT_SUPPORT = { 'DISABLED' | 'FAIL_AFTER_ROLLBACK' | 'ENABLED' }
Ein Attribut vom Typ STRING
, das die aktuelle SAVEPOINT_SUPPORT
-Konfiguration angibt. Folgende Werte sind möglich:
DISABLED
: Alle Savepoint-Befehle sind deaktiviert und schlagen fehl.FAIL_AFTER_ROLLBACK
: Savepoint-Befehle sind aktiviert. Rollback auf einen Mit dem Savepoint wird die gesamte Transaktion zurückgesetzt. Der Vorgang schlägt fehl, wenn Sie versuchen, die Transaktion nach dem Rollback auf einen Savepoint verwenden.ENABLED
: Alle Savepoint-Befehle sind aktiviert. Rollback auf einen Savepoint durchführen macht die Transaktion rückgängig und der Wiederholungsversuch wird bis zum Savepoint ausgeführt. Dieser Vorgang schlägt mit dem FehlerAbortedDueToConcurrentModificationException
fehl, wenn sich die zugrunde liegenden Daten, die von der Transaktion bis zum Savepoint verwendet wurden, geändert haben.
Der Standardwert ist ENABLED
.
Sie können diese Anweisung nur ausführen, wenn keine aktive Transaktion vorhanden ist.
SAVEPOINT Savepoint_name
SAVEPOINT savepoint-name;
SAVEPOINT
erstellt einen neuen Savepoint innerhalb der aktuellen Transaktion.
Eine Transaktion kann auf einen Speicherpunkt zurückgesetzt werden, um alle Vorgänge rückgängig zu machen, bei denen
seit der Erstellung des Speicherpunkts ausgeführt wurden.
▶ Beispiel: Savepoint (zum Maximieren klicken)
Das folgende Beispiel zeigt, wie Sie mit PGAdapter Speicherpunkte erstellen.
-- Start a transaction and execute an insert statement.
BEGIN;
INSERT INTO T (id, col_a, col_b) VALUES (1, 100, 1);
-- Set a savepoint and then execute another insert statement.
SAVEPOINT one_row_inserted;
INSERT INTO T (id, col_a, col_b) VALUES (2, 200, 2);
-- Roll back to the savepoint. This will undo all statements that have been
-- executed after the savepoint.
ROLLBACK TO one_row_inserted;
-- This only commits the first insert statement.
COMMIT;
ROLLBACK ZU "savepoint_name"
ROLLBACK TO savepoint_name
Führt ein Rollback der aktuellen Transaktion auf den Savepoint mit dem angegebenen Namen durch.
Ein Rollback auf einen Speicherpunkt ist nicht in allen Fällen erfolgreich.
Wenn Sie zu einem Positionsspeicherpunkt zurückgehen, wird die gesamte Transaktion rückgängig gemacht und bis zu dem Punkt wiederholt, an dem der Positionsspeicherpunkt festgelegt wurde. Dieser Vorgang schlägt mit einer Meldung fehl:
AbortedDueToConcurrentModificationException
, wenn die zugrunde liegenden Daten
die von der Transaktion verwendet wurden,
bis zum Savepoint.
Savepoint_name [SAVEPOINT] FREIGEBEN
RELEASE savepoint_name
Entfernt den Savepoint aus der aktuellen Transaktion. Sie können damit keine ROLLBACK TO savepoint_name
-Anweisung mehr ausführen.
Vordefinierte Abfragen
Mit den folgenden Anweisungen werden vorbereitete Anweisungen erstellt und ausgeführt.
VORBEREITEN
PREPARE statement_name [(data_type, ...)] AS statement
Bereitet eine Anweisung zu dieser Verbindung vor. Die Anweisung wird geparst und validiert. von Spanner erstellt und im Arbeitsspeicher in PGAdapter gespeichert.
▶ Beispiel: Vordefinierte Anweisungen (zum Maximieren klicken)
Das folgende Beispiel zeigt, wie vorbereitete Anweisungen mit
PGAdapter aus.
-- Create a prepared statement that can be used to insert a single row.
PREPARE insert_t AS INSERT INTO T (id, col_a, col_b) VALUES ($1, $2, $3);
-- The prepared statement can be used to insert rows both in autocommit, in a
-- transaction, and in DML batches.
-- Execute in autocommit.
EXECUTE insert_t (1, 100, 1);
-- Execute in transaction.
BEGIN;
EXECUTE insert_t (2, 200, 2);
EXECUTE insert_t (3, 300, 3);
COMMIT;
-- Execute in a DML batch.
START BATCH DML;
EXECUTE insert_t (4, 400, 4);
EXECUTE insert_t (5, 500, 5);
RUN BATCH;
-- Prepared statements can be removed with the DEALLOCATE command.
DEALLOCATE insert_t;
EXECUTE
EXECUTE statement_name [(value, ...)]
Führt eine Anweisung aus, die für diese Verbindung mit PREPARE
erstellt wurde.
▶ Beispiel: Ausführen (zum Maximieren klicken)
Im folgenden Beispiel wird gezeigt, wie Sie Anweisungen mit PGAdapter vorbereiten und ausführen.
-- Create a prepared statement.
PREPARE my_statement AS insert into my_table (id, value) values ($1, $2);
-- Execute the statement twice with different parameter values.
EXECUTE my_statement (1, 'One');
EXECUTE my_statement (2, 'Two');
DEALLOCATE
DEALLOCATE statement_name
Entfernt eine vorbereitete Anweisung aus dieser Verbindung.
Kopieren
PGAdapter unterstützt einen Teil des PostgreSQL-Befehls COPY
.
COPY table_name FROM STDIN
COPY table_name FROM STDIN [BINARY]
Kopiert Daten von stdin
nach Spanner. Es ist effizienter,
COPY
zum Importieren eines großen Datasets in Spanner als zum Ausführen
INSERT
-Anweisungen.
COPY
kann mit SPANNER.AUTOCOMMIT_DML_MODE
kombiniert werden, um einen
nicht atomare Transaktion. So können bei der Transaktion mehr Mutationen ausgeführt werden als das Standardlimit für Transaktionsmutationen.
▶ Beispiel: Kopieren (zum Maximieren klicken)
Die folgenden Beispiele zeigen, wie Sie mit PGAdapter Daten von und nach Spanner kopieren.
create table numbers (number bigint not null primary key, name varchar);
Führen Sie einen atomaren COPY
-Vorgang aus:
cat numbers.txt | psql -h /tmp -d test-db -c "copy numbers from stdin;"
Nicht atomaren COPY
-Vorgang ausführen:
cat numbers.txt | psql -h /tmp -d test-db \
-c "set spanner.autocommit_dml_mode='partitioned_non_atomic'; copy numbers from stdin;"
Kopieren Sie Daten aus PostgreSQL in Spanner:
psql -h localhost -p 5432 -d my-local-db \
-c "copy (select i, to_char(i, 'fm000') from generate_series(1, 1000000) s(i)) to stdout binary" \
| psql -h localhost -p 5433 -d my-spanner-db \
-c "set spanner.autocommit_dml_mode='partitioned_non_atomic'; copy numbers from stdin binary;"
In diesem Beispiel wird davon ausgegangen, dass PostgreSQL auf Port 5432 und PGAdapter auf Port 5433 ausgeführt wird.
Weitere Beispiele finden Sie unter PGAdapter – COPY-Unterstützung.
COPY table_name TO STDOUT [BINARY]
COPY table_name TO STDOUT [BINARY]
Kopiert die Daten aus einer Tabelle oder aus einer Abfrage in stdout
.
Data Boost und partitionierte Abfrageanweisungen
Mit Data Boost können Sie Analyseabfragen und Datenexporte nahezu ohne Auswirkungen auf vorhandene Arbeitslasten auf der bereitgestellten Spanner-Instanz ausführen. Daten-Boost wird nur für partitionierte Abfragen unterstützt.
Sie können Data Boost mit der Anweisung SET SPANNER.DATA_BOOST_ENABLED
aktivieren.
PGAdapter unterstützt drei Alternativen zum Ausführen von partitionierten Abfragen:
SET SPANNER.AUTO_PARTITION_MODE = true
RUN PARTITIONED QUERY sql
PARTITION sql
gefolgt von mehrerenRUN PARTITION 'partition-token'
Jede dieser Methoden wird in den folgenden Abschnitten beschrieben.
SPANNER.DATA_BOOST_ENABLED
SHOW SPANNER.DATA_BOOST_ENABLED
SET SPANNER.DATA_BOOST_ENABLED {TO|=} { true | false }
Legt fest, ob für diese Verbindung Data Boost für partitionierte Abfragen.
Der Standardwert ist false
.
▶ Beispiel: Abfrage mit Data Boost ausführen (zum Vergrößern anklicken)
Das folgende Beispiel zeigt, wie Sie eine Abfrage mit Data Boost mit
PGAdapter aus.
-- Enable Data Boost on this connection.
SET SPANNER.DATA_BOOST_ENABLED = true;
-- Execute a partitioned query. Data Boost is only used for partitioned queries.
RUN PARTITIONED QUERY SELECT FirstName, LastName FROM Singers;
SPANNER.AUTO_PARTITION_MODE
SHOW SPANNER.AUTO_PARTITION_MODE
SET SPANNER.AUTO_PARTITION_MODE {TO|=} { true | false}
Ein Attribut vom Typ BOOL
, das angibt, ob für die Verbindung automatisch
partitionierte Abfragen für alle ausgeführten Abfragen erstellen.
- Legen Sie diese Variable auf
true
fest, wenn für die Verbindung partitionierte Abfrage für alle ausgeführten Abfragen. - Legen Sie
SPANNER.DATA_BOOST_ENABLED
auch auftrue
fest, wenn für die Verbindung Data Boost für alle Abfragen verwendet werden soll.
Der Standardwert ist false
.
▶ Beispiel: Ausführen (zum Maximieren klicken)
In diesem Beispiel werden zwei Abfragen mit PGAdapter unter Verwendung von
Daten-Boost
SET SPANNER.AUTO_PARTITION_MODE = true
SET SPANNER.DATA_BOOST_ENABLED = true
SELECT first_name, last_name FROM singers
SELECT singer_id, title FROM albums
Partitionierte ABFRAGE AUSFÜHREN
RUN PARTITIONED QUERY <sql>
Führt eine Abfrage als partitionierte Abfrage in Spanner aus. Stellen Sie sicher, dass
SPANNER.DATA_BOOST_ENABLED
ist auf true
gesetzt, um die Abfrage mit
Daten-Optimierung:
SET SPANNER.DATA_BOOST_ENABLED = true
RUN PARTITIONED QUERY SELECT FirstName, LastName FROM Singers
PGAdapter partitioniert die Abfrage intern und führt Partitionen in
parallel. Die Ergebnisse werden zu einem Ergebnissatz zusammengeführt und an den
. Die Anzahl der Worker-Threads, die Partitionen ausführen, kann mit der Variablen SPANNER.MAX_PARTITIONED_PARALLELISM
festgelegt werden.
PARTITION <SQL>
PARTITION <sql>
Erstellt eine Liste von Partitionen zum Ausführen einer Abfrage für Spanner
und gibt eine Liste mit Partitionstokens zurück. Jedes Partitionstoken kann
die über eine separate Verbindung auf demselben oder einem anderen PGAdapter ausgeführt werden.
mit dem Befehl RUN PARTITION 'partition-token'
.
▶ Beispiel: Partitionsabfrage (zum Maximieren klicken)
Im folgenden Beispiel wird gezeigt, wie eine Abfrage partitioniert und dann jede Partition mit PGAdapter separat ausgeführt wird.
-- Partition a query. This returns a list of partition tokens that can be
-- executed either on this connection or on any other connection to the same
-- database.
PARTITION SELECT FirstName, LastName FROM Singers;
-- Run the partitions that were returned from the previous statement.
RUN PARTITION 'partition-token-1';
RUN PARTITION 'partition-token-2';
RUN PARTITION "partition-token"
RUN PARTITION 'partition-token'
Führt eine Abfragepartition aus, die zuvor vom Befehl PARTITION
zurückgegeben wurde. Der Befehl kann auf jeder Verbindung ausgeführt werden, die mit derselben Datenbank verbunden ist, in der die Partitionstokens erstellt wurden.
SPANNER.MAX_PARTITIONED_PARALLELISM
Ein Attribut vom Typ bigint
, das die Anzahl der Worker-Threads angibt
PGAdapter verwendet, um Partitionen auszuführen. Dieser Wert wird für Folgendes verwendet:
SPANNER.AUTO_PARTITION_MODE = true
RUN PARTITIONED QUERY sql
SHOW SPANNER.MAX_PARTITIONED_PARALLELISM
SET SPANNER.MAX_PARTITIONED_PARALLELISM {TO|=} <bigint>
Legt die maximale Anzahl von Worker-Threads fest, die PGAdapter zum Ausführen von Partitionen verwenden kann. Durch Festlegen dieses Werts auf 0
wird PGAdapter angewiesen,
Verwenden Sie die maximale Anzahl
der CPU-Kerne auf dem Clientcomputer.
Der Standardwert ist 0
.
Nächste Schritte
- Weitere Informationen zum Starten von PGAdapter
- Eine vollständige Liste der unterstützten PostgreSQL-Treiber und ORMs