PGAdapter 세션 관리 명령어

Spanner PGAdapter는 사용자가 연결 상태 및 동작을 수정하고, 트랜잭션을 실행하고, 문 배치를 효율적으로 수행할 수 있게 해주는 세션 관리 문을 지원합니다. 이 문서에 설명된 모든 문은 PGAdapter에 연결되는 모든 클라이언트 또는 드라이버와 함께 사용할 수 있습니다.

자세한 내용은 지원되는 PostgreSQL 드라이버 및 ORM 전체 목록을 참조하세요. 다음 명령어는 PostgreSQL 언어 데이터베이스에 적용됩니다.

PGAdapter 사용에 대한 자세한 내용은 PGAdapter 시작을 참조하세요.

연결 문

다음 문은 현재 연결의 속성을 변경하거나 표시합니다.

SPANNER.READONLY

연결이 읽기 전용 모드인지 여부를 나타내는 불리언입니다. 기본값은 false입니다.

SHOW [VARIABLE] SPANNER.READONLY
SET SPANNER.READONLY {TO|=} { true | false }

활성 트랜잭션이 없는 경우에만 이 속성 값을 변경할 수 있습니다.

▶ 예: 읽기 전용 트랜잭션(확대하려면 클릭)
다음 예시에서는 이 속성을 사용하여 Spanner에서 읽기 전용 트랜잭션을 실행하는 방법을 보여줍니다.

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

연결이 자동 커밋 모드인지 여부를 나타내는 불리언입니다. 기본값은 true입니다.

참고: 일반적으로 PGAdapter와 함께 PostgreSQL 드라이버를 사용할 때는 이 변수의 값을 수정할 필요가 없습니다. 이 드라이버는 필요한 경우 BEGINCOMMIT를 실행하여 자동으로 트랜잭션을 관리합니다. psql과 같은 명령줄 도구를 사용할 때 autocommit을 사용 중지하여 실수로 인한 데이터 수정이 자동으로 커밋되지 않도록 할 수 있습니다.

SHOW [VARIABLE] AUTOCOMMIT
SET AUTOCOMMIT {TO|=} { true | false }

활성 트랜잭션이 없는 경우에만 이 속성 값을 변경할 수 있습니다.

AUTOCOMMIT이 false로 설정되면 COMMIT 또는 ROLLBACK을 실행한 후 새 트랜잭션이 자동으로 시작됩니다. 가장 먼저 실행하는 문에서 트랜잭션이 시작됩니다.

▶ 예: 자동 커밋(확대하려면 클릭)
다음 예시에서는 autocommit 속성을 사용하는 방법을 보여줍니다.

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

연결이 취소된 트랜잭션을 자동으로 재시도하는지 여부를 나타내는 불리언입니다. 기본값은 true입니다.

SHOW [VARIABLE] SPANNER.RETRY_ABORTS_INTERNALLY
SET SPANNER.RETRY_ABORTS_INTERNALLY {TO|=} { true | false }

이 명령어는 트랜잭션이 시작된 후(BEGIN [TRANSACTION | WORK] 참조)와 트랜잭션 내에서 문이 실행되기 전에만 실행할 수 있습니다.

SPANNER.RETRY_ABORTS_INTERNALLY을 사용 설정하면 연결이 클라이언트 애플리케이션에 반환하는 모든 데이터의 체크섬을 유지합니다. 이는 트랜잭션이 Spanner에 의해 중단된 경우 다시 시도하는 데 사용됩니다.

이 설정은 기본적으로 사용 설정되어 있습니다. 애플리케이션에서 이미 취소된 트랜잭션을 재시도하는 경우 이 설정을 사용 중지하는 것이 좋습니다.

SPANNER.AUTOCOMMIT_DML_MODE

DML(데이터 조작 언어) 문에 대한 자동 커밋 모드를 나타내는 STRING 속성입니다.

SHOW [VARIABLE] SPANNER.AUTOCOMMIT_DML_MODE
SET SPANNER.AUTOCOMMIT_DML_MODE {TO|=} { 'TRANSACTIONAL' | 'PARTITIONED_NON_ATOMIC' }

