윈 토토다양한 제공 테이블의 데이터에 대한 동시 액세스를 제어하는 윈 토토 모드입니다. 이것들 모드는 애플리케이션 제어 윈 토토에 사용될 수 있습니다. MVCC가 원하는 동작을 제공하지 않는 상황. 또한, 대부분포스트그레SQL명령 자동으로 적절한 모드의 잠금을 획득하여 다음을 보장합니다. 참조된 테이블은 호환되지 않는 테이블에서 삭제되거나 수정되지 않습니다. 명령이 실행되는 동안 방법. (예를 들어,테이블 변경다음과 동시에 실행할 수 없습니다. 같은 테이블에서 다른 작업을 수행합니다.)
아래 목록은 사용 가능한 윈 토토 모드와 자동으로 사용되는 컨텍스트윈 토토. 이 모든 것을 기억하세요. 잠금 모드는 이름에 다음이 포함되어 있더라도 테이블 수준 잠금입니다. 단어"행". 자물쇠의 이름 모드는 역사적입니다. 어느 정도 이름은 다음을 반영합니다. 각 잠금 모드의 일반적인 사용법 --- 그러나 의미는 모두 동일합니다. 하나의 잠금 모드와 다른 잠금 모드 간의 유일한 실제 차이점은 다른 하나는 각각 충돌하는 잠금 모드 세트입니다. 2개 트랜잭션은 동일한 모드에서 충돌하는 모드의 잠금을 보유할 수 없습니다. 동시에 테이블. (그러나 거래는 결코 충돌하지 않습니다. 자체적으로 --- 예를 들어 획득할 수 있습니다.접속 독점윈 토토 후 나중에 획득액세스 공유같은 테이블을 잠급니다.) 충돌하지 않는 윈 토토 모드는 다수에 의해 동시에 유지될 수 있습니다. 거래. 특히 일부 윈 토토 모드는 자기 충돌(예:액세스 독점한 번에 두 개 이상의 트랜잭션을 보유할 수 없습니다. 시간) 다른 사람들은 자기 충돌이 없는 반면(예:액세스 공유여러 명이 보유할 수 있음 거래). 한번 획득하면 윈 토토 모드가 종료될 때까지 유지됩니다. 거래.
현재 해결되지 않은 잠금 목록을 조사하려면 데이터베이스 서버는 다음을 사용합니다.pg_locks시스템 보기. 상태 모니터링에 대한 자세한 내용은 잠금 관리자 하위 시스템은 다음을 참조하세요.윈 토토 7.3.21 관리자 가이드.
테이블 수준 윈 토토 모드
다음과의 충돌액세스 독점윈 토토 모드 전용.
그선택명령은 다음을 획득합니다. 참조 테이블에서 이 모드를 잠급니다. 일반적으로 어떤 테이블을 읽기만 하고 수정하지 않는 쿼리는 이 잠금 모드를 획득하세요.
다음과의 충돌독점그리고접속 독점윈 토토 모드.
그업데이트를 위해 선택명령
          대상 테이블에서 이 모드의 윈 토토을 획득합니다(
          게다가액세스 공유잠금
          참조되었지만 선택되지 않은 다른 테이블에서업데이트용).
