54.12. PG_LOCKS

보기PG_LOCKS데이터베이스 서버 내에서 활성 프로세스가 보유한 범퍼카 토토에 대한 정보에 대한 액세스를 제공합니다. 보다PostgreSQL : 문서 : 15 : 13 장. 토토 핫 제어범퍼카 토토에 대한 더 많은 논의.

pg_locks활성 범퍼카 토토 가능 객체, 요청 된 범퍼카 토토 모드 및 관련 프로세스 당 하나의 행을 포함합니다. 따라서 여러 프로세스가 범퍼카 토토을 유지하거나 대기하는 경우 동일한 범퍼카 토토 식 객체가 여러 번 나타날 수 있습니다. 그러나 현재 범퍼카 토토 장치가없는 객체는 전혀 나타나지 않습니다.

전체 관계 (예 : 테이블), 개별 관계 페이지, 개별 관계의 관계, 트랜잭션 ID (가상 및 영구 ID) 및 일반 데이터베이스 객체 (클래스 OID 및 오브젝트에 의해 식별 된 방식으로 식별 된의 여러 가지 유형의 잠글 수있는 개체가 있습니다.스포츠 토토 결과 : 문서또는pg_depend). 또한 관계를 확장 할 권리는 업데이트 할 권리와 마찬가지로 별도의 범퍼카 토토 식 객체로 표시됩니다.pg_database.datfrozenxid. 또한,자문사용자 정의 의미가있는 숫자에서 범퍼카 토토을 취할 수 있습니다.

표 54.12. PG_LOCKS

열 유형

설명

Locktype 텍스트

범퍼카 토토 식 개체의 유형 :관계, Extend, Frozenid, 페이지, 튜플, TransactionId, virtualxid, Spectoken, 개체, UserLock또는자문. (참조표 28.11.)

데이터베이스 OID(참조토토 캔 : 문서 :.OID)

잠금 대상이 존재하는 데이터베이스의 OID 또는 대상이 공유 객체 인 경우 0 또는 타겟이 트랜잭션 ID 인 경우 NULL

관계 OID(참조PG_CLASS.OID)

잠금에 의해 목표로하는 관계의 OID 또는 대상이 관계 또는 관계의 일부가 아닌 경우

page int4

관계 내의 잠금 장치를 대상으로하는 페이지 번호, 또는 대상이 관계 페이지 또는 튜플이 아닌 경우 null

튜플 int2

튜플 번호 페이지 내의 잠금 장치 또는 대상이 튜플이 아닌 경우 NULL

virtualxid 텍스트

잠금 장치를 대상으로 한 트랜잭션의 가상 ID 또는 대상이 가상 트랜잭션 ID가 아닌 경우 NULL

TransactionId xid

잠금을 대상으로하는 트랜잭션의 ID 또는 대상이 트랜잭션 ID가 아닌 경우 NULL

classId OID(참조pg_class.OID)

잠금 대상을 포함하는 시스템 카탈로그의 OID 또는 대상이 일반 데이터베이스 개체가 아닌 경우 NULL

objid OID(OID 열 참조)

시스템 카탈로그 내에서 잠금 대상의 OID 또는 대상이 일반 데이터베이스 개체가 아닌 경우 NULL

objsubid int2

범퍼카 토토을 대상으로하는 열 번호 (classIdandobjid테이블 자체를 참조하십시오) 또는 0이 대상이 다른 일반 데이터베이스 개체 인 경우 또는 대상이 일반 데이터베이스 개체가 아닌 경우 NULL

VirtualTransaction 텍스트

이 범퍼카 토토을 보유하거나 기다리고있는 트랜잭션의 가상 ID

PID int4

서버 프로세스의 프로세스 ID를 보유 하거나이 범퍼카 토토을 보유하거나 기다리고 있습니다.

모드 텍스트

이 프로세스에서 보유하거나 원하는 잠금 모드의 이름 (참조섹션 13.3.1and섹션 13.2.3)

부여 bool

진실 범퍼카 토토 장치가 유지되면, 범퍼카 토토이 기다리고있는 경우 false

FastPath bool

FAST PATH를 통해 범퍼카 토토을 취한 경우, 메인 범퍼카 토토 테이블을 통해 가져 오면 FALSE

waitstart Timestamptz

서버 프로세스 가이 잠금을 기다리기 시작한 시간 또는 잠금 장치가 유지되는 경우 NULL. 대기가 시작된 후 매우 짧은 기간 동안 이것은 널가 될 수 있습니다부여is거짓.


부여표시된 프로세스에 의해 고정 된 잠금 장치를 나타내는 줄로 진실합니다. False는이 프로세스가 현재이 잠금 장치를 획득하기를 기다리고 있음을 나타냅니다. 이는 적어도 하나의 다른 프로세스가 동일한 잠금 가능 객체에서 충돌 잠금 모드를 유지하거나 기다리고 있음을 의미합니다. 대기 과정은 다른 자물쇠가 풀릴 때까지 잠을 자십시오 (또는 교착 상태 상황이 감지됨). 단일 프로세스는 한 번에 최대 한 자물쇠를 획득하기 위해 기다리고 있습니다.

트랜잭션을 실행하는 동안 서버 프로세스는 트랜잭션의 가상 트랜잭션 ID에 대한 독점 잠금을 보유합니다. 영구 ID가 트랜잭션에 할당 된 경우 (일반적으로 트랜잭션이 데이터베이스의 상태를 변경하는 경우에만 발생합니다), 또한 끝날 때까지 트랜잭션의 영구 거래 ID에 대한 독점 잠금 장치도 보유합니다. 프로세스가 다른 거래를 종료하기 위해 구체적으로 대기해야한다는 것을 알게되면, 다른 트랜잭션의 ID (상황에 따라 가상 또는 영구 ID)에서 공유 잠금을 취득하려고 시도합니다. 다른 거래가 자물쇠를 종료하고 공개 할 때만 성공합니다.