사용할 수 있는 값은 다음과 같습니다.

  • TRANSACTIONAL 모드에서 드라이버는 별도의 원자적 트랜잭션으로 DML 문을 실행합니다. 드라이버는 새 트랜잭션을 생성하고 DML 문을 실행하며 성공적인 실행 시 트랜잭션을 커밋하거나 오류가 발생한 경우 트랜잭션을 롤백합니다.
  • PARTITIONED_NON_ATOMIC 모드에서 드라이버는 파티션을 나눈 업데이트 문으로 DML 문을 실행합니다. 파티션을 나눈 업데이트 문은 각각 영향을 받는 하위 집합을 다루는 일련의 여러 트랜잭션으로 실행할 수 있습니다. 파티션을 나눈 문에서는 확장성 및 성능이 향상될 수 있도록 약화된 시맨틱스를 제공합니다.

기본값은 TRANSACTIONAL입니다.

▶ 예: Partitioned DML(확대하려면 클릭)
다음 예시에서는 PGAdapter를 사용하여 파티션을 나눈 DML을 실행하는 방법을 보여줍니다.

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

문에 대한 현재 제한 시간 값을 나타내는 STRING 유형의 속성입니다.

SHOW [VARIABLE] STATEMENT_TIMEOUT
SET STATEMENT_TIMEOUT {TO|=} { '<int8>{ s | ms | us | ns }' | <int8> | DEFAULT }

int8 값은 시간 단위를 나타내는 서픽스가 뒤에 오는 정수입니다. DEFAULT의 값은 제한 시간 값이 설정되지 않았음을 나타냅니다. 문 제한 시간 값이 설정되어 있는 경우 문이 지정된 제한 시간 값보다 오래 걸리면 제한 시간 오류를 발생시키고 트랜잭션을 무효화합니다.

지원되는 시간 단위는 다음과 같습니다.

  • s: 초
  • ms: 밀리초
  • us: 마이크로초
  • ns: 나노초

DEFAULT는 0초이므로 제한 시간이 없습니다. 단위가 없는 int8 번호는 int8 ms를 나타냅니다. 예를 들어 다음 명령어는 문 제한 시간을 2초로 설정합니다.

SET STATEMENT_TIMEOUT TO 2000;
SET STATEMENT_TIMEOUT TO '2s';

트랜잭션 동안 문 제한 시간은 트랜잭션을 무효화하고 무효화된 트랜잭션(ROLLBACK 예외)의 모든 후속 문은 실패합니다.

READ_ONLY_STALENESS

Spanner가 AUTOCOMMIT 모드에서 읽기 전용 트랜잭션과 쿼리에 사용하는 현재 읽기 전용 비활성 설정을 나타내는 STRING 유형의 속성입니다.

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 }' }

읽기 전용 비활성 값은 모든 후속 읽기 전용 트랜잭션과 AUTOCOMMIT 모드의 모든 쿼리에 적용됩니다.

기본값은 STRONG입니다.

타임스탬프 경계 옵션은 다음과 같습니다.

  • STRONG은 Spanner에게 강력 읽기를 수행하라고 지시합니다.
  • MAX_STALENESS는 Spanner가 now()를 기준으로 제한된 비활성 읽기를 수행하는 데 사용하는 시간 간격을 정의합니다.
  • MIN_READ_TIMESTAMP는 Spanner가 제한된 비활성 읽기를 수행하는 데 사용하는 절대 시간을 정의합니다.
  • EXACT_STALENESS는 Spanner가 now()를 기준으로 완전 비활성 읽기를 수행하는 데 사용하는 시간 간격을 정의합니다.
  • READ_TIMESTAMP는 Spanner가 완전 비활성 읽기를 수행하는 데 사용하는 절대 시간을 정의합니다.

타임스탬프는 다음 형식을 사용해야 합니다.

YYYY-[M]M-[D]D [[H]H:[M]M:[S]S[.DDDDDD]][timezone]

MAX_STALENESSEXACT_STALENESS 값 설정에 지원되는 시간 단위는 다음과 같습니다.

  • s: 초
  • ms: 밀리초
  • us: 마이크로초
  • ns: 나노초

활성 트랜잭션이 없는 경우에만 이 속성 값을 수정할 수 있습니다.

▶ 예: 읽기 전용 비활성(확대하려면 클릭)
다음 예시는 PGAdapter에서 맞춤형 비활성 값을 사용하여 쿼리를 실행하는 방법을 보여줍니다.

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

최적화 도구 버전을 나타내는 STRING 유형의 속성입니다. 버전은 숫자 또는 'LATEST'입니다.

SHOW [VARIABLE] SPANNER.OPTIMIZER_VERSION
SET SPANNER.OPTIMIZER_VERSION {TO|=} { 'version'|'LATEST'|'' }

