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

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

PostgreSQL다양한 제공 테이블의 데이터에 대한 동시 액세스를 제어하기위한 사설 토토 사이트 모드. 이것들 모드는 응용 프로그램 제어 사설 토토 사이트에 사용될 수 있습니다 상황MVCC그렇지 않습니다 원하는 행동을 제공하십시오. 또한, 대부분PostgreSQL명령은 자동으로 획득합니다 참조 된 테이블이 명령을하는 동안 호환되지 않는 방식으로 삭제하거나 수정되지 않음 실행. (예를 들어,Truncate할 수 없습니다 다른 작업과 동시에 안전하게 실행됩니다. 테이블, 그래서 그것은 시행 할 테이블의 독점 사설 토토 사이트을 얻습니다. 저것.)

데이터베이스 서버, 사용pg_locks시스템보기. 자세한 정보 사설 토토 사이트 관리자 서브 시스템의 상태를 모니터링하는 경우 참조하십시오.토토 베이 : 문서 : 9.1 : 데이터베이스 활동 모니터링.

13.3.1. 테이블 레벨 사설 토토 사이트

아래 목록은 사용 가능한 사설 토토 사이트 모드와 컨텍스트가 자동으로 사용되는 컨텍스트PostgreSQL. 당신은 또한 어떤 것도 획득 할 수 있습니다 이 사설 토토 사이트은 명령으로 명시 적으로사설 토토 사이트. 이 모든 사설 토토 사이트 모드를 기억하십시오 이름에 단어가 포함되어 있어도 테이블 레벨 사설 토토 사이트입니다"행"; 사설 토토 사이트 모드의 이름 역사적입니다. 어느 정도까지 이름은 전형적인 것을 반영합니다 각 사설 토토 사이트 모드의 사용 - 그러나 의미론은 모두 동일합니다. 하나의 사설 토토 사이트 모드와 다른 사설 토토 사이트 모드의 유일한 차이점은 각 충돌하는 사설 토토 사이트 모드 세트 (참조테이블 13-2). 두 거래는 충돌의 사설 토토 사이트을 보유 할 수 없습니다 동시에 같은 테이블의 모드. (그러나 a 거래는 결코 그 자체와 충돌하지 않습니다. 예를 들어, 그럴 수도 있습니다 습득하다액세스 독점사설 토토 사이트 및 나중에 인수액세스 공유사설 토토 사이트 동일한 테이블.) 비 분화 사설 토토 사이트 모드를 유지할 수 있습니다 많은 거래에 의해 동시에. 특히 그 사실을 알아 봅니다 일부 자물쇠 모드는 자체적으로 자체적으로 사용됩니다 (예 : AN액세스 독점사설 토토 사이트을 유지할 수 없습니다 한 번에 하나 이상의 거래에 의해) 다른 사람은 그렇지 않습니다. 자체 분해 (예를 들어,액세스 공유하다사설 토토 사이트 장치는 여러 거래에 의해 유지 될 수 있습니다).

테이블 레벨 사설 토토 사이트 모드

액세스 공유

액세스 독점적인사설 토토 사이트 모드 만.

theselect명령 a 참조 테이블 에서이 모드의 사설 토토 사이트. 일반적으로 쿼리 만읽기테이블 및 그렇지 않습니다 이 사설 토토 사이트 모드를 획득하게됩니다.

행 쉐어

독점and액세스 독점사설 토토 사이트 모드.

the업데이트 선택and공유 선택명령 대상 테이블 에서이 모드의 사설 토토 사이트을 얻습니다 ( 에 대한 추가액세스 공유사설 토토 사이트 참조하지만 선택되지 않은 다른 테이블에서업데이트/공유 용).

Row Exclusive

공유, 공유 ROW 독점, 독점액세스 독점적인사설 토토 사이트 모드.

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

독점 업데이트 공유

공유 업데이트 독점적인, 공유, 공유 ROW 독점, 독점액세스 독점적인사설 토토 사이트 모드. 이 모드는 테이블을 보호합니다 동시 스키마 변경 및진공실행.

획득진공(full),분석, 색인 생성 동시에및 일부 형태의Alter Table.

공유

행 독점적인, 공유 업데이트 독점적인, 공유 행 독점적인, 독점액세스 독점사설 토토 사이트 모드. 이 모드는 동시 데이터로부터 테이블을 보호합니다 변화.

획득색인 생성(동시에).

공유 ROW 독점

행 독점적인, 공유 업데이트 독점적인, 공유, 공유 ROW 독점, 독점액세스 독점적인사설 토토 사이트 모드. 이 모드는 테이블을 보호합니다 동시 데이터가 변경되며 자기 독점적입니다 한 번에 한 번만 보유 할 수 있습니다.

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

독점

행 공유, Row Exclusive, 공유 업데이트 독점, 공유, 공유 행 독점적인, 독점액세스 독점사설 토토 사이트 모드. 이 모드는 동시 만 허용액세스 공유사설 토토 사이트, 즉 읽기 만 읽습니다 테이블은 거래와 병렬로 진행할 수 있습니다 이 사설 토토 사이트 모드를 유지합니다.

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

