문제

나는 부분의 팀 구축 ADO.NET 기반 web-site.우리는 때때로 몇 가지 개발자는 자동 테스트 도구는 작업을 동시에 개발의 데이터베이스 복사본.

우리가 사용하는 스냅샷 격리 레벨,최고의 지식은,사용하는 낙관적 인 동시성:다,그것은 희망이 최고의 그리고 예외가 발생한 경우려고하는 경우 트랜잭션의 영향을 받은 행에 의해 변경되었을 다른 동안 파티 트랜잭션이 있습니다.

을 사용하여 스냅샷을 격리 수준은 우리가 사용:

ALTER DATABASE <database name>
SET ALLOW_SNAPSHOT_ISOLATION ON;

과에서는 C#:

Transaction = SqlConnection.BeginTransaction(IsolationLevel.Snapshot);

Note IsolationLevel 스냅샷으로 ReadCommitted 스냅샷,는 우리는 또한 시도했지만 현재 사용하지 않.

하나의 개발자 입력 디버깅 모드와 일시 중지.인터넷 응용 프로그램,그들이의 연결과 함께 활성 트랜잭션 디버깅하는 동안.지금,나는 이것을 기대하지 않는 것이 문제가 될-후,모든 트랜잭션을 사용하는 스냅샷을 격리 수준을하는 동안 그래서 하나의 트랜잭션을 일시중지,다른 거래를 할 수 있어야 정상적으로 진행 이후로 일시 중지된 트랜잭션이 없을 잡고 모든 잠급니다.물론,일시 중지된 트랜잭션이 완료,그것을 가능성이 충돌을 감지;그러나 허용하는 한 다른 개발자 그리고 자동화 된 테스트를 진행할 수 있습 방해받지 않.

그러나 실제로는 때에 한 사람이 정지하는 트랜잭션 디버깅하는 동안,다른 모든 DB 의 사용자가 액세스하려고 시도하는 동일한 행 차단된 사용에도 불구하고 스냅샷을 격리 수준입니다.

누군가는 이유를 알고 이 발생합니다,및/또는 어떻게 달성할 수 있는 진정한 낙관적(non-blocking)concurrency?

해상도(불행한 나를 위해 하나): 스 Rusanu 주목하는 작가가 항상 다른 작가,이에 의해 백업됩 MSDN -지 않는 아주 나와서 이렇게 말하지만 언급을 피하는 독자가 잠깁니다.에 짧고,행동이 나는 원하지 않는 구현에서는 SQL Server.

도움이 되었습니까?

해결책

스냅샷을 격리 수준에 영향을처럼,모든 격리 수준만을 읽고 있습니다.쓰은 여전히 차단됩니다.당신이 믿는 경우에는 무엇을 보고는 읽 블록,당신은 추가적인 조사를 수행하고 확인하는 리소스 유형 및 자원 이름에는 차단기가 발생합니다(wait_type 및 wait_resource 에 sys.dm_exec_requests).

내가 권하고 싶지 않기에 코드 변경을 지원하기 위해 포함하는 시나리오를 개발자를 쳐다보고 디버거를 위한 분입니다.다고 생각하는 경우 이 시나리오를 반복할 수 있는 생산에서(예.클라이언트 정지)다음은 다른 이야기입니다.을 달성하기 위해 무엇을 원하는 최소화해야 합니다 기록하고 수행하는 모든 기록의 끝에서 트랜잭션에서,하나의 전화는 커밋하기 전에 반환합니다.이 방법은 없는 클라이언트가 개최 X 잠금 장기간(할 수 없다는 사실을 잡고 있는 동안 X locks).실제로 이것은 매우 단단하고 필요한 많은 분야에서는 일부의 개발자에 어떻게 쓰는 데이터 액세스 코드를 받으시기 바랍니다.

다른 팁

한 개발자가 거래를 일시 중지 할 때 자물쇠를 보셨습니까? 또한 스냅 샷 격리 레벨을 켜는 것만으로도 큰 영향을 미치지 않습니다. allow_snapshot_isolation을 설정 했습니까?

단계는 다음과 같습니다.

ALTER DATABASE <databasename>
SET READ_COMMITTED_SNAPSHOT ON;
GO

ALTER DATABASE <database name>
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO

스냅 샷 격리를 위해 데이터베이스가 활성화 된 후 개발자와 사용자는이 스냅 샷 모드에서 트랜잭션을 실행하도록 요청해야합니다. 이는 ADO.NET Transaction Object의 클라이언트 측 지침에 의해 또는 다음 명령문을 사용하여 Transact-SQL 쿼리 내에서 트랜잭션을 시작하기 전에 수행해야합니다.

SET TRANSACTION ISOLATION LEVEL SNAPSHOT

주권

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top