연결에서 다음 문에 사용할 최적화 도구 버전을 설정합니다. 최적화 도구 버전을 ''(빈 문자열)로 설정하면 최신 버전을 사용한다는 의미입니다. 최적화 도구 버전이 설정되지 않으면 Spanner가 데이터베이스 수준에서 설정된 최적화 도구 버전을 사용합니다.

기본값은 ''입니다.

▶ 예: 최적화 도구 버전(확대하려면 클릭)
다음 예시에서는 PGAdapter에서 특정 최적화 도구 버전을 사용하여 쿼리를 실행하는 방법을 보여줍니다.

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

이 연결에서 사용되는 현재 최적화 도구 통계 패키지를 나타내는 STRING 유형의 속성입니다.

SHOW [VARIABLE] SPANNER.OPTIMIZER_STATISTICS_PACKAGE
SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE {TO|=} { 'package'|'' }

연결의 다음 모든 문에 사용할 최적화 도구 통계 패키지를 설정합니다. <package>는 유효한 패키지 이름이어야 합니다. 최적화 도구 통계 패키지가 설정되지 않으면 Spanner가 데이터베이스 수준에서 설정된 최적화 도구 통계 패키지를 사용합니다.

기본값은 ''입니다.

▶ 최적화 도구 통계 패키지(확대하려면 클릭)
다음 예시에서는 PGAdapter에서 특정 최적화 도구 통계 패키지를 사용하여 쿼리를 실행하는 방법을 보여줍니다.

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

이 연결의 트랜잭션에 대한 통계를 반환해야 하는지 여부를 나타내는 BOOL 유형의 속성입니다. SHOW [VARIABLE] COMMIT_RESPONSE 명령어를 실행하면 반환된 통계를 볼 수 있습니다.

SHOW [VARIABLE] SPANNER.RETURN_COMMIT_STATS
SET SPANNER.RETURN_COMMIT_STATS {TO|=} { true | false }

기본값은 false입니다.

▶ 예: 커밋 통계(확대하려면 클릭)
다음 예시는 PGAdapter에서 트랜잭션에 대한 커밋 통계를 보는 방법을 보여줍니다.

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

Spanner 요청에 대한 상대적 우선순위를 나타내는 STRING 유형의 속성입니다. 이 우선순위가 Spanner 스케줄러에 대한 힌트 역할을 하지만 실행 순서를 보장하지는 않습니다.

SHOW [VARIABLE] SPANNER.RPC_PRIORITY
SET SPANNER.RPC_PRIORITY {TO|=} {'HIGH'|'MEDIUM'|'LOW'|'NULL'}

'NULL'은 요청에 힌트가 포함되지 않아야 함을 의미합니다.

기본값은 'NULL'입니다.

또한 문 힌트를 사용하여 RPC 우선순위를 지정할 수 있습니다.

/*@RPC_PRIORITY=PRIORITY_LOW*/ SELECT * FROM Albums

자세한 내용은 Priority를 참조하세요.

트랜잭션 문

다음 문은 Spanner 트랜잭션을 관리하고 커밋합니다.

트랜잭션 격리 수준

SHOW [ VARIABLE ] TRANSACTION ISOLATION LEVEL

STRING 유형의 행 1개와 열 1개로 결과 조합을 반환합니다. 반환되는 값은 Spanner PostgreSQL 언어 데이터베이스에 대해 유일하게 지원되는 격리 수준이므로 항상 serializable입니다.

SPANNER.READ_TIMESTAMP

SHOW [VARIABLE] SPANNER.READ_TIMESTAMP

가장 최근의 읽기 전용 트랜잭션의 읽기 타임스탬프를 포함하는 TIMESTAMP 유형인 하나의 행과 하나의 열로 결과 조합을 반환합니다. 이 문은 읽기 전용 트랜잭션이 아직 활성 상태이고 하나 이상의 쿼리를 실행한 경우 또는 읽기 전용 트랜잭션이 커밋된 직후 및 새 트랜잭션이 시작되기 전에만 타임스탬프를 반환합니다. 그렇지 않은 경우 결과는 NULL입니다.

▶ 예: 타임스탬프 읽기(확대하려면 클릭)
다음 예시는 PGAdapter에서 사용하는 읽기 전용 작업의 마지막 읽기 타임스탬프를 확인하는 방법을 보여줍니다.

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

