Microsoft Fabric의 웨어하우스 테이블 트랜잭션
적용 대상:✅ Microsoft Fabric의 SQL 분석 엔드포인트 및 웨어하우스
SQL Server의 동작과 유사하게 트랜잭션을 사용하면 읽기 및 쓰기 쿼리의 커밋 또는 롤백을 제어할 수 있습니다.
트랜잭션을 사용하여 웨어하우스의 테이블에 저장된 데이터를 수정하여 변경 내용을 그룹화할 수 있습니다.
- 예를 들어 여러 테이블에 삽입을 커밋하거나, 또는 오류가 발생하면 테이블에 삽입을 커밋하지 않을 수 있습니다. 세 개의 테이블에 영향을 미치는 구매 주문에 대한 세부 정보를 변경하는 경우 해당 변경 내용을 단일 트랜잭션으로 그룹화할 수 있습니다. 즉, 해당 테이블을 쿼리할 때 모두 변경 내용이 있거나 변경 내용이 전혀 없습니다. 트랜잭션은 여러 테이블에서 데이터가 일관되도록 해야 할 때 일반적으로 적용됩니다.
트랜잭션 기능
Microsoft Fabric의 SQL 분석 엔드포인트에서도 동일한 트랜잭션 기능이 지원되지만 읽기 전용 쿼리에 대해 지원됩니다.
관련된 테이블이 모두 동일한 시점의 데이터를 갖도록 순차적 SELECT 문에 트랜잭션을 사용할 수도 있습니다. 예를 들어 테이블에 다른 트랜잭션에 의해 추가된 새 행이 있는 경우 새 행은 열려 있는 트랜잭션 내의 SELECT 쿼리에 영향을 주지 않습니다.
Important
Microsoft Fabric에서는 스냅샷 격리 수준만 지원됩니다. T-SQL을 사용하여 격리 수준을 변경하는 경우 쿼리 실행 시 변경 내용이 무시되고 스냅샷 격리가 적용됩니다.
데이터베이스 간 쿼리 트랜잭션 지원
Microsoft Fabric의 웨어하우스는 Lakehouse의 SQL 분석 엔드포인트에서 읽기를 포함하여 동일한 작업 영역 내에 있는 데이터베이스 전반의 트랜잭션을 지원합니다. 모든 Lakehouse에는 하나의 읽기 전용 SQL 분석 엔드포인트가 있습니다. 각 작업 영역에는 둘 이상의 lakehouse가 있을 수 있습니다.
트랜잭션 내 DDL 지원
Microsoft Fabric의 웨어하우스는 사용자 지정 트랜잭션 내에서 CREATE TABLE과 같은 DDL을 지원합니다.
다양한 유형의 문에 대한 잠금
이 표에서는 다양한 유형의 트랜잭션에 사용되는 잠금 목록을 제공하며 모든 잠금은 테이블 수준에 있습니다.
문 형식 | 잠금 해제 |
---|---|
SELECT | 스키마 안정성(Sch-S) |
INSERT | 의도 배타(IX) |
DELETE | 의도 배타(IX) |
UPDATE | 의도 배타(IX) |
COPY INTO | 의도 배타(IX) |
DDL | 스키마 수정(Sch-M) |
이러한 잠금은 트랜잭션에서 행이 업데이트되는 동안 테이블의 스키마가 변경되는 등의 충돌을 방지합니다.
DMV(동적 관리 뷰) sys.dm_tran_locks를 사용하여 현재 보유된 잠금을 쿼리할 수 있습니다.
테이블에서 하나 이상의 행을 업데이트하는 둘 이상의 동시 트랜잭션으로 인한 충돌은 트랜잭션이 끝날 때 평가됩니다. 커밋할 첫 번째 트랜잭션이 성공적으로 완료되고 다른 트랜잭션은 오류가 반환되면서 롤백됩니다. 이러한 충돌은 개별 parquet 파일 수준이 아닌 테이블 수준에서 평가됩니다.
INSERT 문은 항상 새 parquet 파일을 만듭니다. 이는 테이블의 스키마가 변경될 수 있으므로 DDL을 제외한 다른 트랜잭션과의 충돌이 적음을 의미합니다.
트랜잭션 로그
Parquet 파일은 변경할 수 없으므로 Microsoft Fabric의 웨어하우스에서 트랜잭션 로깅은 parquet 파일 수준에 있습니다(변경할 수 없음). 롤백하면 이전 parquet 파일을 다시 가리킵니다. 이 변경의 이점은 트랜잭션 로깅 및 롤백이 더 빠르다는 것입니다.
제한 사항
- 분산된 트랜잭션은 지원되지 않습니다.
- 저장점은 지원되지 않습니다.
- 이름이 지정된 트랜잭션은 지원되지 않습니다.
- 표시된 트랜잭션이 지원되지 않습니다.
- ALTER TABLE은 명시적 트랜잭션 내에서 지원되지 않습니다.
- 현재 웨어하우스에는 제한된 T-SQL 기능이 있습니다. 현재 사용할 수 없는 T-SQL 명령 목록은 TSQL 노출 영역을 참조하세요.
- 트랜잭션이 빈 테이블에 데이터를 삽입하고 롤백하기 전에 SELECT를 실행하는 경우 자동으로 생성된 통계에 여전히 커밋되지 않은 데이터가 반영되어 부정확한 통계가 발생할 수 있습니다. 통계가 정확하지 않으면 쿼리 계획 및 실행 시간이 잘못될 수 있습니다. 대규모 INSERT 후 SELECT를 사용하여 트랜잭션을 롤백하는 경우 SELECT에 언급된 열에 대한 통계를 업데이트하세요.