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

13.3. 명시적 사설 토토 사이트

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

현재 해결되지 않은 사설 토토 사이트 목록을 조사하려면 데이터베이스 서버는 다음을 사용합니다.pg_locks시스템 보기. 자세한 내용은 사설 토토 사이트 관리자 하위 시스템의 상태를 모니터링하려면 다음을 참조하세요.토토 베이 : 문서 : 9.1 : 데이터베이스 활동 모니터링.

13.3.1. 테이블 수준 사설 토토 사이트

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

테이블 수준 사설 토토 사이트 모드

액세스 공유

다음과의 충돌액세스 독점적인사설 토토 사이트 모드 전용.

선택명령은 참조 테이블에서 이 모드를 잠급니다. 일반적으로 어떤 그것만 쿼리해 보세요읽기테이블이고 그렇지 않습니다. 수정하면 이 사설 토토 사이트 모드가 획득됩니다.

행 공유

다음과의 충돌독점그리고접속 독점사설 토토 사이트 모드.

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

행 독점

다음과의 충돌공유, 공유 행 독점, 독점액세스 독점적인사설 토토 사이트 모드.

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

업데이트 독점 공유

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

취득자진공(없이전체), 분석, 색인 생성 동시에및 일부 형태의테이블 변경.

공유

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

취득자색인 생성(없이동시).

행 독점 공유

다음과의 충돌행 독점적인, 업데이트 공유 독점적인, 공유, 공유 행 독점, 독점액세스 독점적인사설 토토 사이트 모드. 이 모드는 테이블을 보호합니다 동시 데이터 변경에 대비하고 자체 배타적이므로 한 번에 하나의 세션만 보유할 수 있습니다.

이 사설 토토 사이트 모드는 자동으로 획득되지 않습니다.PostgreSQL명령.

독점

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

이 사설 토토 사이트 모드는 테이블에서 자동으로 획득되지 않습니다. 누구든지PostgreSQL명령.

접속 독점

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

다음에 의해 획득됨테이블 변경, 드롭 테이블, 잘라내기, REINDEX, 클러스터, 그리고진공이 가득 참명령. 이것 의 기본 사설 토토 사이트 모드이기도 합니다.락 테이블지정하지 않은 문 명시적으로 모드입니다.

팁:액세스 독점적인사설 토토 사이트 블록 a선택(없이에 대한 업데이트/공유) 진술.

일단 사설 토토 사이트을 획득하면 일반적으로 사설 토토 사이트이 종료될 때까지 유지됩니다. 거래. 그러나 설정된 후에 사설 토토 사이트을 획득하면 저장점, 저장점이 다음인 경우 사설 토토 사이트이 즉시 해제됩니다. 로 롤백되었습니다. 이는 다음의 원칙과 일치합니다.롤백모든 효과를 취소합니다. 저장점 이후 명령. 획득한 사설 토토 사이트에도 동일하게 적용됩니다. a 이내PL/pgSQL예외 블록: 블록에서 오류가 탈출하면 획득한 사설 토토 사이트이 해제됩니다. 그 안에.

표 13-2. 사설 토토 사이트 모드 충돌

요청된 사설 토토 사이트 모드 현재 사설 토토 사이트 모드
액세스 공유 행 공유 행 독점 업데이트 독점 공유 공유 공유 행 독점 독점 접속 독점
액세스 공유 X
행 공유 X X
행 독점 X X X X
업데이트 독점 공유 X X X X X
공유 X X X X X
공유 행 독점 X X X X X X
독점 X X X X X X X
접속 독점 X X X X X X X X

13.3.2. 행 수준 사설 토토 사이트

테이블 수준 사설 토토 사이트 외에도 행 수준 사설 토토 사이트이 있습니다. 이는 배타적 사설 토토 사이트 또는 공유 사설 토토 사이트일 수 있습니다. 독점적인 행 수준 특정 행에 대한 사설 토토 사이트은 행이 자동으로 획득됩니다. 업데이트 또는 삭제되었습니다. 사설 토토 사이트은 트랜잭션이 완료될 때까지 유지됩니다. 테이블 수준 사설 토토 사이트과 마찬가지로 커밋하거나 롤백합니다. 행 수준 사설 토토 사이트은 데이터 쿼리에 영향을 주지 않습니다. 그들은 단지 차단작성자를 같은 행에.

행에 배타적 행 수준 사설 토토 사이트을 획득하려면 실제로 행을 수정하려면 다음을 사용하여 행을 선택하세요.업데이트를 위해 선택. 행 수준에서는 사설 토토 사이트이 획득되면 트랜잭션이 여러 행을 업데이트할 수 있습니다. 갈등을 두려워하지 않는 시간.

행에서 공유된 행 수준 사설 토토 사이트을 얻으려면 행을 선택하십시오. 와 함께공유 선택. 공유 사설 토토 사이트 다른 거래가 동일한 것을 획득하는 것을 막지 않습니다. 공유 사설 토토 사이트. 그러나 거래 업데이트는 허용되지 않습니다. 다른 행이 있는 행을 삭제하거나 독점적으로 잠급니다. 트랜잭션이 공유 사설 토토 사이트을 보유합니다. 그렇게 하려는 시도는 공유 사설 토토 사이트이 해제될 때까지 차단합니다.

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

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

13.3.3. 교착 상태

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

다음의 결과로 교착 상태가 발생할 수도 있습니다. 행 수준 사설 토토 사이트(따라서 명시적인 경우에도 발생할 수 있음) 사설 토토 사이트은 사용되지 않습니다). 두 개가 동시에 발생하는 경우를 고려하십시오. 트랜잭션이 테이블을 수정합니다. 첫 번째 거래 실행:

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이것을 감지할 것입니다 상황을 파악하고 거래 중 하나를 중단합니다.

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

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