Spanner가 커밋한 마지막 읽기-쓰기 트랜잭션의 커밋 타임스탬프를 포함하는 TIMESTAMP 유형인 하나의 행과 하나의 열로 결과 조합을 반환합니다. 이 문은 읽기-쓰기 트랜잭션을 커밋한 후와 이후 SELECT, DML 또는 스키마 변경 문을 실행하기 전에만 타임스탬프를 반환합니다. 그렇지 않은 경우 결과는 NULL입니다.

▶ 예: 커밋 타임스탬프(확대하려면 클릭)
다음 예시는 PGAdapter에서 사용하는 쓰기 작업의 마지막 커밋 타임스탬프를 확인하는 방법을 보여줍니다.

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

행 1개와 열 2개로 결과 집합을 반환합니다.

  • COMMIT_TIMESTAMP(유형=TIMESTAMP)는 가장 최근의 트랜잭션이 커밋된 시기를 나타냅니다.
  • MUTATION_COUNT(유형=int8)는 커밋된 트랜잭션에 적용된 변형 개수를 나타냅니다. 이 값은 에뮬레이터에서 실행될 때 항상 비어 있습니다.

변형 수는 트랜잭션 커밋 전에 SET RETURN_COMMIT_STATStrue로 설정된 경우에만 제공됩니다.

▶ 예: 커밋 응답(확대하려면 클릭)
다음 예시는 PGAdapter에서 사용하는 쓰기 작업의 마지막 커밋 응답을 확인하는 방법을 보여줍니다.

-- 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 } [ TRANSACTION | WORK ]

{ START | BEGIN } [ TRANSACTION | WORK ] [{ READ ONLY | READ WRITE }]

새 트랜잭션을 시작합니다. TRANSACTIONWORK 키워드는 선택사항이고 동등하며 영향을 미치지 않습니다.

  • COMMIT 또는 ROLLBACK을 사용하여 트랜잭션을 종료합니다.
  • AUTOCOMMIT 모드를 사용 설정한 경우 이 문은 일시적으로 AUTOCOMMIT 모드에서 연결을 해제합니다. 트랜잭션이 종료되면 이 연결은 AUTOCOMMIT 모드로 돌아갑니다.
  • READ ONLY 또는 READ WRITE를 지정하지 않으면 트랜잭션 모드가 세션의 기본 트랜잭션 모드로 결정됩니다. 이 기본값은 SET SESSION CHARACTERISTICS AS TRANSACTION 명령어를 사용해서 설정됩니다.

활성 트랜잭션이 없는 경우에만 이 문을 실행할 수 있습니다.

▶ 예: 트랜잭션 시작(확대하려면 클릭)
다음 예시는 PGAdapter를 사용하여 여러 유형의 트랜잭션을 시작하는 방법을 보여줍니다.

-- 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]

현재 트랜잭션을 커밋합니다. TRANSACTIONWORK 키워드는 선택사항이고 동등하며 영향을 미치지 않습니다.

  • 읽기-쓰기 트랜잭션을 커밋하면 이 트랜잭션의 모든 업데이트가 다른 트랜잭션에 표시되고 Spanner에서 트랜잭션의 모든 잠금이 해제됩니다.
  • 읽기 전용 트랜잭션을 커밋하면 현재 읽기 전용 트랜잭션이 종료됩니다. 이후 문은 새 트랜잭션을 시작합니다. 읽기 전용 트랜잭션의 경우 COMMITROLLBACK 간의 의미적 차이가 없습니다.

활성 트랜잭션이 있는 경우에만 이 문을 실행할 수 있습니다.

▶ 예: 트랜잭션 커밋(확대하려면 클릭)
다음 예시에서는 PGAdapter를 사용하여 트랜잭션을 커밋하는 방법을 보여줍니다.

-- 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]

현재 트랜잭션의 ROLLBACK을 수행합니다. TRANSACTIONWORK 키워드는 선택사항이고 동등하며 영향을 미치지 않습니다.

  • 읽기 전용 트랜잭션의 ROLLBACK을 수행하면 버퍼링된 변형이 삭제되고 Spanner에 트랜잭션이 롤백되고 트랜잭션에 있는 모든 잠금이 해제됩니다.
  • 읽기 전용 트랜잭션의 ROLLBACK을 수행하면 현재 읽기 전용 트랜잭션을 종료합니다. 이후 모든 문은 새 트랜잭션을 시작합니다. 연결에 대한 읽기 전용 트랜잭션의 경우 COMMITROLLBACK 간의 의미적 차이가 없습니다.

