이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 13.3. 명시 적 토토 사이트 추천버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

12.3. 명시적 스포츠 토토 결과

PostgreSQL다양한 제공 테이블의 데이터에 대한 동시 액세스를 제어하는 스포츠 토토 결과 모드입니다. 이것들 모드는 애플리케이션 제어 스포츠 토토 결과에 사용될 수 있습니다. 상황MVCC하지 않습니다 원하는 행동을 제공하십시오. 또한 대부분의포스트그레SQL명령이 자동으로 획득됩니다. 참조된 테이블이 올바른지 확인하기 위한 적절한 모드 스포츠 토토 결과 명령이 실행되는 동안 호환되지 않는 방식으로 삭제되거나 수정되지 않습니다. 실행합니다. (예를 들어,테이블 변경동일한 작업에서 다른 작업과 동시에 실행할 수 없습니다. 테이블.)

현재 해결되지 않은 스포츠 토토 결과 목록을 조사하려면 데이터베이스 서버는 다음을 사용합니다.pg_locks시스템 보기(섹션 41.33). 에 대한 스포츠 토토 결과 관리자 상태 모니터링에 대한 추가 정보 하위 시스템, 참조PostgreSQL : 문서 : 8.0 : 토토 핫 활동 토토 핫.

12.3.1. 테이블 수준 스포츠 토토 결과

아래 목록은 사용 가능한 스포츠 토토 결과 모드와 자동으로 사용되는 컨텍스트포스트그레SQL. 당신은 또한 다음 중 하나를 얻을 수 있습니다 이러한 스포츠 토토 결과은 다음 명령을 사용하여 명시적으로 잠급니다.스포츠 토토 결과. 이 모든 스포츠 토토 결과 모드는 이름에 다음 단어가 포함된 경우에도 테이블 수준 스포츠 토토 결과입니다."행"; 스포츠 토토 결과 모드의 이름 역사적이다. 어느 정도 이름은 전형적인 것을 반영합니다. 각 스포츠 토토 결과 모드의 사용법 — 그러나 의미는 모두 동일합니다. 한 스포츠 토토 결과 모드와 다른 스포츠 토토 결과 모드의 유일한 실제 차이점은 다음과 같습니다. 각각이 충돌하는 스포츠 토토 결과 모드 세트입니다. 2개 트랜잭션은 동일한 모드에서 충돌하는 모드의 스포츠 토토 결과을 보유할 수 없습니다. 동시에 테이블. (그러나 거래는 결코 충돌하지 않습니다. 그 자체로. 예를 들어, 다음을 획득할 수 있습니다.접속 독점스포츠 토토 결과 후 나중에 획득액세스 공유같은 테이블을 잠급니다.) 충돌하지 않는 스포츠 토토 결과 모드는 다수에 의해 동시에 유지될 수 있습니다. 거래. 특히 일부 스포츠 토토 결과 모드는 자체 충돌(예:액세스 독점스포츠 토토 결과은 둘 이상의 트랜잭션에 의해 유지될 수 없습니다 동시에) 다른 사람들은 자기 갈등을 일으키지 않는 반면(예: an액세스 공유스포츠 토토 결과은 다음에 의해 유지될 수 있습니다. 여러 거래). 한 번 획득하면 끝까지 스포츠 토토 결과이 유지됩니다. 거래.

테이블 수준 스포츠 토토 결과 모드

액세스 공유

다음과의 충돌액세스 독점스포츠 토토 결과 모드 전용.

명령어선택그리고분석이것의 자물쇠를 획득하세요 참조 테이블의 모드. 일반적으로 모든 쿼리는 테이블을 읽기만 하고 수정하지 않습니다. 이 스포츠 토토 결과 모드.

행 공유

다음과의 충돌독점그리고접속 독점스포츠 토토 결과 모드.

업데이트를 위해 선택명령 대상 테이블에서 이 모드의 스포츠 토토 결과을 획득합니다( 게다가액세스 공유스포츠 토토 결과 참조되었지만 선택되지 않은 다른 테이블에서업데이트용).

행 독점

다음과의 충돌공유, 행 독점 공유, 독점액세스 독점스포츠 토토 결과 모드.

명령어업데이트, 삭제삽입다음에서 이 스포츠 토토 결과 모드를 획득하세요. 대상 테이블(추가로액세스 공유다른 참조 테이블에 대한 스포츠 토토 결과). 에서 일반적으로 이 스포츠 토토 결과 모드는 모든 명령으로 획득됩니다. 테이블의 데이터를 수정합니다.

