데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

DTC Transacntion 오버헤드

jevida(강성욱) 2017.01.11 08:33 Views : 1312

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

 



강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
2003 날짜 참조 테이블 만들기 jevida(강성욱) 2017.01.11 3135
2002 인덱스 상세 정보 확인 jevida(강성욱) 2017.01.11 3804
» DTC Transacntion 오버헤드 jevida(강성욱) 2017.01.11 1312
2000 대용량 로드를 위한 BULK INSERT 옵션 jevida(강성욱) 2017.01.11 5473
1999 SQL Server 2014 Diagnostic Information Queries jevida(강성욱) 2017.01.11 1632
1998 SQL Server 2012 Contained Database jevida(강성욱) 2017.01.11 1033
1997 SQL Server 2008R2 Diagnostic Information Queries jevida(강성욱) 2017.01.11 1438
1996 SQL Server 2005 Diagnostic Information Queries jevida(강성욱) 2017.01.11 1374
1995 601 Error, Could not continue scan with NOLOCK due to SQL Server data Movement jevida(강성욱) 2017.01.11 3897
1994 데이터베이스의 모든 인덱스 생성 삭제 스크립트 만들기 jevida(강성욱) 2017.01.11 1695
1993 SQL Server Spinlock 소개 jevida(강성욱) 2017.01.11 1609
1992 Ad-hoc 쿼리와 실행계획 jevida(강성욱) 2017.01.11 2597
1991 로그인 계정이 접근할 수 있는 데이터베이스 확인 jevida(강성욱) 2017.01.11 3066
1990 클러스터된 SQL 서버 인스턴스에 대한 호스트 이름 확인 jevida(강성욱) 2017.01.11 1387
1989 sys.dm_tran_locks 를 이용한 잠금 정보 확인 jevida(강성욱) 2017.01.11 1581
1988 외래키 제약 조건 삭제 후 재작성 스크립트 생성하기 jevida(강성욱) 2017.01.11 1841
1987 페이지 ID로 테이블 이름 찾기 jevida(강성욱) 2017.01.11 1449
1986 DBCC CHECKPRIMARYFILE 사용법 jevida(강성욱) 2017.01.11 1357
1985 컬럼스토어 인덱스 대용량 데이터 로드 jevida(강성욱) 2017.01.11 1773
1984 컬럼스토어 인덱스 INSERT 작업과 동시성 jevida(강성욱) 2017.01.11 1516





XE Login