이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 12282|회답: 0

[출처] SQL Server는 트랜잭션 격리 레벨을 설정합니다

[링크 복사]
게시됨 2021. 2. 5. 오전 11:53:34 | | | |
Entity Framework 쿼리 최적화 WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html

데이터베이스 잠금 NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX
https://www.itsvse.com/thread-9519-1-1.html
SQL Server에서 트랜잭션의 격리 수준과 더티 리드, 비반복 리드, 팬텀 리드 등과 (코드 인자 및 시간 순서) 간의 관계

데이터베이스에 동시 접근할 때 발생할 수 있는 이러한 문제를 이해하면, 우리는 데이터베이스 격리 수준 개념을 쉽게 이해할 수 있습니다: 동시 거래를 어떻게 그리고 어느 정도까지 격리할 것인가? 예를 들어, 더티 리드를 허용하거나 동시 트랜잭션에 더티 리드가 발생하지 않도록 설정하면 이 격리 레벨을 설정해 동시 트랜잭션 간의 격리를 느슨하거나 심각하게 만들 수 있습니다.

격리 수준이 높을수록 더러운 데이터나 불완전한 데이터를 읽을 확률이 낮지만, 고동시성 시스템에서 성능 저하가 더 심각합니다. 격리 수준이 낮을수록 동시 시스템의 성능 향상이 더 크지만, 데이터 자체는 불완전할 수 있습니다.

SQL Server 2012에서는 트랜잭션의 격리 수준(낮은 순서부터 높은 순서)을 다음과 같은 문법으로 설정할 수 있습니다:

트랜잭션 격리 수준 설정
    { 읽기: 미정답
    | 읽기 전부
    | 반복 읽기 가능
    | 스냅샷
    | 직렬화 가능
    }
[ ; ]
먼저, 새로운 테스트 스크립트를 만들고 데이터베이스를 생성한 후 테스트 데이터를 삽입하세요. 다음과 같습니다:



새 창 A 생성트랜잭션을 열고 업데이트 작업을 수행한 후 10초 후 커밋하는 코드는 다음과 같습니다:

새 창 B 생성, 트랜잭션을 READ UNCOMMITTED(미커밋 읽기, 가장 낮은 수준)로 설정하세요. 쉬운 문제는 더티 리딩으로, 다른 트랜잭션이 수정한 데이터를 읽을 수 있지만 커밋되지 않은 경우입니다. 트랜잭션에서 SELECT 문장 객체 테이블에 NOLOCK을 설정하는 것과 같은 역할을 합니다. 데이터를 조회하면 코드는 다음과 같습니다:

새 창 생성 C, 데이터를 직접 쿼리하여, 다음과 같이 :

그 결과,창 A, B, C를 실행해 보면 데이터를 업데이트할 때 창 B가 즉시 데이터를 반환할 수 있습니다 (읽기 데이터가 더티 데이터일 가능성도 있습니다) C 윈도우는 A 윈도우가 실행이 완료될 때까지 기다려야 합니다아래 그림과 같이 데이터를 반환합니다:


(창문 B)


(창문 C)

(끝)





이전의:Redis 지속성 중 RDB와 AOF의 차이점
다음:MySQL은 쿼리 결과를 파일로 내보냅니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com