다음과의 충돌공유, 행 독점 공유, 독점및액세스 독점윈 토토 모드.
명령어업데이트, 삭제및삽입다음에서 이 잠금 모드를 획득하세요. 대상 테이블(추가로액세스 공유다른 참조 테이블에 대한 잠금). 에서 일반적으로 이 잠금 모드는 모든 쿼리에서 획득됩니다. 테이블의 데이터를 수정합니다.
다음과의 충돌업데이트 공유 독점, 공유, 공유 행 독점, 독점및액세스 독점윈 토토 모드. 이 모드는 테이블을 보호합니다 동시 스키마 변경에 대비하고진공실행됩니다.
취득자진공(없음전체).
다음과의 충돌행 독점, 업데이트 공유 독점, 공유 행 독점, 독점및접속 독점윈 토토 모드. 이 모드는 동시 데이터로부터 테이블을 보호합니다. 변경됩니다.
취득자색인 생성.
다음과의 충돌행 독점, 업데이트 공유 독점, 공유, 공유 행 독점, 독점및액세스 독점윈 토토 모드.
이 윈 토토 모드는 자동으로 획득되지 않습니다.포스트그레SQL명령.
다음과의 충돌행 공유, 행 독점, 업데이트 독점 공유, 공유, 공유 행 독점, 독점및접속 독점윈 토토 모드. 이 모드는 동시만 허용합니다.액세스 공유, 즉, 다음에서만 읽습니다. 테이블은 트랜잭션 보유와 병렬로 진행될 수 있습니다. 이 윈 토토 모드.
이 윈 토토 모드는 자동으로 획득되지 않습니다.윈 토토명령.
모든 모드의 윈 토토과 충돌합니다(액세스 공유, 행 공유, 행 독점, 업데이트 독점 공유, 공유, 공유 행 독점, 독점, 그리고접속 독점). 이 모드 보유자가 유일한 거래임을 보장합니다. 어떤 방식으로든 테이블에 액세스합니다.
다음에 의해 획득됨테이블 변경, 드롭 테이블및진공 가득 참명령. 이것은 또한 기본 잠금 모드:락 테이블모드를 명시적으로 지정하지 않는 명령문.
참고:만액세스 독점윈 토토 블록 a선택(없음
에 대한 업데이트) 진술.
테이블 수준 잠금 외에도 행 수준 잠금이 있습니다. 특정 행에 대한 행 수준 잠금이 자동으로 획득됩니다. 행이 업데이트될 때(또는 삭제되거나 업데이트로 표시될 때) 는 잠금은 트랜잭션이 커밋되거나 롤백될 때까지 유지됩니다. 행 수준 잠금은 데이터 쿼리에 영향을 주지 않습니다. 그들은 차단작가들도 같은 사람에게 행전용. 없이 행에 대해 행 수준 잠금을 획득하려면 실제로 행을 수정하려면 다음을 사용하여 행을 선택하세요.업데이트를 위해 선택. 한 번 특정 행 수준 잠금이 획득되면 트랜잭션이 행을 업데이트할 수 있습니다. 갈등을 두려워하지 않고 여러 번.
포스트그레SQL기억하지 않음 메모리의 수정된 행에 대한 정보가 없으므로 한 번에 잠기는 행 수를 제한합니다. 그러나, 행을 잠그면 디스크 쓰기가 발생할 수 있습니다. 따라서 예를 들어,업데이트를 위해 선택선택한 항목을 수정합니다. 행을 표시하여 디스크 쓰기를 수행합니다.
테이블 및 행 잠금 외에도 페이지 수준 잠금 공유/독점 잠금은 읽기/쓰기 액세스를 제어하는 데 사용됩니다. 공유 버퍼 풀의 테이블 페이지. 이 잠금이 해제되었습니다. 튜플을 가져오거나 업데이트한 직후. 신청 작성자는 일반적으로 페이지 수준 잠금에 관심을 가질 필요가 없습니다. 그러나 완전성을 위해 언급합니다.
명시적 잠금을 사용하면 다음이 발생할 수 있습니다.교착상태, 여기서 두 개 이상의 트랜잭션 각각은 상대방이 원하는 자물쇠를 보유하고 있습니다. 예를 들어, 트랜잭션 1은 테이블 A에 대한 배타적 잠금을 획득한 다음 테이블 B에 대한 배타적 잠금을 획득하려고 시도하는 동안 트랜잭션 2에는 이미 배타적으로 잠긴 테이블 B가 있으며 이제 테이블 A에 대한 배타적 잠금을 원하지만 어느 쪽도 할 수 없습니다. 계속하세요.윈 토토교착 상태 상황을 자동으로 감지하고 이를 해결합니다. 관련된 거래 중 하나를 중단하여 완료할 다른 사람. (정확히 어떤 거래가 이루어질 것인지 중단된 것은 예측하기 어렵고 의존해서는 안 됩니다. 에.)
교착상태에 대한 최선의 방어는 일반적으로 교착상태를 피하는 것입니다. 데이터베이스를 사용하는 모든 애플리케이션이 일관된 순서로 여러 개체에 대한 잠금을 획득합니다. 하나 또한 개체에 대해 첫 번째 잠금을 획득했는지 확인해야 합니다. 트랜잭션은 해당 트랜잭션에 필요한 가장 높은 모드입니다. 개체. 사전에 확인이 불가능할 경우에는 교착 상태는 트랜잭션을 재시도하여 즉시 처리될 수 있습니다. 교착 상태로 인해 중단되었습니다.
교착 상태 상황이 감지되지 않는 한 트랜잭션은 테이블 수준 또는 행 수준 잠금을 찾는 것은 대기합니다. 충돌하는 잠금이 무기한 해제됩니다. 이는 다음을 의미합니다. 애플리케이션이 트랜잭션을 열어두는 것은 좋지 않은 생각입니다. 오랜 시간 동안(예: 사용자 입력을 기다리는 동안).