2016-06-21 7 views
4

를 사용하는 데 도움이 필요 더티 읽기 작업을 허용합니다. TransactionScopeOption에 대한 자료를 읽었으나이 경우 정확하게 TransactionScopeOption을 찾지 못하거나 RequiredNew으로 옵션을 변경할 수 있고 선택 명령을 실행할 때마다 새 트랜잭션을 만들 수 있다고 생각합니다. 앞으로 나아갈 수 있도록 도와주세요. 우리는 SQL Server를 데이터 소스로 사용하고 있습니다. RequiredNew으로 변경하면 응용 프로그램의 모든 select entity 명령에 대해이 변경이 수행되기 때문에 성능에 미치는 영향은 무엇입니까?내가 트랜잭션 범위에 대한 코드의 다음 줄을 발견 응용 프로그램에서 교착 상태에 대한 analaysis 및 예방 조치 일하고 트랜잭션 범위

+0

정확히 무엇입니까? –

+0

@WicherVisser'TransactionScopeOption.Suppress'가'TransactionScopeOption.RequiredNew'로 바뀔 수 있습니까? –

답변

4

IsolationLevelReadUncommitted이되도록 허용하려면 TransactionScopeOption.Suppress을 사용하지 않아야합니다. TransactionScopeOption.Suppress

사용은 SQL 서버에서 IsolationLevel.ReadCommitted있는 데이터베이스의 기본에 대한 Transaction 항상 IsolationLevel 기본값에 참여하지 않습니다.

Ambient 트랜잭션으로 참여하거나 IsolationLevel.ReadUncommitted으로 새 트랜잭션을 생성해야합니다.

그래서 내가 원하는 경우 더티 읽기를 허용하려면 TransactionScopeOption.RequiredNew으로 확실히 변경할 수 있습니다.

편집
짧은 답변 : 방법으로

긴 답변 : MS DTC에
에스컬레이션은 하나의 TransactionScope에서 DB에 하나 이상의 연결을 갖는 결과이다.

다른 버전의 SQL Server에서는이 방법을 다른 방식으로 처리합니다. SQL Server 2008은 두 연결이 동시에 열려 있지 않으면 에스컬레이션되지 않으며 이전 버전은 항상 여러 연결에서 에스컬레이션됩니다.

하나의 TransactionScope에 여러 개의 연결이 없는지 확인하십시오. 괜찮을 것입니다. 그러나 코드를 보면 이미 여러 개의 연결이 열려 있으며 MS DTC 에스컬레이션이 만들어집니다.

RequiresNew을 사용하면 Ambient 범위에 포함 되더라도 항상 TransactionScope을 새로 만드는 것을 의미합니다. 제대로 처리되지 않으면 교착 상태와 시간 초과 문제가 발생합니다.가장 좋은 방법은 DB에 접근하는 방식을 변경하여 입증 된 권장 패턴으로 문제를 피하는 것입니다.

+0

['Microsoft Distributed Transaction Coordinator'] (https://en.wikipedia.org/wiki/Microsoft_Distributed_Transaction_Coordinator)는 어떤 역할을합니까? –

+0

@AnkushMadankar 답변을 내 생각에 추가했습니다 –

+0

트랜잭션 범위를 'RequiredNew'로 변경하면 성능에 대한 생각을 할 수 있습니까?이 변경은 전체 애플리케이션에서 select entity 명령을 사용하는 모든 호출에 대해 수행됩니다. –

2

귀하의 질문에 대한 확신이 없습니다. 프로그램 - -

당신이 물어 의미하는 경우

당신이 당신의 거래 범위의 RequiredNew 범위 옵션을 사용할 수 있습니다, 그럼 네, 가능합니다 :

enter image description here

이 이해가 RequiredNew를 사용 할 수 있습니까? 대부분의 경우, 범위를 다시 사용하지 않고 트랜잭션 범위 을 항상으로 만듭니다. 단점은 this SO post에 언급되어 있습니다.