를 사용하는 데 도움이 필요 더티 읽기 작업을 허용합니다. TransactionScopeOption
에 대한 자료를 읽었으나이 경우 정확하게 TransactionScopeOption
을 찾지 못하거나 RequiredNew
으로 옵션을 변경할 수 있고 선택 명령을 실행할 때마다 새 트랜잭션을 만들 수 있다고 생각합니다. 앞으로 나아갈 수 있도록 도와주세요. 우리는 SQL Server를 데이터 소스로 사용하고 있습니다. RequiredNew
으로 변경하면 응용 프로그램의 모든 select entity 명령에 대해이 변경이 수행되기 때문에 성능에 미치는 영향은 무엇입니까?내가 트랜잭션 범위에 대한 코드의 다음 줄을 발견 응용 프로그램에서 교착 상태에 대한 analaysis 및 예방 조치 일하고 트랜잭션 범위
답변
IsolationLevel
이 ReadUncommitted
이되도록 허용하려면 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
에 접근하는 방식을 변경하여 입증 된 권장 패턴으로 문제를 피하는 것입니다.
['Microsoft Distributed Transaction Coordinator'] (https://en.wikipedia.org/wiki/Microsoft_Distributed_Transaction_Coordinator)는 어떤 역할을합니까? –
@AnkushMadankar 답변을 내 생각에 추가했습니다 –
트랜잭션 범위를 'RequiredNew'로 변경하면 성능에 대한 생각을 할 수 있습니까?이 변경은 전체 애플리케이션에서 select entity 명령을 사용하는 모든 호출에 대해 수행됩니다. –
귀하의 질문에 대한 확신이 없습니다. 프로그램 - -
당신이 물어 의미하는 경우
당신이 당신의 거래 범위의RequiredNew
범위 옵션을 사용할 수 있습니다, 그럼 네, 가능합니다 :
이 이해가 RequiredNew
를 사용 할 수 있습니까? 대부분의 경우, 범위를 다시 사용하지 않고 트랜잭션 범위 을 항상으로 만듭니다. 단점은 this SO post에 언급되어 있습니다.
정확히 무엇입니까? –
@WicherVisser'TransactionScopeOption.Suppress'가'TransactionScopeOption.RequiredNew'로 바뀔 수 있습니까? –