윈 토토다양한 제공 테이블의 데이터에 대한 동시 액세스를 제어하기위한 잠금 모드. 이것들 모드는 응용 프로그램 제어 잠금에 사용될 수 있습니다 MVCC가 원하는 행동을 제공하지 않는 상황. 또한, 최대윈 토토명령 적절한 모드의 잠금 장치를 자동으로 획득하여이를 확인합니다 참조 테이블은 호환되지 않거나 수정되지 않습니다 명령이 실행되는 동안. (예를 들어,Alter Table동시에 실행할 수 없습니다 같은 테이블의 다른 작업.)
아래 목록은 사용 가능한 잠금 모드와 컨텍스트가 자동으로 사용되는 컨텍스트윈 토토. 이 모든 것을 기억하십시오 잠금 모드는 이름에 포함하더라도 테이블 레벨 잠금입니다. 단어"행". 자물쇠의 이름 모드는 역사적입니다. 어느 정도까지 이름은 다음을 반영합니다 각 잠금 모드의 일반적인 사용 --- 그러나 의미론은 모두 동일합니다. 하나의 잠금 모드와의 유일한 차이점 다른 하나는 각 충돌하는 잠금 모드 세트입니다. 둘 트랜잭션은 상충되는 모드의 잠금을 동일하게 유지할 수 없습니다. 동시에 테이블. (그러나 거래는 결코 상충되지 않습니다 그 자체로 --- 예를 들어, 획득 할 수 있습니다액세스 독점잠금 및 나중에 인수액세스 공유같은 테이블을 잠그십시오.) 비 분쇄 잠금 모드는 많은 사람들에 의해 동시에 보관 될 수 있습니다 업무. 특히 일부 잠금 모드가 있습니다 자기 분류 (예 :액세스 독점적인시간) 다른 사람들은 자기 분광이 아니지만 (예를 들어,액세스 공유다중으로 보관할 수 있습니다 업무). 일단 획득하면 잠금 모드는 끝까지 유지됩니다. 거래.
데이터베이스 서버, 사용pg_locks시스템보기. 상태 모니터링에 대한 자세한 내용은 잠금 관리자 서브 시스템, 참조윈 토토 7.3.21 관리자 안내서.
테이블 레벨 잠금 모드
액세스 독점적인잠금 모드 만.
theselect명령 a 참조 테이블 에서이 모드의 잠금. 일반적으로 테이블 만 읽고 수정하지 않는 쿼리 이 잠금 모드 획득.
독점and액세스 독점잠금 모드.
the업데이트 선택명령
대상 테이블 에서이 모드의 잠금을 얻습니다 (
에 대한 추가액세스 공유잠금
참조하지만 선택되지 않은 다른 테이블에서업데이트
).
공유, 공유 ROW 독점, 독점및액세스 독점적인잠금 모드.
명령업데이트, 삭제및삽입이 잠금 모드를 획득하십시오 대상 테이블 (외에액세스 공유하다다른 참조 테이블의 잠금). ~ 안에 일반적 으로이 잠금 모드는 모든 쿼리에서 획득됩니다. 테이블의 데이터를 수정합니다.
공유 업데이트 독점적인, 공유, 공유 ROW 독점, 독점및액세스 독점적인잠금 모드. 이 모드는 테이블을 보호합니다 동시 스키마 변경 및진공runs.
획득진공(full
).
행 독점적인, 공유 업데이트 독점적인, 공유 행 독점적인, 독점및액세스 독점잠금 모드. 이 모드는 동시 데이터로부터 테이블을 보호합니다 변화.
획득색인 생성.
행 독점적인, 업데이트를 공유합니다 독점적인, 공유, 공유 ROW 독점, 독점및액세스 독점적인잠금 모드.
이 잠금 모드는 자동으로 획득되지 않습니다윈 토토명령.
행 공유, Row Exclusive, 독점 업데이트 공유, 공유, 공유 행 독점적인, 독점및액세스 독점잠금 모드. 이 모드는 동시 만 허용액세스 공유, 즉, 만 읽습니다 테이블은 거래 보유와 병렬로 진행할 수 있습니다 이 잠금 모드.
이 잠금 모드는 자동으로 획득되지 않습니다윈 토토명령.
모든 모드의 잠금과 충돌합니다 (액세스 공유, 행 공유하다, Row Exclusive, 공유 업데이트 독점, 공유, 공유 Row 독점, 독점, 그리고액세스 독점). 이 모드 보유자가 유일한 거래임을 보장합니다 어떤 식 으로든 테이블에 액세스합니다.
획득Alter Table, 드롭 테이블및진공 Full명령. 이것은 또한입니다 의 기본 잠금 모드잠금 테이블모드를 명시 적으로 지정하지 않는 진술.
참고 :만액세스 독점적인잠금 블록 Aselect(
업데이트
) 문.
테이블 레벨 잠금 외에도로드 레벨 잠금 장치가 있습니다. 특정 행의 행 수준 잠금 장치가 자동으로 획득됩니다. 행이 업데이트 된 경우 (또는 업데이트로 삭제 또는 표시). 그만큼 트랜잭션이 저지르거나 롤백 될 때까지 잠금이 유지됩니다. 로우 레벨 잠금은 데이터 쿼리에 영향을 미치지 않습니다. 그들은 차단같은 작가 열만. 없이 행에 줄 수준의 잠금 장치를 얻으려면 실제로 행 수정,로 행을 선택하십시오.업데이트 선택. 한 번 특정 로우 레벨 잠금이 취득되면 거래가 행을 업데이트 할 수 있습니다. 갈등에 대한 두려움없이 여러 번.
윈 토토기억하지 못합니다 메모리에서 수정 된 행에 대한 정보는 없습니다. 한 번에 잠긴 행 수에 대한 제한. 하지만, 행을 잠그면 디스크 쓰기가 발생할 수 있습니다. 예를 들어,업데이트 선택선택된 수정 표시하는 행을 표시하면 디스크가 쓰여집니다.
테이블 및 행 잠금 외에도 페이지 수준 공유/독점 잠금 장치는 읽기/쓰기 액세스를 제어하는 데 사용됩니다 공유 버퍼 풀의 표 페이지. 이 자물쇠가 해제됩니다 튜플이 가져 오거나 업데이트 된 직후. 애플리케이션 작가는 일반적으로 페이지 수준의 잠금에 관심을 가질 필요가 없습니다. 그러나 우리는 완전성을 위해 그들을 언급합니다.
명시 적 잠금의 사용을 유발할 수 있습니다교착 상태, 여기서 두 (또는 그 이상) 트랜잭션 각각은 상대방이 원하는 잠금 장치입니다. 예를 들어, if 트랜잭션 1은 테이블 A에서 독점 잠금을 획득 한 다음 표 B에서 독점적 인 잠금을 취득하려고 시도하는 동안 트랜잭션 2는 이미 독점적 인 잠금 테이블 B와 현재입니다 테이블 A에 독점적 인 잠금을 원한다면 어느 쪽도 진행하다.윈 토토교착 상태를 자동으로 감지하여 해결합니다 관련된 거래 중 하나를 중단하여 허용합니다 다른 완료. (정확히 어떤 거래가 될 것인지 낙태는 예측하기 어렵고 의존해서는 안됩니다. 에.)
교착 상태에 대한 최선의 방어는 일반적으로 피하는 것입니다 데이터베이스를 사용하는 모든 응용 프로그램이 일관된 순서로 여러 객체의 잠금 장치를 얻습니다. 하나 또한 첫 번째 잠금 장치가 트랜잭션은이를 위해 필요한 최고 모드입니다. 물체. 미리 확인하는 것이 불가능하다면 교착 상태는 거래를 다시 시도하여 날짜로 처리 할 수 있습니다 교착 상태로 인해 중단됩니다.
교착 상태 상황이 감지되지 않는 한 거래 테이블 레벨 또는 로우 레벨 잠금을 찾는 것이 기다립니다 충돌하는 자물쇠가 릴리스되기 위해 무기한. 이것은 의미합니다 애플리케이션이 거래를 개방하는 것은 나쁜 생각입니다. 장기간 (예 : 사용자 입력을 기다리는 동안).