보기PG_LOCKS액세스를 제공합니다 공개 거래에서 보유한 자물쇠에 대한 정보에 데이터베이스 서버. 보다윈 토토 : 문서 : 8.3 : 동시성 제어와이즈 토토에 대한 더 많은 토론.
pg_locks당 하나의 행을 포함합니다 활성 잠금 가능 객체, 요청 된 잠금 모드 및 관련성 거래. 따라서 동일한 잠긴 물체가 많이 보일 수 있습니다 시간, 여러 거래가 잠금을 보유하거나 대기하는 경우 그것에. 그러나 현재 잠금 장치가없는 객체는 전혀 나타나지 않습니다.
몇 가지 고유 한 유형의 잠글 수있는 객체가 있습니다 : 전체 관계 (예 : 테이블), 개별 관계 페이지, 관계의 개별 튜플, 트랜잭션 ID (모두 가상 및 영구 ID) 및 일반 데이터베이스 개체 (클래스로 식별 Oid 및 Object Oid,과 같은 방식으로pg_description또는pg_depender). 또한 확장 할 권리 a 관계는 별도의 와이즈 토토 가능 객체로 표시됩니다.
표 44-46.pg_locks열
이름 | type | 참조 | 설명 |
---|---|---|---|
LockType | 텍스트 | 와이즈 토토 식 개체의 유형 :관계, Extend, page, 튜플, TransactionId, virtualxid, 개체, UserLock, 또는자문 | |
데이터베이스 | OID | pg_database.Oid | 객체가 존재하는 데이터베이스의 OID 또는 객체가 공유 객체 인 경우 0 또는 객체는 트랜잭션 ID입니다 |
관계 | OID | pg_class.Oid | 관계의 OID 또는 객체가 아닌 경우 NULL 관계 또는 관계의 일부 |
페이지 | Integer | 관계 내 페이지 번호 또는 객체는 튜플 또는 관계 페이지가 아닙니다 | |
튜플 | smallint | 페이지 내의 튜플 번호 또는 객체 인 경우 null 튜플이 아닙니다 | |
virtualxid | 텍스트 | 트랜잭션의 가상 ID 또는 객체가있는 경우 NULL 가상 트랜잭션 ID가 아님 | |
TransactionId | xid | 트랜잭션의 ID 또는 객체가 아닌 경우 NULL 거래 ID | |
classId | OID | PG_CLASS.Oid | 객체를 포함하는 시스템 카탈로그의 OID 객체가 일반 데이터베이스 개체가 아닌 경우 null |
objid | OID | 모든 OID 열 | 시스템 카탈로그 내에서 객체의 OID 또는 NULL 객체가 일반 데이터베이스 개체가 아닌 경우 |
objsubid | smallint | 테이블 열의 경우, 이것은 열 번호입니다 (classIDandobjid테이블 자체를 참조하십시오). 을 위한 다른 모든 객체 유형,이 열은 0입니다. IF 인 경우 널 객체는 일반 데이터베이스 객체가 아닙니다 | |
VirtualTransaction | 텍스트 | 보유하고있는 트랜잭션의 가상 ID 이 자물쇠를 기다리고 | |
PID | 정수 | 서버 프로세스 보유 또는 기다리고있는 프로세스 ID 이 자물쇠. 잠금 장치가 준비된 상태로 유지되는 경우 NULL 거래 | |
모드 | 텍스트 | 이 프로세스에서 보유하거나 원하는 잠금 모드의 이름 (보다섹션 13.3.1) | |
부여 | 부울 | 진실 와이즈 토토 상태가 유지되면, 와이즈 토토이 기다리고있는 경우 false |
부여연속으로 참입니다 표시된 트랜잭션에 의해 보유 된 잠금을 나타냅니다. 거짓 이 거래가 현재 인수를 기다리고 있음을 나타냅니다 이 자물쇠는 다른 거래가 동일한 잠금 가능 객체의 충돌 잠금 모드. 대기 중 거래가 다른 자물쇠가 릴리스 될 때까지 (또는 교착 상태 상황이 감지됩니다). 단일 거래는 가능합니다 한 번에 최대 한 자물쇠를 얻기를 기다리고 있습니다.
모든 트랜잭션은 가상에 대한 독점 잠금 장치를 보유합니다 전체 기간 동안 트랜잭션 ID. 영구 ID 인 경우 거래에 할당 된 (일반적으로 발생하는 경우에만 발생합니다. 트랜잭션은 데이터베이스의 상태를 변경합니다. 영구 거래 ID가 끝날 때까지 독점 잠금. 하나의 거래가 특별히 대기 할 필요가있는 경우 또 다른 거래, 공유를 취득하려고 시도합니다. 다른 트랜잭션 ID를 잠그십시오 (가상 또는 영구 ID 상황에 따라). 그것은 만에만 성공할 것입니다 다른 거래는 자물쇠를 종료하고 릴리스합니다.
튜플은 잠글 수있는 유형의 물체이지만 정보입니다 로드 레벨 잠금 정보는 메모리가 아닌 디스크에 저장되며 따라서이 뷰에서는 줄 수준의 잠금이 일반적으로 나타나지 않습니다. 만약에 트랜잭션은로드 레벨 잠금을 기다리고 있습니다. 일반적으로 영구 거래 ID를 기다리는 것으로보기에 나타납니다. 그 행 잠금의 현재 보유자.
자문 잠금 장치는 하나의bigint값 또는 두 정수 값. 에이bigint키가 표시됩니다 고차 절반classId열, 낮은 절반의 절반objid열,objsubid1과 동일합니다. 정수 키가 있습니다 의 첫 번째 키로 표시classId열, 두 번째 키objid열,objsubid2와 같습니다 키는 사용자에게 달려 있습니다. 자문 잠금 장치는 각각에 현지입니다 데이터베이스, 그래서데이터베이스열은 자문 잠금에 의미가 있습니다.
언제pg_locks보기입니다 액세스 된 내부 잠금 관리자 데이터 구조는 다음과 같습니다 순간적으로 잠겨 있으며 전망을 표시하기 위해 사본이 제작됩니다. 이를 통해 뷰는 일관된 결과 세트를 생성 할 수 있습니다. 일반 잠금 관리자 작업을 더 오래 차단하지는 않지만 필요한. 그럼에도 불구하고 데이터베이스에 약간의 영향이있을 수 있습니다 이보기가 자주 액세스되는 경우 성능.
pg_locks글로벌 관점을 제공합니다 데이터베이스 클러스터의 모든 잠금은 현재 데이터베이스. 비록관계열에 가입 할 수 있습니다pg_class.OID잠긴 관계를 식별하려면 이것이 그럴 것입니다 현재 데이터베이스의 관계에 대해서만 올바르게 작동합니다 (데이터베이스열은 현재 데이터베이스의 OID 또는 0).
thePID열에 가입 할 수 있습니다 그만큼procpid열의 열pg_stat_activity더 많은 정보를 얻으려면보기 세션에서 각 자물쇠를 보유하거나 기다리고 있습니다. 또한, 당신이 준비된 트랜잭션을 사용하고 있습니다.거래열에 가입 할 수 있습니다거래열의 열PG_PREPARED_XACTS더 많은 정보를 얻으려면보기 잠금 장치를 보유하는 준비된 거래. (준비된 거래 자물쇠를 기다릴 수는 없지만 계속 유지합니다. 실행 중에 획득 한 잠금.)