[.NET][System.Transaction] System.Transaction 트랜잭션의 Timeout 값 조정
[정보]
트랜잭션의 타임아웃 설정의 기본값과 최대값을 지정할 수 있다.
기본값은 어플리케이션에서 System.Transaction을 사용해 트랜잭션 작업 수행 시 별도의 명시가 없으면 기본적으로 사용되는 타임아웃을 말한다.
최대값은 해당 시스템 상에서 트랜잭션이 가질 수 있는 최대의 시간을 말한다.
System.Transaction을 사용한 트랜잭션 타임아웃의 기본값은 60초.
System.Transaction을 사용한 트랜잭션 타임아웃의 최대값은 기본 10분.
타임아웃 최대값이 10분이면, 어플리케이션 단에서 System.Transaction 타임아웃을 10분 이상 지정하더라도, 최대 10분까지의 트랜잭션 시간만을 허용함.
참고로, 웹 서비스의 실행시간(executionTimeout) 이나 ADO.NET Command의 CommandTimeout 값 등을 조정할 때, 이 트랜잭션 타임아웃에 상응하는 값으로 적절하게 조정하여야 함.
- executionTimeout : 기본 110 초
- CommandTimeout : 기본 30초
타임아웃 기본값은 각 어플리케이션 구성을 통해 조정하거나 프로그래밍 적으로 조정가능함.
아래는 구성파일을 통해 트랜잭션 타임아웃을 30초로 변경, 또한 웹 서비스 실행시간은 300초로 조정
[web.config]
<configuration>
....
<system.web>
.......
<httpRuntime executionTimeout = "300" />
</system.web>
<system.transactions>
<defaultSettings timeout="00:00:30" />
</system.transactions>
</configuration>
아래는 프로그래밍 적으로 30초로 변경
TransactionScope tsScope = null;
using (tsScope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0, 0, 30)))
{
// 데이터베이스 작업 1 : 레코드 삭제
// Delay 발생 : 31초
System.Threading.Thread.Sleep(31 * 1000);
// 데이터베이스 작업 2 : 레코드 생성
// 데이터베이스 작업 3 : 레코드 수정
tsScope.Complete();
}
** 타임아웃 최대값은 시스템 레벨에서의 Timeout 조정만 가능함, 따라서 machine.config에서만 조정 가능
[machine.config 구성 샘플]
<configuration>
<system.transactions>
<!-- 트랜잭션 타임아웃의 기본값 지정 -->
<defaultSettings distributedTransactionManagerName="SERVER1" timeout="00:01:00"/>
<!-- 트랜잭션 타임아웃의 최대값 지정 -->
<font color=red><b> <machineSettings maxTimeout="02:00:00"/> </b></font>
</system.transactions>
</configuration>
참고 : http://msdn2.microsoft.com/ko-kr/library/system.transactions.configuration.machinesettingssection(VS.80).aspx