13.3.4. 권고 사설 토토 사이트

PostgreSQL수단을 제공합니다 애플리케이션에서 정의한 의미를 갖는 사설 토토 사이트을 생성하기 위한 것입니다. 이것들은권고 사설 토토 사이트, 시스템에서 사용을 강제하지 않기 때문에 — 이는 사용자에게 달려 있습니다. 올바르게 사용하려면 응용 프로그램을 사용하세요. 권고 사설 토토 사이트이 유용할 수 있습니다. MVCC에 적합하지 않은 사설 토토 사이트 전략의 경우 모델. 예를 들어, 권고 사설 토토 사이트의 일반적인 용도는 다음과 같습니다. 소위 말하는 비관적 사설 토토 사이트 전략을 에뮬레이션합니다."플랫 파일"데이터 관리 시스템. 테이블에 저장된 플래그는 동일한 용도로 사용될 수 있습니다. 목적에 따라 권고 사설 토토 사이트은 더 빠르고, 테이블 팽창을 방지하며, 작업이 끝나면 서버에서 자동으로 정리됩니다. 세션.

자문 사설 토토 사이트을 획득하는 방법에는 두 가지가 있습니다.PostgreSQL: 세션 수준에서 또는 거래 수준에서. 세션 수준에서 획득한 후에는 권고 사설 토토 사이트은 명시적으로 해제되거나 세션이 종료될 때까지 유지됩니다. 끝납니다. 표준 사설 토토 사이트 요청과 달리 세션 수준 권고 사설 토토 사이트 요청은 트랜잭션 의미를 따르지 않습니다. 사설 토토 사이트 나중에 롤백되는 트랜잭션 중에 획득된 롤백 후에도 여전히 유지되며 마찬가지로 사설 토토 사이트 해제도 유지됩니다. 나중에 호출 트랜잭션이 실패하더라도 유효합니다. 자물쇠 소유 프로세스를 통해 여러 번 획득할 수 있습니다. 각각에 대해 완료된 사설 토토 사이트 요청에는 해당 사설 토토 사이트 해제가 있어야 합니다. 사설 토토 사이트이 실제로 해제되기 전에 요청하세요. 거래 수준 반면에 사설 토토 사이트 요청은 일반 사설 토토 사이트처럼 동작합니다. 요청: 요청이 끝나면 자동으로 해제됩니다. 트랜잭션이며 명시적인 사설 토토 사이트 해제 작업이 없습니다. 이것 행동은 종종 세션 수준보다 더 편리합니다. 권고 사설 토토 사이트의 단기 사용에 대한 동작입니다. 동일한 세션 수준 및 트랜잭션 수준 사설 토토 사이트 요청 권고 사설 토토 사이트 식별자는 예상되는 방식으로 서로를 차단합니다. 방법. 세션이 이미 특정 권고 사설 토토 사이트을 보유하고 있는 경우 추가 요청은 다른 요청이 있더라도 항상 성공합니다. 세션이 사설 토토 사이트을 기다리고 있습니다. 이 말은 사실이다 기존 사설 토토 사이트 유지 및 새 요청 여부에 관계없이 세션 수준 또는 거래 수준에 있습니다.

모든 자물쇠와 마찬가지로포스트그레SQL, 전체 권고 목록 현재 모든 세션이 보유하고 있는 사설 토토 사이트은 다음에서 찾을 수 있습니다.pg_locks시스템 뷰.

권고 사설 토토 사이트과 일반 사설 토토 사이트은 모두 공유 폴더에 저장되어 있습니다. 구성에 따라 크기가 정의되는 메모리 풀 변수max_locks_per_transaction그리고max_connections. 이 메모리나 서버가 소진되지 않도록 주의해야 합니다. 사설 토토 사이트을 전혀 부여할 수 없습니다. 이는 상위 값을 부과합니다. 서버가 부여할 수 있는 권고 사설 토토 사이트 수 제한 일반적으로 방법에 따라 수만에서 수십만 서버가 구성되었습니다.

특정한 경우 권고 사설 토토 사이트 방법을 사용하는 경우, 특히 명시적인 순서와 관련된 쿼리에서 및제한절, 제어에 주의를 기울여야 합니다. SQL 표현식의 순서로 인해 획득된 사설 토토 사이트 평가됩니다. 예를 들어:

FROM foo WHERE id = 12345에서 pg_advisory_lock(id) 선택; -- 좋아요
SELECT pg_advisory_lock(id) FROM foo WHERE id  12345 LIMIT 100; -- 위험해요!
pg_advisory_lock(q.id) FROM 선택
(
  foo에서 ID 선택 WHERE id  12345 LIMIT 100
) q; -- 좋아요

위 쿼리에서 두 번째 형식은 위험합니다. 그만큼제한보장되지는 않습니다 사설 토토 사이트 기능이 실행되기 전에 적용됩니다. 이것은 아마도 응용프로그램이 작동하지 않아 일부 사설 토토 사이트을 획득하게 됩니다. 기대하고 있으므로 릴리스에 실패합니다(종료될 때까지). 세션). 애플리케이션의 관점에서 이러한 사설 토토 사이트은 여전히 볼 수 있지만 매달려 있을 것입니다.pg_locks.

권고 사설 토토 사이트을 조작하기 위해 제공되는 기능은 다음과 같습니다. 설명됨테이블 9-63.