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

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

DTC Transacntion 오버헤드

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

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
2011 TDE 암호화된 데이터베이스 복원 jevida(강성욱) 2017.01.11 2474
2010 재해복구를 위한 SQL Server 역할 가져오기 jevida(강성욱) 2017.01.11 2286
2009 비관리자 계정에 Profiler 실행 권한 부여하기 jevida(강성욱) 2017.01.11 3127
2008 SQL Server Agent 공유 일정 생성하기 jevida(강성욱) 2017.01.11 2147
2007 인덱스 리빌드는 통계를 업데이트 할까? jevida(강성욱) 2017.01.11 2361
2006 인덱스 유지관리 작업과 SQL Server 쿼리 성능 jevida(강성욱) 2017.01.11 3324
2005 네트워크 드라이브에 데이터베이스 복원하기 jevida(강성욱) 2017.01.11 4092
2004 확장 저장 프로시저를 활용한 논리디스크 용량 확인 jevida(강성욱) 2017.01.11 2463
2003 날짜 참조 테이블 만들기 jevida(강성욱) 2017.01.11 3040
2002 인덱스 상세 정보 확인 jevida(강성욱) 2017.01.11 3761
» DTC Transacntion 오버헤드 jevida(강성욱) 2017.01.11 1289
2000 대용량 로드를 위한 BULK INSERT 옵션 jevida(강성욱) 2017.01.11 5305
1999 SQL Server 2014 Diagnostic Information Queries jevida(강성욱) 2017.01.11 1612
1998 SQL Server 2012 Contained Database jevida(강성욱) 2017.01.11 1003
1997 SQL Server 2008R2 Diagnostic Information Queries jevida(강성욱) 2017.01.11 1421
1996 SQL Server 2005 Diagnostic Information Queries jevida(강성욱) 2017.01.11 1361
1995 601 Error, Could not continue scan with NOLOCK due to SQL Server data Movement jevida(강성욱) 2017.01.11 3734
1994 데이터베이스의 모든 인덱스 생성 삭제 스크립트 만들기 jevida(강성욱) 2017.01.11 1663
1993 SQL Server Spinlock 소개 jevida(강성욱) 2017.01.11 1586
1992 Ad-hoc 쿼리와 실행계획 jevida(강성욱) 2017.01.11 2574





XE Login