Microsoft Fabric의 웨어하우스 테이블 트랜잭션

적용 대상: Microsoft Fabric의 SQL 분석 엔드포인트 및 웨어하우스

SQL Server의 동작과 마찬가지로 트랜잭션을 사용하면 읽기 및 쓰기 쿼리의 커밋 또는 롤백을 제어할 수 있습니다.

트랜잭션을 사용하여 웨어하우스의 테이블에 저장된 데이터를 수정하여 변경 내용을 그룹화할 수 있습니다.

  • 예를 들어 여러 테이블에 삽입을 커밋하거나 오류가 발생하는 경우 테이블 중 어느 것도 커밋할 수 없습니다. 세 테이블에 영향을 주는 구매 주문에 대한 세부 정보를 변경하는 경우 이러한 변경 내용을 단일 트랜잭션으로 그룹화할 수 있습니다. 즉, 해당 테이블을 쿼리할 때 모두 변경 내용이 있거나 변경되지 않습니다. 트랜잭션은 여러 테이블에서 데이터가 일관되도록 해야 하는 경우에 일반적으로 적용됩니다.

트랜잭션 기능

동일한 트랜잭션 기능은 Microsoft Fabric의 SQL 분석 엔드포인트에서 지원되지만 읽기 전용 쿼리에는 지원됩니다.

트랜잭션을 순차적 SELECT 문에 사용하여 관련된 모든 테이블에 동일한 시점의 데이터가 있는지 확인할 수도 있습니다. 예를 들어 테이블에 다른 트랜잭션에 의해 추가된 새 행이 있는 경우 새 행은 열려 있는 트랜잭션 내의 SELECT 쿼리에 영향을 주지 않습니다.

Important

Microsoft Fabric에서는 스냅샷 격리 수준만 지원됩니다. T-SQL을 사용하여 격리 수준을 변경하는 경우 쿼리 실행 시 변경 내용이 무시되고 스냅샷 격리가 적용됩니다.

데이터베이스 간 쿼리 트랜잭션 지원

Microsoft Fabric의 Warehouse는 Lakehouse의 SQL 분석 엔드포인트에서 읽기를 포함하여 동일한 작업 영역 내에 있는 데이터베이스에 걸쳐 있는 트랜잭션을 지원합니다. 모든 Lakehouse 에는 하나의 읽기 전용 SQL 분석 엔드포인트가 있습니다. 각 작업 영역에는 둘 이상의 레이크하우스가 있을 수 있습니다.

트랜잭션 내 DDL 지원

Microsoft Fabric의 Warehouse는 사용자 정의 트랜잭션 내에서 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의 Warehouse에서 트랜잭션 로깅은 parquet 파일 수준에 있습니다(변경할 수 없음). 롤백하면 이전 parquet 파일을 다시 가리킵니다. 이 변경의 이점은 트랜잭션 로깅 및 롤백이 더 빠르다는 것입니다.

제한 사항

  • 분산된 트랜잭션은 지원되지 않습니다.
  • 저장 지점은 지원되지 않습니다.
  • 명명된 트랜잭션은 지원되지 않습니다.
  • 표시된 트랜잭션은 지원되지 않습니다.
  • ALTER TABLE은 명시적 트랜잭션 내에서 지원되지 않습니다.
  • 현재 웨어하우스에는 제한된 T-SQL 기능이 있습니다. 현재 사용할 수 없는 T-SQL 명령 목록은 TSQL 노출 영역을 참조하세요.
  • 트랜잭션에 빈 테이블에 데이터 삽입이 있고 롤백하기 전에 SELECT를 발급하는 경우 자동으로 생성된 통계는 커밋되지 않은 데이터를 반영하여 부정확한 통계를 생성할 수 있습니다. 통계가 정확하지 않으면 쿼리 계획 및 실행 시간이 잘못될 수 있습니다. 큰 INSERT 후에 SELECT를 사용하여 트랜잭션을 롤백하는 경우 SELECT에 멘션 열에 대한 통계를 업데이트합니다.