튜플은 잠글 수있는 유형의 객체이지만,로드 레벨 잠금에 대한 정보는 메모리가 아닌 디스크에 저장 되므로이 뷰에서는 저소득 잠금이 일반적으로 나타나지 않습니다. 프로세스가로드 레벨 잠금을 기다리는 경우 일반적으로 해당 행 잠금의 현재 보유자의 영구 거래 ID를 기다리는 것으로보기에 나타납니다.

자문 잠금 장치는 단일로 구성된 키에서 얻을 수 있습니다bigint값 또는 두 정수 값. 에이bigint키가 고차 절반으로 표시됩니다classID열, 낮은 절반의 절반objid열,objsubid1과 같습니다. 원래bigint값은 표현으로 재 조립 될 수 있습니다(classId :: bigint << 32) | objid :: bigint. 정수 키는의 첫 번째 키로 표시됩니다.classID열,의 두 번째 키objid열,objsubid2와 같습니다. 키의 실제 의미는 사용자에게 달려 있습니다. 자문 잠금은 각 데이터베이스에 로컬이므로데이터베이스열은 자문 잠금에 의미가 있습니다.

pg_locks현재 데이터베이스와 관련된 것뿐만 아니라 데이터베이스 클러스터의 모든 잠금에 대한 전역보기를 제공합니다. 비록관계열에 연결할 수 있습니다pg_class.OID잠긴 관계를 식별하려면 현재 데이터베이스 (의 관계에 대해서만 올바르게 작동합니다.데이터베이스열은 현재 데이터베이스의 OID 또는 0)입니다.

thePID열에 가입 할 수 있습니다PID열의 열pg_stat_activity예를 들어 각 범퍼카 토토 장치를 보유하거나 기다리는 세션에 대한 자세한 정보를 얻으려면

선택 *에서 PG_LOCKS FROM LEFT PG_STAT_ACTIVITY PSA에 가입하십시오
    on pl.pid = psa.pid;

또한 준비된 트랜잭션을 사용하는 경우VirtualTransaction열에 가입 할 수 있습니다거래열의 열토토 사이트 : 문서 : 15 :잠금 장치를 보유하는 준비된 트랜잭션에 대한 자세한 정보를 얻으십시오. (준비된 거래는 잠금을 기다릴 수 없지만 실행 중에 획득 한 자물쇠를 계속 유지합니다.) 예를 들어 :.

선택 *에서 * PG_LOCKS FROM LEFT PG_PREPARED_XACTS PPX로 결합합니다
    pl.VirtualTransaction = '-1/'||에서 ppx.Transaction;

가입하여 어떤 프로세스를 차단하는지에 대한 정보를 얻을 수 있지만pg_locksagainst itself, this is very difficult to get right in detail. 이러한 쿼리는 어떤 잠금 모드가 다른 것과 충돌하는지에 대한 지식을 인코딩해야합니다. 더 나쁜 것은PG_LOCKSView는 범퍼카 토토 대기 대기열의 다른 프로세스에 대한 정보를 노출 시키거나 다른 고객 세션을 대신하여 실행하는 병렬 작업자에 대한 정보를 노출시킵니다. 사용하는 것이 좋습니다.pg_blocking_pids ()함수 (참조표 9.66) 대기 프로세스가 차단되는 프로세스 (ES)를 식별하려면.

thepg_locksView는 별도의 시스템 인 일반 범퍼카 토토 관리자와 술어 범퍼카 토토 관리자의 데이터를 표시합니다. 또한 일반 범퍼카 토토 관리자는 자물쇠를 정기적으로 세분화하고빠른 경로잠금. 이 데이터는 완전히 일관성이없는 것은 아닙니다. 보기가 쿼리되면 빠른 경로 잠금에 대한 데이터 (withFastPath=true)는 전체 잠금 관리자의 상태를 동결시키지 않고 한 번에 각 백엔드에서 하나씩 수집되므로 정보를 수집하는 동안 잠금을 취하거나 해제 할 수 있습니다. 그러나이 잠금 장치는 현재 다른 자물쇠와 충돌하지 않는 것으로 알려져 있습니다. 빠른 경로 잠금 장치에 대해 모든 백엔드가 쿼리 된 후, 일반 잠금 관리자의 나머지 부분은 단위로 고정되며 남은 모든 잠금 장치의 일관된 스냅 샷이 원자 동작으로 수집됩니다. 일반 잠금 관리자를 잠금 해제 한 후 술어 잠금 관리자는 비슷하게 잠겨 있으며 모든 술어 잠금 장치는 원자 동작으로 수집됩니다. 따라서 빠른 경로 잠금을 제외하고 각 잠금 관리자는 일관된 결과 세트를 제공하지만, 두 잠금 관리자를 동시에 잠그지 않기 때문에 정규 잠금 관리자를 심문하고 술어 잠금 관리자를 조사하기 전에 잠금 장치를 취하거나 해제 할 수 있습니다..

정기 및/또는 술어 잠금 관리자 잠금은이보기에 매우 자주 액세스되면 데이터베이스 성능에 약간의 영향을 줄 수 있습니다. 자물쇠는 잠금 관리자로부터 데이터를 얻는 데 필요한 최소 시간 동안 만 유지되지만 성능 영향의 가능성을 완전히 제거하지는 않습니다..

정정 제출

문서에 맞지 않는 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면