DTC Transacntion 오버헤드
-
Version : SQL Server 2005, 2008, 2008R2, 2012, 2014
BEGIN DISTRIBUTED TRANSACTION은 분산 트랜잭션을 시작하도록 한다. SQL Server 데이터베이스 엔진 인스턴스는 트랜잭션 주관자로서 트랜잭션의 수행을 제어한다. 이후 세션에 대해 COMMIT TRANSACTON 또는 ROLLBACK TRANSACNTION 문을 실행하면 제어 인스턴스는 포함된 모든 인스턴스 간의 분산 트랜잭션 완료를 MS DTC에서 관리하도록 요청 한다.
일반적으로 많은 부분에서 DTC를 사용한다. 하지만 필요하지 않는 부분에서는 사용하지 않는 것이 가급적 오버헤드를 줄 일 수 있다. DTC는 single phase 또는 two phase 커밋을 필요로 한다. DTC 트랜잭션은 SQL Server 데이터베이스에서 자원관리자(RM)을 포함한다. 단일 자원 관리자가 트랜잭션에 포함되는 경우 2단계 커밋을 수행할 필요가 없다. DTC는 안전하게 단일 커밋을 수행 한다. 이는 RM와 DTC사이의 통신을 감소 시킨다.
그러나 DTC 관리자의 오버헤드는 여전히 네이티브 TSQL 트랜잭션보다 약간 느린 트랜잭션을 유발한다. 다음 실습을 통해 알아본다.
[Single Phase]
Single phase DTC commit example
Prepared 상태가 표시되지 않는 출력을 확인 할 수 있다. 이는 하나의 커밋 단계를 표시한다.
begin distributed tran go
update dbTest.dbo.tblTest set object_id = 100 go
commit tran go |
[Tow Phase]
로컬 인스턴스(RM = 1)와 원격 인스턴스(RM = 2)를 포함한다. 2RM이 DTC에 참여하여 2단계의 커밋 프로토콜이 발생한다. Prepared 단계는 2단계 프로토콜의 커밋을 의미한다.
begin distributed tran go
update MYREMOTESERVER.dbTest.dbo.tblTest set object_id = 100 go
commit tran go |
사용자의 시스템에서 실행되는 DTC 트랜잭션의 경우 불필요한 사용을 제거하여 오버헤드를 줄이는 것이 좋다.
[참고자료]
-
BEGIN DISTRIBUTED TRANSACTION :
https://msdn.microsoft.com/ko-kr/library/ms188386.aspx
-
Do I really need to use DTC Transactions? :
http://blogs.msdn.com/b/psssql/archive/2015/01/26/do-i-really-need-to-use-dtc-transactions.aspx
2015-01-27 / 강성욱 / http://sqlmvp.kr
트랜잭션, 원격 트랜잭션, DTC, DISTRIBUTED TRANSACTION, 분산 트랜잭션, 데이터베이스, SQL Server, mssql, DTC 오버헤드, DTC Overhead
'SQL Server > SQL Server Tip' 카테고리의 다른 글
날짜 참조 테이블 만들기 (0) | 2015.07.23 |
---|---|
인덱스 상세 정보 확인 (0) | 2015.07.23 |
대용량 로드를 위한 BULK INSERT 옵션 (0) | 2015.07.23 |
SQL Server 2014 Diagnostic Information Queries (0) | 2015.07.23 |
SQL Server 2012 Contained Database (0) | 2015.07.23 |