활성 트랜잭션이 있는 경우에만 이 문을 실행할 수 있습니다.

▶ 예: 트랜잭션 롤백(확대하려면 클릭)
다음 예시에서는 PGAdapter로 트랜잭션을 롤백하는 방법을 보여줍니다.

-- 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 { READ ONLY | READ WRITE }

현재 트랜잭션의 트랜잭션 모드를 설정합니다.

AUTOCOMMITfalse이거나 BEGIN [TRANSACTION | WORK]를 실행하여 트랜잭션을 시작했지만 트랜잭션에서 아직 어떤 문도 실행하지 않은 경우에만 이 문을 실행할 수 있습니다.

이 문은 현재 트랜잭션에 대해서만 트랜잭션 모드를 설정합니다. 트랜잭션이 커밋되거나 롤백되면 다음 트랜잭션이 연결에 기본 모드를 사용합니다. (SET SESSION CHARACTERISTICS를 참조하세요.)

▶ 예: 트랜잭션 설정(확대하려면 클릭)
다음 예시에서는 PGAdapter를 사용하여 트랜잭션 특성을 설정하는 방법을 보여줍니다.

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

SET SESSION CHARACTERISTICS

SET SESSION CHARACTERISTICS AS TRANSACTION { READ ONLY | READ WRITE }

세션에서 트랜잭션에 대한 기본 트랜잭션 모드를 READ ONLY 또는 READ WRITE로 설정합니다. 이 문은 활성 트랜잭션이 없는 경우에만 허용됩니다.

SET TRANSACTION 명령어가 이 설정을 재정의할 수 있습니다.

▶ 예: 세션 특성 설정(확대하려면 클릭)
다음 예시에서는 PGAdapter를 사용하여 세션 특성을 설정하는 방법을 보여줍니다.

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

다음 문의 요청 태그가 포함된 STRING 유형의 속성입니다.

SHOW [ VARIABLE ] SPANNER.STATEMENT_TAG
SET SPANNER.STATEMENT_TAG {TO|=} 'tag-name'

다음에 실행할 문의 요청 태그를 설정합니다. 문 하나에 태그 하나만 설정할 수 있습니다. 태그는 여러 문을 포괄하지 않으며 문 단위로 설정해야 합니다. 요청 태그를 빈 문자열('')로 설정하여 삭제할 수 있습니다.

기본값은 ''입니다.

동일한 문에 대한 트랜잭션 태그와 문 태그를 모두 설정할 수 있습니다.

또한 문 힌트를 사용하여 문 태그를 추가할 수 있습니다.

/*@STATEMENT_TAG='my-tag'*/ SELECT * FROM albums

자세한 내용은 요청 태그 및 트랜잭션 태그를 사용한 문제 해결을 참조하세요.

▶ 예: 문 태그(확대하려면 클릭)
다음 예시에서는 PGAdapter를 사용하여 문 태그를 설정하는 방법을 보여줍니다.

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

다음 트랜잭션에 대한 트랜잭션 태그가 포함된 STRING 유형의 속성입니다.

SHOW [ VARIABLE ] SPANNER.TRANSACTION_TAG
SET SPANNER.TRANSACTION_TAG {TO|=} 'tag-name'

실행할 트랜잭션의 트랜잭션 태그를 설정합니다. 트랜잭션 하나에 태그 하나만 설정할 수 있습니다. 태그는 여러 트랜잭션을 포괄하지 않으며 트랜잭션 단위로 설정해야 합니다. 트랜잭션 태그를 빈 문자열('')로 설정하여 삭제할 수 있습니다. 트랜잭션 태그는 트랜잭션에서 문이 실행되기 전에 설정해야 합니다.

기본값은 ''입니다.

동일한 문에 대한 트랜잭션 태그와 문 태그를 모두 설정할 수 있습니다.

자세한 내용은 요청 태그 및 트랜잭션 태그를 사용한 문제 해결을 참조하세요.

▶ 예: 트랜잭션 태그(확대하려면 클릭)
다음 예시에서는 PGAdapter로 트랜잭션 태그를 설정하는 방법을 보여줍니다.

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;

일괄 문

다음 문은 일괄 DDL 문을 관리하고 해당 일괄 문을 Spanner로 전송합니다.

일괄 DDL 시작

START BATCH DDL

