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

보기: 19946|회답: 3

[출처] 데이터베이스 잠금 NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[링크 복사]
게시됨 2021. 1. 14. 오후 3:23:14 | | | |
놀록
이 옵션이 선택되면 SQL 서버는 잠금장치 없이 데이터를 읽거나 수정합니다. 이 경우 사용자는 '더티 데이터'라고 불리는 미커밋 트랜잭션 또는 롤백에서 데이터를 읽을 수 있습니다.

홀드락
이 옵션이 선택되면 SQL Server는 거래 종료 시까지 이 공유 잠금을 유지하며 해제하지 않습니다.

업드록
이 옵션이 선택되면 SQL Server는 데이터를 읽을 때 공유 잠금 대신 수정 락을 사용하며, 전체 트랜잭션이나 명령이 끝날 때까지 이 락을 유지합니다. 이 옵션은 여러 프로세스가 동시에 데이터를 읽을 수 있게 하지만, 오직 그 프로세스만이 데이터를 수정할 수 있도록 합니다.

타블록
이 옵션이 선택되면 SQL Server는 명령이 끝날 때까지 전체 테이블에 공유 락을 걸습니다. 이 옵션은 다른 프로세스들이 데이터를 읽을 수 있고 수정할 수 없도록 보장합니다.

패글록
이 옵션이 기본 옵션이며, 선택하면 SQL Server가 공유 페이지 락을 사용합니다.

TABLOCKX (배타적 테이블 락)
이 옵션이 선택되면 SQL Server는 명령어나 트랜잭션이 종료될 때까지 전체 테이블에 잠금을 걸습니다. 이렇게 하면 다른 프로세스가 테이블 내 데이터를 읽거나 수정하는 것을 방지할 수 있습니다.

HOLDLOCK은 전체 트랜잭션이 완료될 때까지 공유 잠금을 유지하며, 잠긴 객체가 필요 없을 때 즉시 해제되어야 하며, 이는 직렬화 가능한 트랜잭션 격리 수준과 같습니다

NOLOCK 문은 공유 락을 발행하지 않고 실행되며, 이는 READ UNCOMMITTED의 트랜잭션 격리 레벨과 동일한 더티 리드를 허용합니다

PAGLOCK은 하나의 테이블 잠금을 사용하는 다중 페이지 잠금을 사용합니다

READPAST는 SQL 서버가 잠긴 라인을 건너뛰고 트랜잭션을 실행할 수 있게 하며, READ Uncommitd의 트랜잭션 격리 레벨에서는 페이지, 존, 테이블 락은 건너뛰지 않고 RID 락만 건너뛸 수 있습니다

ROWLOCK은 rowlock의 사용을 강제합니다

TABLOCKX는 거래 중 다른 트랜잭션이 테이블을 사용하지 못하도록 배타적 테이블 수준 잠금을 강제합니다

UPLOCK은 공유 잠금이 없는 테이블을 읽을 때 업데이트를 강제로 사용합니다

참고: 데이터베이스에서 테이블을 잠그는 것의 차이점
SELECT * WITH TABLE과 함께: 다른 트랜잭션은 테이블을 읽을 수 있지만, 업데이트하거나 삭제할 수는 없습니다
SELECT * FROM table WITH (TABLOCKX) 다른 트랜잭션은 테이블을 읽고, 업데이트하며, 삭제할 수 없습니다




이전의:Win10 원격 데스크톱 듀얼 스크린 디스플레이
다음:.NET/C# 네이더슬 기반 ETH 지갑 계정과 인증 비밀번호 생성 [소스 코드 포함]
 집주인| 게시됨 2021. 1. 14. 오후 4:53:24 |
TABLOCKX 잠금장치 테스트

테스트 SQL은 다음과 같습니다:


C# 코드 테스트:


디스커버리,전체 테이블이 잠기며, 트랜잭션이 실행될 때만 데이터를 조회할 수 있습니다, 아래 그림에서 볼 수 있습니다:



WITH(TABLOCKX)를 삭제하고 ID 1로 된 데이터만 업데이트하면 테스트 결과는 다음과 같습니다:



작업 2와 작업 4는 ID 1의 데이터를 포함하지 않기 때문에 쿼리가 매우 빠르며, 작업 3과 4는 트랜잭션이 완료될 때까지 기다려야 쿼리를 진행합니다.

데이터 수정 시 동작

행 버전 관리 방식을 사용하는 커밋 리드 트랜잭션에서는 블로킹 스캔을 통해 업데이트할 행을 선택하며, 데이터 값이 읽힐 때 데이터 행에 업데이트 락(U-락)이 적용됩니다. 이는 라인 버전 제어를 사용하지 않는 커밋드 리드 트랜잭션과 동일합니다. 데이터 행이 업데이트 기준을 충족하지 못하면 해당 행에 업데이트 잠금이 해제되고 다음 행이 잠기고 스캔됩니다.

업데이트 락(U): 두 트랜잭션이 먼저 데이터 자원을 읽는 교착 상태를 방지하는 잠금 모드입니다. 수정 시 공유 잠금과 독점 잠금을 사용하면 때때로 교착 상태가 발생하지만, 업데이트 잠금을 사용하면 교착 상태를 방지할 수 있습니다. 자원의 업데이트 잠금은 한 번에 한 트랜잭션에만 할당할 수 있으며, 자원을 수정해야 할 경우 업데이트 잠금은 배타적 잠금이 되고, 그렇지 않으면 공유 잠금이 됩니다.

하이퍼링크 로그인이 보입니다.

 집주인| 게시됨 2021. 1. 28. 오후 5:30:51 |
출판하다:

udpate a
Set column1 = 1
여기서 idx = 1
sqlserver가 update 문을 실행하면 전체 테이블이 잠깁니다

분석:

감시 구조,기본 키가 없으면 행만 잠글 수 없습니다
 집주인| 게시됨 2023. 5. 2. 오전 11:47:24 |
Entity Framework 쿼리 최적화 WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com