답변:
유추
때로는 컴퓨터에서 멀리 유추를 사용하는 데 도움이됩니다.
공 하나와 두 자녀가 있다고 가정 해 봅시다. 한 번에 한 명의 어린이 만 공을 가질 수 있습니다. 그러나 어린이 중 한 명이 공을 가져 와서 산만 해져 놓아 두지 않으면 (예 : TV 시청), 다른 어린이는 공을 가지고 놀 수 없습니다.
다른 자식은 해당 리소스에서 차단됩니다.
예를 들어 이것을 TV와 비교하면 여러 어린이가 어느 시점에서나 TV를 볼 수 있습니다.
자물쇠
데이터베이스 세계로 넘어 가면 위의 두 예제와 같이 리소스를 사용하는 다른 방법이 있음을 알 수 있습니다. "읽기"를 수행하거나 "쓰기"를 수행 할 수 있습니다.
데이터를 읽고 싶을 때 두 사람이 TV를 보는 것처럼 다른 사람도 데이터를 읽을 수없는 이유는 없습니다. 그러나 데이터를 쓰려면 다른 사람이 데이터를 보지 않도록해야합니다. 우리가 쓰고있는 동안 그들이 읽는다면, 그들은 "더러운"읽습니다. 즉, 데이터가 부분적으로 작성된 것을 볼 수 있으며 이는 유효하지 않습니다.
이러한 더티 읽기가 발생하지 않도록하기 위해 읽기 잠금과 배타적 잠금이라는 두 가지 기본 잠금 유형이 있습니다.
읽기 잠금
주어진 시간에 동일한 데이터 소스에서 여러 개의 서로 다른 연결을 읽을 수 있습니다. 그러나 데이터를 읽는 동안 아무도 데이터를 변경하지 않도록하기 위해 읽기 잠금을 해제합니다.
연결에 데이터에 대한 읽기 잠금이 있으면 다른 모든 연결은 데이터를 쓰기 전에 읽기 잠금이 해제 될 때까지 기다려야 합니다. 그러나 다른 사람들은 동일한 데이터 조각에서 자체 읽기 잠금을 수행 할 수 있습니다.
독점 잠금
연결에서 데이터를 업데이트 / 삽입 / 삭제하려면 독점 잠금을 해제해야합니다. 이렇게하면 다른 연결이 데이터를 잠그지 못하게됩니다 (잠금을 해당 연결에만 적용).
연결에 데이터에 대한 독점 잠금이있는 경우 데이터에서 다른 연결을 읽을 수 없습니다. 이렇게하면 데이터를 쓰는 동안 아무도 데이터를 읽을 수 없도록하여 더티 읽기를 방지 할 수 있습니다.
블로킹
"차단"은 단순히 다른 연결이 읽기 또는 쓰기를 원할 때 한 연결이 리소스에 대한 잠금을 보유하고 있음을 의미하는 용어입니다. 반드시 소유자 연결이 연결을 해제하지 않고 현재 연결을 유지하고 있다는 의미는 아닙니다.
공을 들고있는 아이의 경우와 비교해보십시오. 공을 들고있는 어린이가 다른 모든 어린이가 공을 들고있는 것을 막고 있습니다.
이중 자물쇠
나는 당신이 이것을 묻지 않았다는 것을 알고 있지만 교착 상태에 빠지는 단계는 하나뿐입니다 (그리고 그것은 블로킹과 매우 직접 관련이 있습니다).
교착 상태는 각각 잠금이있는 두 개의 연결이 있지만 서로의 리소스를 원할 때 발생할 수 있습니다. 이 시나리오에서는 각각 공을 가지고 있지만 다른 공을 원하는 것은 두 자녀와 같습니다.
어린이와 마찬가지로 이러한 연결은 기꺼이 공유하지 않습니다. 계속하려면 각 연결에 두 자원 모두에 액세스해야합니다. 그러나 영구 차단 상태에 있습니다. 이 상태에서 상위 (DBMS)가 들어 와서 패자를 선택해야 하위 (연결) 중 하나가 두 자원 모두에 액세스 할 수 있습니다.
해당 "승인"연결이 완료되면 리소스가 해제되고 다른 연결 ( "손실") 연결이 다시 시도되어 두 리소스를 모두 얻을 수 있습니다.
교착 상태의 개념은 서로를 차단하는 두 개의 자원이있는 곳입니다.
여기 에서는 SQL Server가 제공하는 모든 종류의 잠금 및 차단 / 교착 상태를 유발할 수있는 다양한 리소스에 대해 자세히 알아볼 수 있습니다. 이 기사는 오래되었지만 SQL Server 2000에서 2008 R2까지 계속 적용됩니다. 이후 버전의 SQL Server에는 몇 가지 유형의 잠금이 추가되었지만 시작점을 제공합니다.
Richard의 훌륭한 설명이지만 공식 문서에 대한 링크를 추가하고 싶었습니다. 이 주제는 SQL Server 2000 용으로 작성되었지만 오늘날에도 많은 개념이 동일하게 유지됩니다.
편집-일부 추가 사항 :
차단 비디오와 싸우는 다섯 가지 방법 -Kendra Little의 최신 비디오 (오늘 게시)
형사로서의 DBA : 잠금 및 차단 문제 해결 -Rodney Landrum
SQL Profiler로 차단 문제를 식별하는 방법 -Brad McGehee
3 명 모두 SQL Server 작성자 및 / 또는 MVP로 잘 알려져 있습니다.