업데이트 독점 공유

다음과의 충돌업데이트 공유 독점, 공유, 행 독점 공유, 독점액세스 독점스포츠 토토 결과 모드. 이 모드는 테이블을 보호합니다 동시 스키마 변경에 대비하고진공실행됩니다.

취득자진공(없이전체).

공유

다음과의 충돌행 독점, 업데이트 공유 독점, 공유 행 독점, 독점접속 독점스포츠 토토 결과 모드. 이 모드는 동시 데이터로부터 테이블을 보호합니다. 변경됩니다.

취득자색인 생성.

공유 행 독점

다음과의 충돌행 독점, 업데이트 공유 독점, 공유, 공유 행 독점, 독점액세스 독점스포츠 토토 결과 모드.

이 스포츠 토토 결과 모드는 자동으로 획득되지 않습니다.PostgreSQL명령.

독점

다음과의 충돌행 공유, 행 독점, 업데이트 독점 공유, 공유, 공유 행 독점, 독점접속 독점스포츠 토토 결과 모드. 이 모드는 동시만 허용합니다.액세스 공유스포츠 토토 결과, 즉 읽기만 가능 테이블은 트랜잭션과 병렬로 진행될 수 있습니다. 이 스포츠 토토 결과 모드를 유지하고 있습니다.

이 스포츠 토토 결과 모드는 자동으로 획득되지 않습니다.포스트그레SQL명령.

접속 독점

모든 모드의 스포츠 토토 결과과 충돌합니다(액세스 공유, 행 공유, 행 독점, 업데이트 독점 공유, 공유, 공유 행 독점, 독점, 그리고접속 독점). 이 모드 보유자가 유일한 거래임을 보장합니다. 어떤 방식으로든 테이블에 액세스합니다.

다음에 의해 획득됨테이블 변경, 드롭 테이블, REINDEX, 클러스터, 그리고진공 가득 참명령. 이 은(는) 기본 스포츠 토토 결과 모드이기도 합니다.락 테이블지정하지 않은 문 명시적으로 모드입니다.

팁:액세스 독점스포츠 토토 결과 블록 a선택(없음용 업데이트) 진술.

12.3.2. 행 수준 스포츠 토토 결과

테이블 수준 스포츠 토토 결과 외에도 행 수준 스포츠 토토 결과이 있습니다. 특정 행에 대한 행 수준 스포츠 토토 결과이 자동으로 획득됩니다. 행이 업데이트될 때(또는 삭제되거나 업데이트로 표시될 때) 는 스포츠 토토 결과은 트랜잭션이 커밋되거나 롤백될 때까지 유지됩니다. 행 수준 스포츠 토토 결과은 데이터 쿼리에 영향을 주지 않습니다. 그들은 차단작가들도 같은 사람에게 행전용. 없이 행에 대해 행 수준 스포츠 토토 결과을 획득하려면 실제로 행을 수정하려면 다음을 사용하여 행을 선택하세요.업데이트를 위해 선택. 한 번 특정 행 수준 스포츠 토토 결과이 획득되면 트랜잭션이 행을 업데이트할 수 있습니다. 갈등을 두려워하지 않고 여러 번.

포스트그레SQL기억하지 않음 메모리의 수정된 행에 대한 정보가 없으므로 한 번에 잠기는 행 수를 제한합니다. 그러나, 행을 잠그면 디스크 쓰기가 발생할 수 있습니다. 따라서 예를 들어,업데이트를 위해 선택선택한 항목을 수정합니다. 행을 표시하여 디스크 쓰기를 수행합니다.

테이블 및 행 스포츠 토토 결과 외에도 페이지 수준 스포츠 토토 결과 공유/독점 스포츠 토토 결과은 읽기/쓰기 액세스를 제어하는 데 사용됩니다. 공유 버퍼 풀의 테이블 페이지. 이 스포츠 토토 결과이 해제되었습니다. 행을 가져오거나 업데이트한 직후. 신청 개발자는 일반적으로 페이지 수준에 관심을 가질 필요가 없습니다. 스포츠 토토 결과이 있지만 완전성을 위해 언급합니다.

12.3.3. 교착 상태