연결에서 일괄 DDL 문을 시작합니다. 일괄 처리되는 동안 모든 후속 문은 DDL 문이어야 합니다. DDL 문은 로컬에서 버퍼링되며 RUN BATCH 실행 시 하나의 일괄 처리로 Spanner에 전송됩니다. 여러 개의 DDL 문을 하나의 일괄 처리로 실행하는 것은 문을 개별적으로 실행하는 것보다 일반적으로 빠릅니다.

활성 트랜잭션이 없는 경우에만 이 문을 실행할 수 있습니다.

▶ 예: DDL 일괄 처리(확대하려면 클릭)
다음 예시에서는 PGAdapter를 사용하여 DDL 배치를 실행하는 방법을 보여줍니다.

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

현재 DDL 일괄 처리의 버퍼링된 DDL 문을 모두 데이터베이스로 전송하고 Spanner에서 이러한 문이 실행되기를 기다린 다음 현재 DDL 일괄 처리를 종료합니다.

Spanner에서 하나 이상의 DDL 문을 실행할 수 없는 경우 RUN BATCH는 Spanner가 실행할 수 없는 첫 번째 DDL 문에 대한 오류를 반환합니다. 그렇지 않은 경우 RUN BATCH를 반환합니다.

일괄 처리 취소

현재 DDL 일괄 처리에서 버퍼링된 DDL 문을 모두 지우고 일괄 처리를 종료합니다.

DDL 일괄 처리가 활성화된 경우에만 이 문을 실행할 수 있습니다. 일괄 처리가 DDL 문을 버퍼링했는지 여부와 상관없이 ABORT BATCH를 사용할 수 있습니다. 일괄 처리에서 이전의 모든 DDL 문은 취소됩니다.

▶ 예: DDL 일괄 처리 취소(확대하려면 클릭)
다음 예시에서는 PGAdapter를 사용하여 DDL 배치를 중단하는 방법을 보여줍니다.

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

BATCH DML 시작

다음 문은 2개의 DML 문을 함께 일괄 처리하고 서버에 하나의 호출로 전송합니다. DML 일괄 처리는 트랜잭션의 일부로 또는 자동 커밋 모드에서 실행할 수 있습니다.

START BATCH DML;
INSERT INTO MYTABLE (ID, NAME) VALUES (1, 'ONE');
INSERT INTO MYTABLE (ID, NAME) VALUES (2, 'TWO');
RUN BATCH;

▶ 예: DML 일괄 처리(확대하려면 클릭)
다음 예시에서는 PGAdapter를 사용하여 DML 배치를 실행하는 방법을 보여줍니다.

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

저장 지점 명령어

PGAdapter의 저장 지점이 에뮬레이션됩니다. 저장 지점으로 롤백하면 전체 트랜잭션이 롤백되고 저장 지점이 설정된 지점까지 트랜잭션을 재시도합니다. 저장 지점까지 트랜잭션에 사용된 기본 데이터가 변경된 경우 이 작업은 AbortedDueToConcurrentModificationException 오류와 함께 실패합니다.

저장 지점 지원이 사용 설정되었으면 저장 지점 만들기 및 해제가 항상 성공합니다.

다음 문은 트랜잭션에서 에뮬레이션된 저장 지점을 사용 설정 및 중지합니다.

SPANNER.SAVEPOINT_SUPPORT

SHOW [VARIABLE] SPANNER.SAVEPOINT_SUPPORT
SET SPANNER.SAVEPOINT_SUPPORT = { 'DISABLED' | 'FAIL_AFTER_ROLLBACK' | 'ENABLED' }

현재 SAVEPOINT_SUPPORT 구성을 나타내는 STRING 유형의 속성입니다. 가능한 값은 다음과 같습니다.

  • DISABLED: 모든 저장 지점 명령어가 사용 중지되며 실패합니다.
  • FAIL_AFTER_ROLLBACK: 저장 지점 명령어가 사용 설정됩니다. 저장 지점으로 롤백하면 전체 트랜잭션이 롤백됩니다. 저장 지점으로 롤백한 후 트랜잭션을 사용하려고 시도하면 작업이 실패합니다.
  • ENABLED: 모든 저장 지점 명령어가 사용 설정됩니다. 저장 지점으로 롤백하면 트랜잭션이 롤백되고 저장 지점으로 다시 시도됩니다. 저장 지점까지 트랜잭션에서 사용한 기본 데이터가 변경된 경우 이 작업은 AbortedDueToConcurrentModificationException 오류와 함께 실패합니다.