액세스 독점

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

획득Alter Table, 드롭 테이블, Truncate, Reindex, 클러스터, 그리고진공 Full명령. 이것 또한의 기본 사설 토토 사이트 모드입니다.사설 토토 사이트 테이블지정하지 않는 진술 명시 적으로 모드.

팁 :액세스 독점적인사설 토토 사이트 블록 Aselect(업데이트/공유) 문.

일단 인수 한 후에는 자물쇠가 일반적으로 끝까지 유지됩니다. 거래. 그러나 a SavePoint, SavePoint가 있으면 사설 토토 사이트이 즉시 해제됩니다. 롤백으로. 이것은 원칙과 일치합니다.롤백SavePoint 이후 명령. 획득 한 자물쇠에 대해서도 마찬가지입니다 A 내에서pl/pgsql예외 블록 : 블록 릴리스 사설 토토 사이트 장치에서 오류 탈출 그 안에.

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

요청 된 사설 토토 사이트 모드 현재 사설 토토 사이트 모드
액세스 공유 행 공유 Row Exclusive 독점 업데이트 공유 공유 공유 행 독점 독점 액세스 독점
액세스 공유 x
행 공유 x x
Row Exclusive x x x x
독점 업데이트 공유 x x x x x
공유 x x x x x
공유 ROW 독점 x x x x x x
독점 x x x x x x x
액세스 독점 x x x x x x x x

13.3.2. 로우 레벨 사설 토토 사이트

테이블 레벨 사설 토토 사이트 외에도로드 레벨 사설 토토 사이트 장치가 있으며 독점적이거나 공유 사설 토토 사이트 장치 일 수 있습니다. 독점적 인 행 수준 특정 행의 사설 토토 사이트은 행이 자동으로 획득됩니다. 업데이트 또는 삭제됩니다. 자물쇠는 거래까지 유지됩니다 테이블 레벨 사설 토토 사이트 장치처럼 커밋하거나 롤백합니다. 줄 수준 사설 토토 사이트은 데이터 쿼리에 영향을 미치지 않습니다. 그들은 만 차단같은 행으로 작가.

실제로 행 수정,로 행을 선택하십시오.업데이트 선택. 한 번 행 수준이면 주목하십시오 사설 토토 사이트 장치가 인수되며 트랜잭션은 행을 여러 번 업데이트 할 수 있습니다. 갈등에 대한 두려움없이 시대.

행에서 공유 행 레벨 사설 토토 사이트을 얻으려면 행을 선택하십시오. 와 함께공유 선택. 공유 사설 토토 사이트 다른 거래가 동일하게 인수하는 것을 막지 않습니다 공유 사설 토토 사이트. 그러나 거래가 업데이트되지 않으며 삭제하거나 다른 행을 독점적으로 잠그십시오. 트랜잭션은 공유 사설 토토 사이트 장치를 보유합니다. 그렇게하려는 시도 공유 사설 토토 사이트 장치가 출시 될 때까지 차단하십시오.

