Aurora DSQL의 DDL 및 분산 트랜잭션
데이터 정의 언어(DDL)는 Aurora DSQL에서 PostgreSQL과 다르게 작동합니다. Aurora DSQL에는 다중 테넌트 컴퓨팅 및 스토리지 플릿을 기반으로 구축된 다중 AZ 분산 및 비공유 데이터베이스 계층이 있습니다. 단일 프라이머리 데이터베이스 노드 또는 리더가 없으므로 데이터베이스 카탈로그가 배포됩니다. 따라서 Aurora DSQL은 DDL 스키마 변경을 분산 트랜잭션으로 관리합니다.
특히 DDL은 Aurora DSQL에서 다음과 같이 다르게 작동합니다.
- 동시성 제어 오류
-
Aurora DSQL은 다른 트랜잭션이 리소스를 업데이트하는 동안 한 트랜잭션을 실행하는 경우 동시성 제어 위반 오류를 반환합니다. 예를 들어 다음과 같은 일련의 작업을 고려합니다.
-
세션 1에서 사용자는
mytable
테이블에 열을 추가합니다. -
세션 2에서 사용자는
mytable
에 행을 삽입하려고 시도합니다.Aurora DSQL에서
SQL Error [40001]: ERROR: schema has been updated by another transaction, please retry: (OC001).
오류를 반환합니다.
-
- 동일한 트랜잭션의 DDL 및 DML
-
Aurora DSQL의 트랜잭션은 하나의 DDL 문만 포함할 수 있으며 DDL 문과 DML 문을 모두 가질 수는 없습니다. 이 제한은 테이블을 생성하고 동일한 트랜잭션 내에서 동일한 테이블에 데이터를 삽입할 수 없음을 의미합니다. 예를 들어 Aurora DSQL은 다음과 같은 순차 트랜잭션을 지원합니다.
BEGIN; CREATE TABLE mytable (ID_col integer); COMMIT; BEGIN; INSERT into FOO VALUES (1); COMMIT;
Aurora DSQL은
CREATE
및INSERT
문을 모두 포함하는 다음 트랜잭션을 지원하지 않습니다.BEGIN; CREATE TABLE FOO (ID_col integer); INSERT into FOO VALUES (1); COMMIT;
- 비동기 DDL
-
표준 PostgreSQL에서
CREATE INDEX
와 같은 DDL 작업은 영향을 받는 테이블을 잠그므로 다른 세션의 읽기 및 쓰기에 사용할 수 없습니다. Aurora DSQL에서 이러한 DDL 문은 백그라운드 관리자를 사용하여 비동기적으로 실행됩니다. 영향을 받는 테이블에 대한 액세스는 차단되지 않습니다. 따라서 대규모 테이블의 DDL은 가동 중지 시간이나 성능 영향 없이 실행할 수 있습니다. Aurora DSQL의 비동기 작업 관리자에 대한 자세한 내용은 Aurora DSQL의 비동기 인덱스 섹션을 참조하세요.