기본값은 ENABLED입니다.

활성 트랜잭션이 없는 경우에만 이 문을 실행할 수 있습니다.

SAVEPOINT savepoint_name

SAVEPOINT savepoint-name;

SAVEPOINT는 현재 트랜잭션 내에 새 저장 지점을 만듭니다. 저장 지점이 생성된 이후 지금까지 수행된 모든 작업을 실행 취소하도록 트랜잭션을 저장 지점으로 롤백할 수 있습니다.

▶ 예: 저장 지점(확대하려면 클릭)
다음 예시에서는 PGAdapter에서 포인트를 저장하는 방법을 보여줍니다.

-- 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 TO savepoint_name

ROLLBACK TO savepoint_name

현재 트랜잭션을 지정된 이름의 저장 지점으로 롤백합니다.

경우에 따라 저장 지점으로의 롤백이 실패할 수도 있습니다. 저장 지점으로 롤백하면 전체 트랜잭션이 롤백되고 저장 지점이 설정된 지점까지 트랜잭션을 재시도합니다. 저장 지점까지 트랜잭션에 사용된 기본 데이터가 변경된 경우 이 작업은 AbortedDueToConcurrentModificationException과 함께 실패합니다.

RELEASE [SAVEPOINT] savepoint_name

RELEASE savepoint_name

현재 트랜잭션에서 저장 지점을 삭제합니다. 더 이상 ROLLBACK TO savepoint_name 문을 실행하는 데 사용할 수 없습니다.

준비된 문

다음 문은 준비된 문을 만들고 실행합니다.

PREPARE

PREPARE statement_name [(data_type, ...)] AS statement

이 연결에서 문을 준비합니다. 이 문은 Spanner에서 파싱 및 검증되고 PGAdapter에서 메모리에 저장됩니다.

▶ 예: 준비된 문(확대하려면 클릭)
다음 예시에서는 PGAdapter를 사용하여 준비된 문을 만들고 실행하는 방법을 보여줍니다.

-- 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 statement_name [(value, ...)]

PREPARE를 사용하여 이 연결에 생성된 문을 실행합니다.

▶ 예: 실행(확대하려면 클릭)
다음 예시에서는 PGAdapter를 사용하여 문을 준비하고 실행하는 방법을 보여줍니다.

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

이 연결에서 준비된 문을 삭제합니다.

복사

PGAdapter는 PostgreSQL COPY 명령어 하위 집합을 지원합니다.

COPY table_name FROM STDIN

COPY table_name FROM STDIN [BINARY]

stdin에서 Spanner로 데이터를 복사합니다. INSERT 문을 실행하는 것보다 COPY를 사용하여 대규모 데이터 세트를 Spanner로 가져오는 것이 더 효율적입니다.

COPYSPANNER.AUTOCOMMIT_DML_MODE를 결합하여 비원자적 트랜잭션을 실행할 수 있습니다. 이렇게 하면 트랜잭션이 표준 트랜잭션 변형 한도보다 많은 변형을 실행할 수 있습니다.

▶ 예: 복사(확대하려면 클릭)
다음 예시에서는 PGAdapter를 사용하여 Spanner에서 데이터를 복사하는 방법을 보여줍니다.

create table numbers (number bigint not null primary key, name varchar);

원자적 COPY 작업을 실행합니다.

cat numbers.txt | psql -h /tmp -d test-db -c "copy numbers from stdin;"

비원자적 COPY 작업을 실행합니다.

cat numbers.txt | psql -h /tmp -d test-db \
  -c "set spanner.autocommit_dml_mode='partitioned_non_atomic'; copy numbers from stdin;"

PostgreSQL에서 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;"

이 예시에서는 PostgreSQL이 포트 5432에서 실행되고 PGAdapter가 포트 5433에서 실행된다고 가정합니다.

더 많은 예시는 PGAdapter - COPY 지원을 참조하세요.

COPY table_name TO STDOUT [BINARY]

COPY table_name TO STDOUT [BINARY]

테이블 또는 쿼리에서 stdout으로 데이터를 복사합니다.

Data Boost 및 파티션을 나눈 쿼리 문

Data Boost를 사용하면 프로비저닝된 Spanner 인스턴스의 기존 워크로드에 거의 영향을 주지 않고 분석 쿼리와 데이터 내보내기를 실행할 수 있습니다. Data Boost는 파티션을 나눈 쿼리에만 지원됩니다.