명시적 스포츠 토토 결과을 사용하면 다음과 같은 가능성이 높아질 수 있습니다.교착 상태, 여기서 2개(또는 그 이상) 각 트랜잭션은 상대방이 원하는 스포츠 토토 결과을 보유합니다. 예를 들어, 트랜잭션 1이 테이블 A에 대해 배타적 스포츠 토토 결과을 획득한 경우 테이블 B에 대한 배타적 스포츠 토토 결과을 획득하려고 시도하는 동안 트랜잭션 2에는 이미 배타적으로 잠긴 테이블 B가 있으며 이제 테이블 A에 대한 배타적 스포츠 토토 결과을 원하지만 어느 쪽도 할 수 없습니다. 계속하세요.포스트그레SQL교착 상태 상황을 자동으로 감지하고 이를 해결합니다. 관련된 거래 중 하나를 중단하여 완료할 다른 사람. (정확히 어떤 거래가 이루어질 것인지 중단된 것은 예측하기 어렵고 의존해서는 안 됩니다. 에.)

다음의 결과로 교착 상태가 발생할 수도 있습니다. 행 수준 스포츠 토토 결과(따라서 명시적인 경우에도 발생할 수 있음) 스포츠 토토 결과은 사용되지 않습니다). 두 가지가 있는 경우를 생각해 보자. 테이블을 수정하는 동시 트랜잭션. 첫 번째 트랜잭션이 실행됩니다:

UPDATE 계정 SET 잔액 = 잔액 + 100.00 WHERE 계정 번호 = 11111;

이것은 지정된 행에 행 수준 스포츠 토토 결과을 획득합니다 계좌번호. 그런 다음 두 번째 트랜잭션이 실행됩니다.

UPDATE 계정 SET 잔액 = 잔액 + 100.00 WHERE acctnum = 22222;
UPDATE 계정 SET 잔액 = 잔액 - 100.00 WHERE acctnum = 11111;

첫 번째업데이트성명 지정된 행에서 행 수준 스포츠 토토 결과을 성공적으로 획득했으므로 해당 행을 업데이트하는 데 성공합니다. 그러나 두 번째업데이트문은 해당 행이 업데이트를 시도하는 중입니다. 이미 잠겨 있으므로 기다립니다. 스포츠 토토 결과을 획득한 트랜잭션이 완료되도록 합니다. 트랜잭션 2는 이제 트랜잭션 1이 완료되기를 기다리고 있습니다. 실행을 계속하기 전에. 이제 거래 1번 실행:

UPDATE 계정 SET 잔액 = 잔액 - 100.00 WHERE acctnum = 22222;

트랜잭션 1은 다음에 대한 행 수준 스포츠 토토 결과을 획득하려고 시도합니다. 행을 지정했지만 그럴 수 없습니다. 트랜잭션 2가 이미 보유하고 있습니다. 그런 자물쇠. 따라서 트랜잭션 2가 완료될 때까지 기다립니다. 따라서, 거래 1은 거래 2에서 차단되고 거래는 트랜잭션 1에서 두 개가 차단됩니다: 교착 상태 상태입니다.PostgreSQL이것을 감지할 것입니다 상황을 파악하고 거래 중 하나를 중단합니다.

교착상태에 대한 최선의 방어는 일반적으로 교착상태를 피하는 것입니다. 데이터베이스를 사용하는 모든 애플리케이션이 일관된 순서로 여러 개체에 대한 스포츠 토토 결과을 획득합니다. 에서 위의 예에서 두 트랜잭션 모두에서 행을 업데이트한 경우 동일한 순서라면 교착 상태가 발생하지 않았을 것입니다. 또한 객체에 대해 획득한 첫 번째 스포츠 토토 결과을 확인합니다. 트랜잭션은 해당 트랜잭션에 필요한 가장 높은 모드입니다. 개체. 사전에 확인이 불가능할 경우에는 교착 상태는 트랜잭션을 재시도하여 즉시 처리될 수 있습니다. 교착 상태로 인해 중단되었습니다.

교착 상태 상황이 감지되지 않는 한 트랜잭션은 테이블 수준 또는 행 수준 스포츠 토토 결과을 찾는 것은 대기합니다. 충돌하는 스포츠 토토 결과이 무기한 해제됩니다. 이는 다음을 의미합니다. 애플리케이션이 트랜잭션을 열어두는 것은 좋지 않은 생각입니다. 오랜 시간 동안(예: 사용자 입력을 기다리는 동안).