PostgreSQL기억하지 못합니다 메모리에서 수정 된 행에 대한 정보는 없습니다. 한 번에 잠긴 행 수의 제한. 하지만, 행을 잠그면 디스크 쓰기가 발생할 수 있습니다 (예 :업데이트 선택표시 할 선택된 행을 수정합니다 그것들은 잠겨서 디스크가 쓴다..

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

13.3.3. 교착 상태

명시 적 사설 토토 사이트을 사용하면의 가능성이 높아질 수 있습니다.교착 상태, 여기서 2 개 (또는 그 이상) 거래는 각각 다른 사람이 원하는 사설 토토 사이트을 고정합니다. 예를 들어, 트랜잭션 1이 표 A에서 독점 사설 토토 사이트을 획득 한 다음 표 B에서 독점적 인 사설 토토 사이트을 취득하려고 시도하는 동안 트랜잭션 2는 이미 독점적 인 사설 토토 사이트 테이블 B와 현재입니다 테이블 A에 독점적 인 사설 토토 사이트을 원한다면 어느 쪽도 진행하다.PostgreSQL교착 상태를 자동으로 감지하여 해결합니다 관련된 거래 중 하나를 중단하여 허용합니다 다른 완료. (정확히 어떤 거래가 될 것인지 낙태는 예측하기 어렵고 의존해서는 안됩니다. 에.)

교착 상태도 줄 수준 사설 토토 사이트 장치 (따라서 명시 적으로도 발생할 수 있습니다. 사설 토토 사이트이 사용되지 않습니다). 두 개의 동시 사례를 고려하십시오 트랜잭션은 표를 수정합니다. 첫 번째 거래 실행 :

업데이트 계정 세트 밸런스 = 밸런스 + 100.00 여기서 acctnum = 11111;

이것은 지정된 상태에서 행에서로드 레벨 사설 토토 사이트을 얻습니다. 계정 번호. 그런 다음 두 번째 트랜잭션이 실행됩니다.

업데이트 계정 세트 밸런스 = 밸런스 + 100.00 여기서 acctnum = 22222;
계정 업데이트 설정 밸런스 = 밸런스 -100.00 여기서 acctnum = 11111;

첫 번째업데이트진술 지정된 행에서 로우 레벨 사설 토토 사이트을 성공적으로 획득하므로 그 행을 업데이트하는 데 성공합니다. 그러나 두 번째업데이트명령문은 행을 발견합니다 업데이트를 시도하는 것이 이미 잠겨 있으므로 기다립니다. 완료하기 위해 사설 토토 사이트을 취득한 거래의 경우. 거래 2가 이제 거래 1을 완료하기 위해 기다리고 있습니다. 계속 실행되기 전에. 이제 거래 1 실행 :

업데이트 계정 세트 밸런스 = 밸런스 -100.00 여기서 acctnum = 22222;

거래 트랜잭션 1에 대한로드 레벨 사설 토토 사이트을 얻으려고 시도합니다. 지정된 행, 그러나 할 수는 없습니다 : 트랜잭션은 이미 보유하고 있습니다 그런 자물쇠. 따라서 거래 2가 완료되기를 기다립니다. 따라서, 거래 1은 거래 2와 거래에 차단됩니다 트랜잭션 1에서 두 개가 차단됩니다 : 교착 상태 조건.PostgreSQL이것을 감지합니다 상황과 거래 중 하나를 중단합니다.

교착 상태에 대한 최선의 방어는 일반적으로 피하는 것입니다 데이터베이스를 사용하는 모든 응용 프로그램이 일관된 순서로 여러 객체의 사설 토토 사이트 장치를 얻습니다. 에서 위의 예, 두 거래가 모두 행을 업데이트 한 경우 같은 순서, 교착 상태가 발생하지 않았을 것입니다. 하나도해야합니다 객체에서 최초의 사설 토토 사이트 장치가 트랜잭션은 필요한 가장 제한적인 모드입니다. 그 대상을 위해. 이를 확인하는 것이 불가능한 경우 사전, 교착 상태는 재 시도로 날짜를 처리 할 수 ​​있습니다 교착 상태로 인해 중단되는 거래.

교착 상태가 감지되지 않는 한 거래 테이블 레벨 또는 로우 레벨 사설 토토 사이트을 찾는 것이 기다립니다 충돌하는 자물쇠가 릴리스되기 위해 무기한. 이것은 의미합니다 애플리케이션이 거래를 개방하는 것은 나쁜 생각입니다. 장기간 (예 : 사용자 입력을 기다리는 동안).

13.3.4. 자문 사설 토토 사이트

PostgreSQL수단을 제공합니다 응용 프로그램 정의 의미가있는 사설 토토 사이트 장치를 작성합니다. 이것들은라고합니다.자문 사설 토토 사이트, 시스템이 사용을 시행하지 않기 때문에 올바르게 사용할 신청. 자문 사설 토토 사이트 장치가 유용 할 수 있습니다 MVCC에 어색한 사설 토토 사이트 전략 모델. 예를 들어, 자문 사설 토토 사이트 사설 토토 사이트 장치의 일반적인 사용은 다음과 같습니다. 소위의 전형적인 비관적 사설 토토 사이트 전략 에뮬레이션"플랫 파일"데이터 관리 시스템. 테이블에 저장된 깃발은 동일하게 사용될 수 있습니다. 목적, 자문 사설 토토 사이트 장치는 더 빠르고, 테이블 부풀어 오르고, 끝에서 서버에 의해 자동으로 정리되었습니다. 세션.

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

모든 자물쇠처럼PostgreSQL, 전체 자문 목록 현재 모든 세션에서 보유한 자물쇠는에서 찾을 수 있습니다.pg_locks시스템보기

자문 사설 토토 사이트 및 일반 사설 토토 사이트 장치는 공유에 저장됩니다. 크기가 구성에 의해 정의 된 메모리 풀 변수max_locks_per_transactionmax_connections. 이 메모리 나 서버를 소진시키지 않도록주의해야합니다. 자물쇠를 전혀 부여 할 수 없습니다. 이것은 상단을 부과합니다 서버가 부여 할 수있는 자문 사설 토토 사이트 수의 제한, 일반적으로 방법에 따라 수십에서 수십만 안에 서버가 구성됩니다.

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

foo에서 pg_advisory_lock (id)을 선택하여 id = 12345; -- 좋아요
foo에서 pg_advisory_lock (id)을 선택하십시오. - 위험!
pg_advisory_lock (q.id)을 선택하십시오
(
  id 12345 Limit 100의 Foo에서 ID를 선택하십시오.
) Q; -- 좋아요

위의 쿼리에서 두 번째 양식은 위험합니다. 그만큼Limit는 보장되지 않습니다 사설 토토 사이트 기능이 실행되기 전에 적용됩니다. 이것은 할 수 있습니다 응용 프로그램이 아니라고 획득 한 일부 자물쇠가 예상하고 따라서 풀지 못할 것입니다 (끝날 때까지 세션). 응용 프로그램의 관점에서, 그러한 사설 토토 사이트 여전히 볼 수 있지만 매달릴 것입니다pg_locks.

자문 사설 토토 사이트을 조작하기 위해 제공된 기능은 다음과 같습니다 설명테이블 9-63.