2009-03-04 3 views
3

높은 수준에서 TransactionScope을 사용하여 데이터베이스에 대한 여러 연결을 만드는 일부 고급 코드를 래핑합니다.높은 수준에서 사용할 데이터베이스 격리 수준을 어떻게 지정합니까?

내가 호출하는 함수 중 하나는 read uncommitted 격리 수준이 필요한 읽기 전용 함수에 사용되는 일반 읽기입니다. 그러나 경우에 따라 큰 업데이트 작업의 일부로 사용되며 read committed이 더 적합합니다.

트랜잭션 범위 내에서 함수를 호출하는 최상위 레벨에서 트랜잭션의 격리 수준을 설정할 수 있어야합니까?

답변

4

TransactionScope 자체에서 격리 수준을 설정할 수 있습니다. 이게 네가 말하는거야?

using (var txn = new TransactionScope(
    TransactionScopeOption.Required, 
    new TransactionOptions 
    { 
     IsolationLevel = IsolationLevel.ReadUncommitted 
    } 
)) 
{ 
    // Your LINQ to SQL query goes here 
} 

(내 블로그 게시물 here에서 도난 코드입니다.)

+0

감사합니다, 나는 그것을 놓친 방법을 모르는 SQL 서버 행 버전 관리/스냅 샷 격리 할 수있는 훌륭한 가이드입니다. – tpower

1

당신은 연결 수준 및 문/트랜잭션 수준에서 트랜잭션 격리 수준을 정의 할 수 있습니다.

시나리오를 올바르게 이해 한 경우, 주어진 연결 내의 대부분의 다른 활동이 읽기 전용 활동이 될 경우 특정 업데이트 쿼리 이전에 트랜잭션 격리 수준을 조정하는 것이 좋습니다.

SQL Server의 기본 격리 수준은 읽기 전용이므로 연결 수준에서 다른 격리 수준을 설정하면 업데이트 전에 트랜잭션/문 수준에서 읽기 전용으로 swith해야합니다 .

물론 기본 분리 레벨을 그대로 두는 것도 고려해야 할 사항입니다. Read Committed가 일반적인 읽기 활동에 적절하지 않다고 생각하는 특별한 이유가 있습니까?

의미가 있습니까? 추가 설명이 필요한 경우 알려주십시오.

환호

업데이트 의견에 따라.

하이 엔드 OLTP 데이터베이스를 개발하는 경우 행 버전 관리라는 SQL Server 기술/원칙을 살펴 보는 것이 좋습니다. 이렇게하면 레코드 버전의 읽기를 수행 할 수 있습니다. 그런 기술을 사용할 때 tempdb에 오버 헤드가 있지만 충분한 하드웨어를 사용하는 경우 적절할 수 있습니다. 다음 백서

http://msdn.microsoft.com/en-us/library/ms345124.aspx

+2

큰 삽입/삭제 작업이 수행되는 동안 커밋 된 읽기가 차단됩니다. – tpower