SET SPANNER.DATA_BOOST_ENABLED 문을 사용하여 Data Boost를 사용 설정할 수 있습니다.

PGAdapter는 파티션을 나눈 쿼리를 실행하기 위한 세 가지 대안을 지원합니다.

  • SET SPANNER.AUTO_PARTITION_MODE = true
  • RUN PARTITIONED QUERY sql
  • PARTITION sql 다음에 여러 RUN PARTITION 'partition-token'

이러한 각 방법은 다음 섹션에 설명되어 있습니다.

SPANNER.DATA_BOOST_ENABLED

SHOW SPANNER.DATA_BOOST_ENABLED
SET SPANNER.DATA_BOOST_ENABLED {TO|=} { true | false }

이 연결에서 파티션을 나눈 쿼리에 Data Boost를 사용해야 하는지 여부를 설정합니다.

기본값은 false입니다.

▶ 예: Data Boost를 사용하여 쿼리 실행(확대하려면 클릭)
다음 예시는 PGAdapter에서 Data Boost를 사용하여 쿼리하는 방법을 보여줍니다.

-- 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}

연결이 실행되는 모든 쿼리에 대해 파티션을 나눈 쿼리를 자동으로 사용하는지 여부를 나타내는 BOOL 유형의 속성입니다.

  • 연결에서 실행되는 모든 쿼리에 파티션을 나눈 쿼리를 사용하려면 이 변수를 true로 설정합니다.
  • 또한 연결에서 모든 쿼리에 Data Boost를 사용하려면 SPANNER.DATA_BOOST_ENABLEDtrue로 설정합니다.

기본값은 false입니다.

▶ 예: 실행(확대하려면 클릭)
이 예시에서는 Data Boost를 사용하여 PGAdapter에서 쿼리 2개를 실행합니다.

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

RUN PARTITIONED QUERY

RUN PARTITIONED QUERY <sql>

Spanner에서 쿼리를 파티션을 나눈 쿼리로 실행합니다. Data Boost를 사용하여 쿼리를 실행하려면 SPANNER.DATA_BOOST_ENABLEDtrue로 설정되어 있는지 확인합니다.

SET SPANNER.DATA_BOOST_ENABLED = true
RUN PARTITIONED QUERY SELECT FirstName, LastName FROM Singers

PGAdapter는 내부적으로 쿼리를 파티션으로 나누고 파티션을 동시에 실행합니다. 결과는 결과 조합 하나에 병합되어 애플리케이션에 반환됩니다. 파티션을 실행하는 작업자 스레드 수를 SPANNER.MAX_PARTITIONED_PARALLELISM 변수로 설정할 수 있습니다.

PARTITION <SQL>

PARTITION <sql>

Spanner에 대해 쿼리를 실행할 파티션의 목록을 만들고 이러한 파티션 토큰 목록을 반환합니다. 각 파티션 토큰은 RUN PARTITION 'partition-token' 명령어를 사용하여 동일한 또는 다른 PGAdapter 인스턴스에서 별도의 연결에서 실행할 수 있습니다.

▶ 예: 파티션 쿼리(확대하려면 클릭)
이 예시에서는 PGAdapter를 사용하여 쿼리를 파티셔닝하고 각 파티션을 개별적으로 실행하는 방법을 보여줍니다.

-- 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'

이전에 PARTITION 명령어에서 반환한 쿼리 파티션을 실행합니다. 파티션 토큰을 만든 데이터베이스와 동일한 데이터베이스에 연결된 모든 연결에서 이 명령어를 실행할 수 있습니다.

SPANNER.MAX_PARTITIONED_PARALLELISM

PGAdapter가 파티션을 실행하는 데 사용하는 작업자 스레드 수를 나타내는 bigint 유형의 속성입니다. 이 값은 다음 용도로 사용됩니다.

  • SPANNER.AUTO_PARTITION_MODE = true
  • RUN PARTITIONED QUERY sql
SHOW SPANNER.MAX_PARTITIONED_PARALLELISM
SET SPANNER.MAX_PARTITIONED_PARALLELISM {TO|=} <bigint>

PGAdapter가 파티션을 실행하는 데 사용할 수 있는 최대 작업자 스레드 수를 설정합니다. 이 값을 0으로 설정하면 PGAdapter는 클라이언트 머신의 CPU 코어 수를 최댓값으로 사용하도록 지시합니다.

기본값은 0입니다.

다음 단계