공부, 기록

PostgreSQL 대기, 잠금 본문

공부/DATABASE

PostgreSQL 대기, 잠금

무는빼주세요 2025. 3. 23. 14:29

PostgreSQL의 LOCK에 대한 개념을 알고 싶어서 작성.

 

wait와 lock을 확인하기 위한 방법

  1. 성능 개선 도우미를 확인한다 (Aurora)
  2. pg_stat_activity : 프로세스 수준의 다양한 정보를 제공하는 시스템 뷰
    https://www.postgresql.org/docs/16/monitoring-stats.html#MONITORING-PG-STAT-ACTIVITY-VIEW
  3. pg_locks : 데이터베이스 서버 내 현재 활동 중인 프로세스가 소유 및 대기 중인 Lock 정보를 제공하는 시스템 뷰

https://www.postgresql.org/docs/16/view-pg-locks.html

pg_locks pg_stat_activity를 통해 현재 Lock을 소유한 프로세스(Holder)와 대기하고 있는 프로세스(Waiter) 정보를 관련 쿼리와 함께 조회해 볼 수 있습니다.

 

---- pg_locks와 pg_stat_activity를 통해 현재 Lock을 소유한 프로세스(Holder)와 대기하고 있는 프로세스(Waiter) 정보를 관련 쿼리

SELECT current_timestamp AS db_time,
       waiter_pid,
       w_info.usename AS waiter_user ,
       w_info.query   AS waiter_query ,
       w_info.query_start AS waiter_query_start ,
       case
           when EXTRACT(EPOCH from current_timestamp - w_info.query_start ) < 0 then 0
           else EXTRACT(EPOCH from current_timestamp - w_info.query_start )
       end as waiter_elapsed_time,
       holder_pid ,
       h_info.usename AS holder_user ,
       h_info.query   AS holder_query ,
       h_info.query_start AS holder_query_start,
       case
           when EXTRACT(EPOCH from current_timestamp - h_info.query_start ) < 0 then 0
           else EXTRACT(EPOCH from current_timestamp - h_info.query_start )
       end as holder_elapsed_time
FROM   (
              SELECT snaptime,
                     locktype,
                     waiter_pid,
                     w_cnt,
                     h_cnt ,
                     CASE
                            WHEN h_cnt=Max(h_cnt) OVER(partition BY waiter_pid) THEN holder_pid
                     END AS holder_pid
              FROM   (
                            SELECT current_timestamp                             AS snaptime,
                                   blocked_locks.locktype                        AS locktype,
                                   blocked_locks.pid                             AS waiter_pid,
                                   count(*) over(partition BY blocked_locks.pid) AS w_cnt,
                                   count(*) over(partition BY blocking_locks.pid)    h_cnt,
                                   blocking_locks.pid                             AS holder_pid
                            FROM   pg_catalog.pg_locks blocked_locks
                            JOIN   pg_catalog.pg_locks blocking_locks
                            ON     blocking_locks.locktype = blocked_locks.locktype
                            AND    blocking_locks.DATABASE IS NOT DISTINCT
                            FROM   blocked_locks.DATABASE
                            AND    blocking_locks.relation IS NOT DISTINCT
                            FROM   blocked_locks.relation
                            AND    blocking_locks.page IS NOT DISTINCT
                            FROM   blocked_locks.page
                            AND    blocking_locks.tuple IS NOT DISTINCT
                            FROM   blocked_locks.tuple
                            AND    blocking_locks.virtualxid IS NOT DISTINCT
                            FROM   blocked_locks.virtualxid
                            AND    blocking_locks.transactionid IS NOT DISTINCT
                            FROM   blocked_locks.transactionid
                            AND    blocking_locks.classid IS NOT DISTINCT
                            FROM   blocked_locks.classid
                            AND    blocking_locks.objid IS NOT DISTINCT
                            FROM   blocked_locks.objid
                            AND    blocking_locks.objsubid IS NOT DISTINCT
                            FROM   blocked_locks.objsubid
                            AND    blocking_locks.pid != blocked_locks.pid
                            WHERE  NOT blocked_locks.granted ) t ) t2
JOIN   pg_catalog.pg_stat_activity w_info
ON     w_info.pid = t2.waiter_pid
JOIN   pg_catalog.pg_stat_activity h_info
ON     h_info.pid = t2.holder_pid
WHERE  holder_pid IS NOT null;


----결과----
db_time                      |waiter_pid|waiter_user|waiter_query                                        |waiter_query_start           |waiter_elapsed_time|holder_pid|holder_user|holder_query                                        |holder_query_start           |holder_elapsed_time|
-----------------------------+----------+-----------+----------------------------------------------------+-----------------------------+-------------------+----------+-----------+----------------------------------------------------+-----------------------------+-------------------+
2024-04-30 12:08:49.078 +0900|   2914359|postgresdt |update lock_test set c2 = 'row_update' where c1 = 1;|2024-04-30 12:07:55.777 +0900|          53.301024|   2914369|postgresdt |update lock_test set c2 = 'row_update' where c1 = 1;|2024-04-30 12:07:50.784 +0900|          58.294596|
2024-04-30 12:08:49.078 +0900|   2914369|postgresdt |update lock_test set c2 = 'row_update' where c1 = 1;|2024-04-30 12:07:50.784 +0900|          58.294596|   2914377|postgresdt |update lock_test set c2 = 'row_update' where c1 = 1;|2024-04-30 12:07:45.711 +0900|          63.366759|


----pg_locks와 pg_class에 대한 조회를 통해 프로세스가 소유 및 대기하고 있는 Lock에 대한 상세 정보를 확인

select l.locktype, t.relname, pid, mode, granted, waitstart
from pg_locks l
left join pg_class t on l.relation = t.oid
where l.pid in (2914359,2914369,2914377)
order by pid, locktype, relname;

locktype     |relname       |pid    |mode            |granted|waitstart                    |
-------------+--------------+-------+----------------+-------+-----------------------------+
relation     |lock_test     |2914359|RowExclusiveLock|true   |                             |
relation     |lock_test_pkey|2914359|RowExclusiveLock|true   |                             |
transactionid|              |2914359|ExclusiveLock   |true   |                             |
tuple        |lock_test     |2914359|ExclusiveLock   |false  |2024-04-30 12:07:55.783 +0900|
virtualxid   |              |2914359|ExclusiveLock   |true   |                             |
relation     |lock_test     |2914369|RowExclusiveLock|true   |                             |
relation     |lock_test_pkey|2914369|RowExclusiveLock|true   |                             |
transactionid|              |2914369|ShareLock       |false  |2024-04-30 12:07:50.790 +0900|
transactionid|              |2914369|ExclusiveLock   |true   |                             |
tuple        |lock_test     |2914369|ExclusiveLock   |true   |                             |
virtualxid   |              |2914369|ExclusiveLock   |true   |                             |
relation     |lock_test     |2914377|RowExclusiveLock|true   |                             |
relation     |lock_test_pkey|2914377|RowExclusiveLock|true   |                             |
transactionid|              |2914377|ExclusiveLock   |true   |                             |
virtualxid   |              |2914377|ExclusiveLock   |true   |

 

Locking
Mode
Access
Share
Row
Share
Row
Exclusive
Share
Update
Exclusive
Share Share
Row

Exclusive
Exclusive Access
Exclusive
SQL
Commands
Access
Share
              X SELECT
Row
Share
            X X SELECT FOR
UPDATE/SHARE
Row
Exclusive
        X X X X INSERT, UPDATE,
DELETE
Share
Update
Exclusive
      X X X X X VACUUM,
ALTER TABLE,
CREATE INDEX CONCURRENTLY
Share     X X   X X X CREATE INDEX
Share
Row
Exclusive
    X X X X X X CREATE TRIGGER,
ALTER TABLE
Exclusive   X X X X X X X REFRESH MAT.VIEW CONCURRENTLY
Access
Exclusive
X X X X X X X X DROP, TRUNCATE,
VACUUM FULL,
LOCK TABLE,
ALTER TABLE,
REFRESH MAT.VIEW
 

처음 4개 모드에서는 테이블 데이터의 동시 변경이 허용되지만, 그 다음 4개 모드에서는 허용되지 않습니다

Wait Event Type 설명
Activity 서버 프로세스가 유휴(Idle) 상태에 있으며, 이 Wait Event Type은 하나의 프로세스가 그와 관련된 Processing Loop 내부 활동을 기다리고 있음을 지칭함
BufferPin 서버 프로세스가 어떠한 Data Buffer에 대해 Exclusive 모드로 접근하고자 할 때, 해당 프로세스에 생길 수 있는 Wait 유형
만약 다른 프로세스가 해당 Buffer에서 데이터를 읽고 Open Cursor를 가지고 있다면, BufferPin Wait은 길어질 수 있음
Client 서버 프로세스가 사용자 애플리케이션에 연결된 소켓의 활동을 기다릴 때 생길 수 있는 Wait 유형
이 Wait Type에서 서버 프로세스는 내부 프로세스와는 무관한 작업이 수행되기를 기다림.
Extension 서버 프로세스가 Extension 모듈 실행에 따른 필요 조건이 설정되는 것을 기다릴 때 발생하는 Wait 유형
IO 서버 프로세스가 I/O 작업이 완료되기를 기다릴 때 생길 수 있는 Wait 유형
IPC 서버 프로세스가 다른 서버 프로세스들과의 상호 작용을 기다릴 때 생길 수 있는 Wait 유형
Lock 서버 프로세스가 Heavyweight Lock을 요청하고 기다릴 때 발생하는 Wait 유형
Lock Manager Lock 또는 간단하게 Lock 이라고도 불리는 Heavyweight Lock은 테이블과 같은 SQL-Level에서 바로 확인할 수 있는 Object들을 주요 대상으로 하여 보호함
Relation Extension과 같은 내부 작업에 대한 상호 배제(Mutual Exclusion) 상황을 보장하기 위해 사용되기도 함
LWLock 서버 프로세스가 Lightweight Lock을 기다릴 때 발생하는 Wait 유형
대부분의 Lightweight Lock은 Shared Memory 내부의 특정 데이터 구조를 보호함
일부는 특정 이름을 가지고 있는 Lightweight Lock, 그 외에는 비슷한 목적을 가진 Lock 그룹의 일부분

(래치와 같은 용도로 보입니)
Timeout 서버 프로세스가 Timeout이 만료되기를 기다릴 때 발생하는 Wait 유형

 

PostgreSQL은 Row-level Lock의 정보를 메모리가 아닌 Tuple의 Header에서 관리합니다. 

해당 기능으로 인하여 비교적 많은 수의 Lock도 메모리의 영향 없이 사용이 가능합니다. 

또한 Wait Queue manage 기능을 사용하여 Tuple에 대한 Lock을 획득 및 해제하는 과정을 처리합니다.

→ 해당 구조로 인하여 대량의 락을 사용할 수 있지만 데이터, 버퍼에 추가적인 I/O가 발생하게되는 단점 또한 있습니다.

 

PostgreSQL의 Lock 과 CPU

Row-level Lock, Table-level Lock 의 경우 대기하는 세션은 CPU를 사용하지 않습니다.

No-Waiting Lock (Spin Lock 과 LW Lock 이 대표적) Lock을 요청 했을 때 리소스가 잠겨 있는 상태라면 대기하지 않고 즉시 실패처리하는 Lock으로 매번 요청을 위해 CPU가 상승할 수 있습니다.

 

 

postgreSQL의 객체 잠금 수준

객체란 주로 관계 , 즉 테이블, 인덱스, 시퀀스, 구체화된 뷰를 의미하지만, 다른 엔터티도 있습니다

객체 잠금은 서버의 공유 메모리에 저장됩니다. 잠금의 수는 두 매개변수 값의 곱으로 제한됩니다

잠금의 수 = max_locks_per_transaction × max_connections 

대기 중인 트랜잭션은 프로세서 리소스를 소모하지 않습니다. 관련된 백엔드 프로세스는 "sleep" 상태로 리소스가 해제되면 OS에 의해 깨어납니다.

PostgreSQL은 데드락을 자동으로 감지하고 트랜잭션 중 하나를 중단하여 다른 트랜잭션이 계속 진행될 수 있도록 합니다

VACUUM 의 Lock

기본적으로 VACUUM, VACUUM ANALYZE, VACUUM FREEZE 는 DML 에 대한 LOCK 이 없으나 (Access Share 락 사용) 다음과 같은 상황에서는 발생 할 수 있다고 합니다

  • VACUUM 중 DDL 충돌
  • VACUUM FREEZE 작업 중 인덱스 재구성
  • AUTO VACCUM 과 수동 VACUUM 의 충돌

큰 작업을 하기 전 TABLE AGE, VACUUM 작동 여부를 파악하고 진행하는 것이 좋을 것 같습니다.

 

 

AURORA

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Tuning.concepts.summary.html

대기 이벤트정의
Client:ClientRead 이 이벤트는 Aurora PostgreSQL이 클라이언트에서 데이터를 수신하기 위해 대기 중일 때 발생합니다.
Client:ClientWrite 이 이벤트는 Aurora PostgreSQL이 클라이언트에 데이터를 쓰기 위해 대기 중일 때 발생합니다.
CPU 이 이벤트는 스레드가 CPU에서 활성 상태이거나 CPU를 대기 중일 때 발생합니다.
IO:BufFileRead 및 IO:BufFileWrite 이러한 이벤트는 Aurora PostgreSQL이 임시 파일을 만들 때 발생합니다.
IO:DataFileRead 이 이벤트는 공유 메모리에서 페이지를 사용할 수 없기 때문에 연결이 백엔드 프로세스에서 저장소에서 필요한 페이지를 읽도록 대기할 때 발생합니다.
IO:XactSync 이 이벤트는 데이터베이스가 Aurora 스토리지 하위 시스템이 일반 트랜잭션의 커밋을 승인하거나 준비된 트랜잭션의 커밋 또는 롤백을 확인할 때까지 대기 중일 때 발생합니다.
IPC:DamRecordTxAck 이 이벤트는 데이터베이스 활동 스트림을 사용하는 세션에서 Aurora PostgreSQL이 활동 스트림 이벤트를 생성한 다음 해당 이벤트가 지속될 때까지 기다리는 경우에 발생합니다.
Lock:advisory 이 이벤트는 PostgreSQL 애플리케이션이 잠금을 사용하여 여러 세션에서 활동을 조정할 때 발생합니다.
Lock:extend 이 이벤트는 백엔드 프로세스가 릴레이션을 확장하기 위해 릴레이션을 잠그기를 기다리는 동안 다른 프로세스에서 동일한 목적으로 해당 릴레이션에 대한 잠금이 있는 경우에 발생합니다.
Lock:Relation 이 이벤트는 쿼리가 현재 다른 트랜잭션에 의해 잠긴 테이블 또는 뷰에 대한 잠금을 얻기 위해 대기 중일 때 발생합니다.
Lock:transactionid 이 이벤트는 트랜잭션이 행 수준 잠금을 대기 중일 때 발생합니다.
Lock:tuple 이 이벤트는 백엔드 프로세스가 튜플에 대한 잠금 획득을 대기 중일 때 발생합니다.
LWLock:buffer_content (BufferContent) 이 대기 이벤트는 다른 세션에서 특정 데이터 페이지에 대해 쓰기 잠금을 설정한 동안 세션에서 메모리 내 해당 페이지 읽기 또는 쓰기를 대기 중일 때 발생합니다.
LWLock:buffer_mapping 이 이벤트는 세션이 데이터 블록을 공유 버퍼 풀의 버퍼와 연결하기 위해 대기 중일 때 발생합니다.
LWLock:BufferIO(IPC:BufferIO) 이 이벤트는 Aurora PostgreSQL 또는 RDS for PostgreSQL이 페이지에 동시에 액세스하려고 할 때 다른 프로세스가 입출력(I/O) 작업을 완료할 때까지 기다리는 경우에 발생합니다.
LWLock:lock_manager 이 이벤트는 Aurora PostgreSQL 엔진이 빠른 경로 잠금이 불가능할 때 잠금을 할당, 확인 및 할당 해제하기 위해 공유 잠금 메모리 영역을 유지 관리하는 경우에 발생합니다.
LWLock:MultiXact 이러한 유형의 이벤트는 테이블의 동일한 행과 관련된 여러 트랜잭션을 완료하기 위해 Aurora PostgreSQL이 세션을 열린 상태로 유지할 때 발생합니다.
대기 이벤트는 다중 트랜잭션 처리의 요소, 즉 LWLock:MultixactOffsetBuffset Buffer, LWlock:MultixactMemberSLRU 또는 LWLock:MultixActMemberBuffer 중 무엇이 대기 이벤트를 생성하는지를 표시합니다.
Timeout:PgSleep 이 이벤트는 서버 프로세스가 pg_sleep 함수 및 절전 시간 초과가 만료될 때까지 대기할 때 발생합니다.
이름내용이름내용
Activity: ArchiverMain 아카이버 프로세스가 활동을 기다리고 있습니다.
Activity: AutoVacuumMain autovacuum 시작 관리자 프로세스가 활동을 기다리고 있습니다.
Activity: BgWriterHibernate 백그라운드 라이터 프로세스가 활동을 기다리는 동안 최대 절전 모드로 전환됩니다.
Activity: BgWriterMain 백그라운드 라이터 프로세스가 활동을 기다리고 있습니다.
Activity: CheckpointerMain 체크포인터 프로세스가 활동을 기다리고 있습니다.
Activity: LogicalApplyMain 논리적 복제 적용 프로세스가 활동을 기다리고 있습니다.
Activity: LogicalLauncherMain 논리적 복제 시작 관리자 프로세스가 활동을 기다리고 있습니다.
Activity: PgStatMain 통계 수집기 프로세스가 활동을 기다리고 있습니다.
Activity: RecoveryWalAll 프로세스가 복구 시 스트림에서 미리 쓰기 로그(WAL)를 기다리고 있습니다.
Activity: RecoveryWalStream 스타트업 프로세스는 스트리밍 복구 중에 미리 쓰기 로그(WAL)가 도착할 때까지 대기 중입니다.
Activity: SysLoggerMain syslogger 프로세스가 활동을 기다리고 있습니다.
Activity: WalReceiverMain 미리 쓰기 로그(WAL) 수신기 프로세스가 활동을 기다리고 있습니다.
Activity: WalSenderMain 미리 쓰기 로그(WAL) 발신자 프로세스가 활동을 기다리고 있습니다.
Activity: WalWriterMain 미리 쓰기 로그(WAL) 라이터 프로세스가 활동을 기다리고 있습니다.
BufferPin: BufferPin 버퍼에서 독점 핀을 획득하기 위해 프로세스가 기다리고 있습니다.
Client: GSSOpenServer GSSAPI 세션을 설정하는 동안 프로세스가 클라이언트에서 데이터를 읽기를 기다리고 있습니다.
Client: ClientRead 백엔드 프로세스가 PostgreSQL 클라이언트에서 데이터를 수신하기 위해 대기 중입니다.
Client: ClientWrite 백엔드 프로세스가 PostgreSQL 클라이언트로 더 많은 데이터를 발신하기 위해 대기 중입니다.
Client: LibPQWalReceiverConnect 프로세스가 원격 서버에 연결을 생성하기 위해 미리 쓰기 로그 수신기(WAL)에서 대기 중입니다.
Client: LibPQWalReceiverReceive 프로세스가 원격 서버에서 데이터를 수신하기 위해 미리 쓰기 로그 수신기(WAL)에서 대기 중입니다.
Client: SSLOpenServer 프로세스가 연결을 시도하는 동안 SSL을 기다리고 있습니다.
Client: WalReceiverWaitStart 스타트업 프로세스가 스트리밍 복제를 위한 초기 데이터를 전송하기를 기다리고 있습니다.
Client: WalSenderWaitForWAL 프로세스가 WAL 발신자 프로세스에서 미리 쓰기 로그(WAL)가 플러시될 때까지 기다리고 있습니다.
Client: WalSenderWriteData WAL 발신자 프로세스에서 미리 쓰기 로그 (WAL) 수신자의 응답을 처리할 때 프로세스가 모든 활동을 기다리고 있습니다.
CPU 백엔드 프로세스가 CPU에서 활성 상태이거나 CPU를 기다리고 있습니다.
Extension: extension 백엔드 프로세스가 확장 또는 모듈에 의해 정의된 조건을 기다리고 있습니다.
IO: AuroraOptimizedReadsCacheRead 공유 메모리에서 페이지를 사용할 수 없기 때문에 프로세스가 최적화된 읽기 계층형 캐시에서 읽기를 기다리고 있습니다.
IO: AuroraOptimizedReadsCacheSegmentTruncate 프로세스가 최적화된 읽기 계층형 캐시 세그먼트 파일이 잘릴 때까지 기다리고 있습니다.
IO: AuroraOptimizedReadsCacheWrite 백그라운드 라이터 프로세스가 최적화된 읽기 계층형 캐시에 쓰기를 기다리고 있습니다.
IO: AuroraStorageLogAllocate 세션이 메타데이터를 할당하고 트랜잭션 로그 쓰기를 준비하고 있습니다.
IO: BufFileRead 작업 중 임시 파일에서 읽을 때 발생합니다.
IO: BufFileWrite 작업 중 임시 파일에서 쓸 때 발생합니다.
IO: ControlFileRead 프로세스가 pg_control 파일에서 읽기를 기다리고 있습니다.
IO: ControlFileSync 프로세스가 pg_control 파일이 내구성 있는 스토리지에 도달하기를 기다리고 있습니다.
IO: ControlFileSyncUpdate 프로세스가 pg_control 파일이 내구성 있는 스토리지에 도달하도록 업데이트를 기다리고 있습니다.
IO: ControlFileWrite 프로세스가 pg_control 파일에서 쓰기를 기다리고 있습니다.
IO: ControlFileWriteUpdate 프로세스가 pg_control 파일 업데이트를 위해 쓰기를 기다리고 있습니다.
IO: CopyFileRead 파일 복사 작업 중에 프로세스가 읽기를 기다리고 있습니다.
IO: CopyFileWrite 파일 복사 작업 중에 프로세스가 쓰기를 기다리고 있습니다.
IO: DataFileExtend 프로세스가 관계식 데이터 파일이 확장될 때까지 기다리고 있습니다.
IO: DataFileFlush 프로세스가 관계식 데이터 파일이 내구성 있는 스토리지에 도달할 때까지 기다리고 있습니다.
IO: DataFileImmediateSync 프로세스가 관계식 데이터 파일이 내구성 있는 스토리지에 즉시 동기화될 때까지 기다리고 있습니다.
IO: DataFilePrefetch 프로세스가 관계식 데이터 파일에서 비동기 프리페치를 기다리고 있습니다.
IO: DataFileSync 프로세스가 내구성 있는 스토리지에 도달하기 위해 관계 데이터 파일의 변경 사항을 기다리고 있습니다.
IO: DataFileRead 백엔드 프로세스가 공유 버퍼에서 페이지를 찾으려고 시도했지만 찾지 못했으므로 저장소에서 읽었습니다.
IO: DataFileTruncate 프로세스가 관계식 데이터 파일이 잘릴 때까지 기다리고 있습니다.
IO: DataFileWrite 프로세스가 관계식 데이터 파일에 쓰기를 기다리고 있습니다.
IO: DSMFillZeroWrite 프로세스가 동적 공유 메모리 백업 파일에 0바이트를 쓰기를 기다리고 있습니다.
IO: LockFileAddToDataDirRead 프로세스가 데이터 디렉토리 잠금 파일에 행을 추가하는 동안 읽기를 기다리고 있습니다.
IO: LockFileAddToDataDirSync 프로세스가 데이터 디렉토리 잠금 파일에 줄을 추가하는 동안 데이터가 내구성 있는 스토리지에 도달하기를 기다리고 있습니다.
IO: LockFileAddToDataDirWrite 프로세스가 데이터 디렉토리 잠금 파일에 행을 추가하는 동안 쓰기를 기다리고 있습니다.
IO: LockFileCreateRead 프로세스가 데이터 디렉토리 잠금 파일을 만드는 동안 읽기를 기다리고 있습니다.
IO: LockFileCreateSync 프로세스가 데이터 디렉토리 잠금 파일을 만드는 동안 데이터가 내구성 있는 스토리지에 도달하기를 기다리고 있습니다.
IO: LockFileCreateWrite 프로세스가 데이터 디렉토리 잠금 파일을 만드는 동안 쓰기를 기다리고 있습니다.
IO: LockFileReCheckDataDirRead 프로세스가 데이터 디렉토리 잠금 파일을 다시 확인하는 동안 읽기를 기다리고 있습니다.
IO: LogicalRewriteCheckpointSync 프로세스가 체크포인트 중에 내구성 있는 스토리지에 도달하기 위해 논리적 재쓰기 매핑을 기다리고 있습니다.
IO: LogicalRewriteMappingSync 프로세스가 논리적 재작성 중에 데이터가 내구성 있는 스토리지에 도달할 때까지 기다리고 있습니다.
IO: LogicalRewriteMappingWrite 프로세스가 논리적 재작성 중에 매핑 데이터의 쓰기를 기다리고 있습니다.
IO: LogicalRewriteSync 프로세스가 논리적 재작성 매핑이 내구성 있는 스토리지에 도달할 때까지 기다리고 있습니다.
IO: LogicalRewriteTruncate 프로세스가 논리적 재작성 중에 매핑 데이터의 절단을 기다리고 있습니다.
IO: LogicalRewriteWrite 프로세스가 논리적 재작성 매핑 쓰기를 기다리고 있습니다.
IO: RelationMapRead 프로세스가 관계식 맵 파일의 읽기를 기다리고 있습니다.
IO: RelationMapSync 프로세스가 관계식 맵 파일이 내구성 있는 스토리지에 도달할 때까지 기다리고 있습니다.
IO: RelationMapWrite 프로세스가 관계식 맵 파일에 대한 쓰기를 기다리고 있습니다.
IO: ReorderBufferRead 재정렬 버퍼 관리 중에 프로세스가 읽기를 기다리고 있습니다.
IO: ReorderBufferWrite 재정렬 버퍼 관리 중에 프로세스가 쓰기를 기다리고 있습니다.
IO: ReorderLogicalMappingRead 재정렬 버퍼 관리 중에 프로세스가 읽기를 기다리고 있습니다.
IO: ReplicationSlotRead 프로세스가 복제 슬롯 제어 파일에서 읽기를 기다리고 있습니다.
IO: ReplicationSlotRestoreSync 프로세스가 복제 슬롯 제어 파일을 메모리에 복원하는 동안 내구성 있는 스토리지에 도달할 때까지 기다리고 있습니다.
IO: ReplicationSlotSync 프로세스가 복제 슬롯 제어 파일이 내구성 있는 스토리지에 도달할 때까지 기다리고 있습니다.
IO: ReplicationSlotWrite 프로세스가 복제 슬롯 제어 파일에 쓰기를 기다리고 있습니다.
IO: SLRUFlushSync 프로세스가 체크포인트 또는 데이터베이스 종료 중 가장 오래 전에 사용된 단순데이터가 내구성 있는 스토리지에 도달할 때까지 기다리고 있습니다.
IO: SLRURead 프로세스가 가장 오래 전에 사용된 단순(SLRU) 페이지의 읽기를 기다리고 있습니다.
IO: SLRUSync 프로세스가 페이지 쓰기 후 가장 오래 전에 사용된 단순(SLRU) 데이터가 내구성 있는 스토리지에 도달할 때까지 기다리고 있습니다.
IO: SLRUWrite 프로세스가 가장 오래 전에 사용된 단순(SLRU) 페이지의 쓰기를 기다리고 있습니다.
IO: SnapbuildRead 프로세스가 직렬화된 기록 카탈로그 스냅샷의 읽기를 기다리고 있습니다.
IO: SnapbuildSync 프로세스가 직렬화된 기록 카탈로그 스냅샷이 내구성 있는 스토리지에 도달하기를 기다리고 있습니다.
IO: SnapbuildWrite 프로세스가 직렬화된 기록 카탈로그 스냅샷의 쓰기를 기다리고 있습니다.
IO: TimelineHistoryFileSync 프로세스가 스트리밍 복제를 통해 수신된 타임라인 기록 파일이 내구성 있는 스토리지에 도달하기를 기다리고 있습니다.
IO: TimelineHistoryFileWrite 프로세스가 스트리밍 복제를 통해 수신된 타임라인 기록 파일의 쓰기를 기다리고 있습니다.
IO: TimelineHistoryRead 프로세스가 타임라인 기록 파일의 읽기를 기다리고 있습니다.
IO: TimelineHistorySync 프로세스가 새로 생성된 타임라인 기록 파일이 내구성 있는 스토리지에 도달하기를 기다리고 있습니다.
IO: TimelineHistoryWrite 프로세스가 새로 생성된 타임라인 기록 파일의 쓰기를 기다리고 있습니다.
IO: TwophaseFileRead 프로세스가 2단계 상태 파일의 읽기를 기다리고 있습니다.
IO: TwophaseFileSync 프로세스가 2단계 상태 파일이 내구성 있는 스토리지에 도달할 때까지 기다리고 있습니다.
IO: TwophaseFileWrite 프로세스가 2단계 상태 파일의 쓰기를 기다리고 있습니다.
IO: WALBootstrapSync 프로세스가 부트스트래핑 중에 미리 쓰기 로그(WAL)가 내구성 있는 스토리지에 도달할 때까지 기다리고 있습니다.
IO: WALBootstrapWrite 프로세스가 부트스트래핑 중에 미리 쓰기 로그(WAL) 페이지의 쓰기를 기다리고 있습니다.
IO: WALCopyRead 프로세스는 기존 세그먼트를 복사하여 새 미리 쓰기 로그(WAL) 세그먼트를 만들 때 읽기를 기다리고 있습니다.
IO: WALCopySync 프로세스는 기존 세그먼트를 복사하여 생성한 새 미리 쓰기 로그(WAL)가 내구성 있는 스토리지에 도달할 때까지 기다리고 있습니다.
IO: WALCopyWrite 프로세스는 기존 세그먼트를 복사하여 새 미리 쓰기 로그(WAL) 세그먼트를 만들 때 쓰기를 기다리고 있습니다.
IO: WALInitSync 프로세스가 새로 초기화된 미리 쓰기 로그(WAL) 파일이 내구성 있는 스토리지에 도달할 때까지 기다리고 있습니다.
IO: WALInitWrite 프로세스가 새 미리 쓰기 로그(WAL) 파일을 초기화하는 동안 쓰기를 기다리고 있습니다.
IO: WALRead 프로세스가 미리 쓰기 로그(WAL) 파일에서 읽기를 기다리고 있습니다.
IO: WALSenderTimelineHistoryRead 프로세스가 WAL 발신자 타임라인 명령 중에 타임라인 기록 파일에서 읽기를 기다리고 있습니다.
IO: WALSync 프로세스가 미리 쓰기 로그(WAL) 파일이 내구성 있는 스토리지에 도달할 때까지 기다리고 있습니다.
IO: WALSyncMethodAssign 프로세스는 새로운 미리 쓰기 로그(WAL) 동기화 방법을 할당하면서 데이터가 내구성 있는 스토리지에 도달할 때까지 기다리고 있습니다.
IO: WALWrite 프로세스가 미리 쓰기 로그(WAL) 파일에서 읽기를 기다리고 있습니다.
IO: XactSync 백엔드 프로세스는  스토리지 하위 시스템이 일반 트랜잭션의 커밋 또는 준비된 트랜잭션의 커밋 또는 롤백을 확인할 때까지 기다리고 있습니다.
IPC: BackupWaitWalArchive 프로세스가 백업이 성공적으로 아카이빙되는 데 필요한 미리 쓰기 로그(WAL) 파일을 기다리고 있습니다.
IPC: AuroraOptimizedReadsCacheWriteStop 프로세스는 백그라운드 라이터가 최적화된 읽기 계층형 캐시에 쓰기를 중지하기를 기다리고 있습니다.
IPC: BgWorkerShutdown 프로세스가 백그라운드 작업자가 종료될 때까지 기다리고 있습니다.
IPC: BgWorkerStartup 프로세스가 백그라운드 작업자가 시작할 때까지 기다리고 있습니다.
IPC: BtreePage 프로세스가 병렬 B-트리 스캔을 계속 사용할 수 있도록 하는 데 필요한 페이지 번호를 기다리고 있습니다.
IPC: CheckpointDone 프로세스가 체크포인트가 완료될 때까지 기다리고 있습니다.
IPC: CheckpointStart 프로세스가 체크포인트가 시작될 때까지 기다리고 있습니다.
IPC: ClogGroupUpdate 프로세스가 그룹 리더가 트랜잭션이 끝날 때 트랜잭션 상태를 업데이트하기를 기다리고 있습니다.
IPC: DamRecordTxAck 백엔드 프로세스에서 데이터베이스 활동 스트림 이벤트를 생성했으며 이벤트가 지속될 때까지 기다리고 있습니다.
IPC: ExecuteGather 프로세스가 Gather 계획 노드를 실행하는 동안 자식 프로세스의 활동을 기다리고 있습니다.
IPC: Hash/Batch/Allocating 프로세스가 선택된 병렬 해시 참여자가 해시 테이블을 할당하기를 기다리고 있습니다.
IPC: Hash/Batch/Electing 프로세스가 해시 테이블을 할당하기 위해 병렬 해시 참여자를 선택합니다.
IPC: Hash/Batch/Loading 프로세스가 다른 병렬 해시 참여자가 해시 테이블 로딩을 마칠 때까지 기다리고 있습니다.
IPC: Hash/Build/Electing 프로세스가 초기 해시 테이블을 할당하기 위해 병렬 해시 참여자를 선택합니다.
IPC: Hash/Build/HashingInner 프로세스가 다른 병렬 해시 참여자가 내부 관계 해싱을 완료할 때까지 기다리고 있습니다.
IPC: Hash/Build/HashingOuter 프로세스가 다른 병렬 해시 참여자가 외부 관계 파티셔닝을 마칠 때까지 기다리고 있습니다.
IPC: HashGrowBatches/Allocating 프로세스가 선택된 병렬 해시 참여자가 더 많은 배치를 할당하기를 기다리고 있습니다.
IPC: HashGrowBatches/Deciding 프로세스에서 병렬 해시 참여자를 선택하여 향후 배치 증가를 결정합니다.
IPC: HashGrowBatches/Electing 프로세스에서 병렬 해시 참여자를 선택하여 더 많은 배치를 할당합니다.
IPC: HashGrowBatches/Finishing 프로세스는 선출된 병렬 해시 참여자가 향후 배치 증가를 결정할 때까지 기다리고 있습니다.
IPC: HashGrowBatches/Repartitioning 프로세스가 다른 병렬 해시 참여자가 다시 파티셔닝을 완료할 때까지 기다리고 있습니다.
IPC: HashGrowBuckets/Allocating 프로세스가 선택된 병렬 해시 참여자가 더 많은 버킷 할당을 완료할 때까지 기다리고 있습니다.
IPC: HashGrowBuckets/Electing 프로세스가 더 많은 버킷을 할당하기 위해 병렬 해시 참여자를 선택합니다.
IPC: HashGrowBuckets/Reinserting 프로세스가 다른 병렬 해시 참여자가 새 버킷에 튜플 삽입을 마칠 때까지 기다리고 있습니다.
IPC: LogicalSyncData 프로세스가 논리적 복제 원격 서버가 초기 테이블 동기화를 위해 데이터를 보낼 때까지 대기 중입니다.
IPC: LogicalSyncStateChange 프로세스가 논리적 복제 원격 서버가 상태를 변경하기를 기다리고 있습니다.
IPC: MessageQueueInternal 프로세스가 다른 프로세스가 공유 메시지 대기열에 연결될 때까지 기다리고 있습니다.
IPC: MessageQueuePutMessage 프로세스가 공유 메시지 대기열에 프로토콜 메시지를 쓰기 위해 대기 중입니다.
IPC: MessageQueueReceive 프로세스가 공유 메시지 대기열에서 바이트를 수신하기 위해 대기 중입니다.
IPC: MessageQueueSend 프로세스가 공유 메시지 대기열로 바이트를 전송하기 위해 대기 중입니다.
IPC: ParallelBitmapScan 프로세스가 병렬 비트맵 스캔이 초기화되기를 기다리고 있습니다.
IPC: ParallelCreateIndexScan 프로세스가 병렬 CREATE INDEX 작업자가 힙 스캔을 완료할 때까지 기다리고 있습니다.
IPC: ParallelFinish 프로세스가 병렬 작업자가 컴퓨팅을 완료할 때까지 기다리고 있습니다.
IPC: ProcArrayGroupUpdate 프로세스가 병렬 작업이 끝날 때 그룹 리더가 트랜잭션 ID를 지울 때까지 기다리고 있습니다.
IPC: ProcSignalBarrier 프로세스가 모든 백엔드에서 배리어 이벤트가 처리되기를 기다리고 있습니다.
IPC: Promote 프로세스가 대기 프로모션을 기다리고 있습니다.
IPC: RecoveryConflictSnapshot 프로세스가 베큠 클린업을 위해 복구 충돌 해결을 기다리고 있습니다.
IPC: RecoveryConflictTablespace 프로세스가 테이블스페이스를 삭제하기 위한 복구 충돌 해결을 기다리고 있습니다.
IPC: RecoveryPause 프로세스가 복구가 재개될 때까지 기다리고 있습니다.
IPC: ReplicationOriginDrop 프로세스가 복제 원본이 비활성화되어 삭제할 수 있도록 기다리고 있습니다.
IPC: ReplicationSlotDrop 프로세스가 복제 슬롯이 비활성화되어 삭제할 수 있도록 기다리고 있습니다.
IPC: SafeSnapshot 프로세스가 읽기 전용 연기 가능 트랜잭션에 대해 유효한 스냅샷을 얻기 위해 기다리고 있습니다.
IPC: SyncRep 프로세스가 동기식 복제 중에 원격 서버로부터의 확인을 기다리고 있습니다.
IPC: XactGroupUpdate 프로세스가 병렬 작업이 끝날 때 그룹 리더가 트랜잭션 상태를 업데이트하기를 기다리고 있습니다.
Lock : Advisory 백엔드 프로세스에서 권고 잠금을 요청하고 기다리고 있습니다. 자세한 내용은 Lock
백엔드 프로세스는 잠금이 해제되기를 기다리고 있습니다. 한 번에 하나의 백엔드 프로세스만 관계를 확장할 수 있기 때문에 이 잠금이 필요합니다. 
Lock : Extend 프로세스가 pg_database.datfrozenxid와 pg_database.datminmxid의 업데이트를 위해 대기 중입니다.
프로세스가 비관계 데이터베이스 객체에 대한 잠금을 얻기 위해 기다리고 있습니다.
Lock : Frozenid 프로세스가 관계 페이지에서 잠금을 받기 위해 기다리고 있습니다.
Lock : Object 백엔드 프로세스가 다른 트랜잭션에 의해 잠긴 관계에 대한 잠금을 획득하기 위해 기다리고 있습니다. 
Lock : Page 투기적 삽입 잠금을 얻기 위해 프로세스가 기다리고 있습니다.
Lock : Relation 투기적 삽입 잠금을 얻기 위해 프로세스가 기다리고 있습니다.
트랜잭션이 행 수준 잠금을 대기 중입니다. 
Lock : Spectoken 백엔드 프로세스는 튜플에 대한 잠금을 얻기 위해 기다리고 있으며 다른 백엔드 프로세스는 동일한 튜플에서 충돌하는 잠금을 유지합니다.
Lock : Speculative Token 프로세스가 사용자 잠금을 받기 위해 기다리고 있습니다.
Lock : Transactionid 프로세스가 가상 트랜잭션 ID 잠금을 받기 위해 기다리고 있습니다.
Lock : Tuple 프로세스가 공유 메모리에서 확장 프로그램의 공간 할당을 관리하기 위해 기다리고 있습니다.
Lock : Userlock 프로세스가 공유 메모리의 공간 할당을 관리하기 위해 기다리고 있습니다.
Lock : Virtualxid 프로세스가 비동기(알림) 버퍼에서 I/O를 기다리고 있습니다.
LWLock : AddinShmemInit 프로세스가 공유 알림 상태를 읽거나 업데이트하기 위해 기다리고 있습니다.
LWLock : AddinShmemInitLock 프로세스가 알림 메시지를 읽거나 업데이트하기 위해 기다리고 있습니다.
LWLock : Async 프로세스가 데이터 블록을 최적화된 읽기 계층형 캐시의 페이지와 연결하기 위해 기다리고 있습니다.
LWLock : AsyncCtlLock 프로세스가 postgresql.auto.conf 파일을 업데이트하기 위해 대기 중입니다.
LWLock : AsyncQueueLock 프로세스가 postgresql.auto.conf 파일을 업데이트하기 위해 대기 중입니다.
LWLock : AuroraOptimizedReadsCacheMapping 프로세스가 autovacuum 작업자의 현재 상태를 읽거나 업데이트하기 위해 대기 중입니다.
LWLock : AutoFile autovacuum 작업자 또는 시작 관리자가 autovacuum 작업자의 현재 상태를 업데이트하거나 읽기를 기다리고 있습니다.
LWLock : AutoFileLock 프로세스가 autovacuum용으로 선택된 테이블에 여전히 베큠이 필요한지 확인하기 위해 기다리고 있습니다.
LWLock : Autovacuum 프로세스가 난수를 생성하기 위해 기다리고 있습니다.
LWLock : AutovacuumLock 프로세스가 백그라운드 작업자 상태를 읽거나 업데이트하기 위해 기다리고 있습니다.
LWLock : AutovacuumSchedule 프로세스가 백그라운드 작업자 상태를 읽거나 업데이트하기 위해 대기 중입니다.
LWLock : BackendRandomLock 프로세스가 B-트리 인덱스에 대한 베큠 관련 정보를 읽거나 업데이트하기 위해 대기 중입니다.
LWLock : BackgroundWorker 프로세스가 B-트리 인덱스에 대한 베큠 관련 정보를 읽거나 업데이트하기 위해 대기 중입니다.
LWLock : BackgroundWorkerLock 백엔드 프로세스가 공유 메모리 버퍼의 내용에 대한 경량 잠금을 획득하기 위해 대기 중입니다.
LWLock : BtreeVacuum 백엔드 프로세스가 데이터 블록을 공유 버퍼 풀의 버퍼와 연결하기 위해 기다리고 있습니다.
LWLock : BtreeVacuumLock 백엔드 프로세스에서 페이지를 공유 메모리로 읽으려고 합니다. 다른 프로세스가 해당 페이지에 대한 I/O를 완료할 때까지 기다리고 있습니다.
LWLock : BufferContent 프로세스가 체크포인트 시작을 기다리고 있습니다.
LWLock : BufferMapping 프로세스가 체크포인트 수행을 기다리고 있습니다.
LWLock : BufferIO 프로세스가 fsync 요청 관리를 기다리고 있습니다.
LWLock : Checkpoint 프로세스가 fsync 요청 관리를 기다리고 있습니다.
LWLock : CheckpointLock 프로세스가 클록(트랜잭션 상태) 버퍼에서 I/O를 기다리고 있습니다.
LWLock : CheckpointerComm 프로세스가 트랜잭션 상태를 읽거나 업데이트하기 위해 대기 중입니다.
LWLock : CheckpointerCommLock 프로세스가 txid_status를 실행하거나 사용 가능한 가장 오래된 트랜잭션 ID를 업데이트하기 위해 대기 중입니다.
LWLock : Clog 프로세스가 커밋 타임스탬프 버퍼에서 I/O를 기다리고 있습니다.
LWLock : CLogControlLock 프로세스가 트랜잭션 커밋 타임스탬프에 대한 마지막 값 세트를 읽거나 업데이트하기 위해 대기 중입니다.
LWLock : CLogTruncationLock 프로세스가 커밋 타임스탬프를 위해 가장 오래전에 사용된 단순(SLRU) 버퍼에서 I/O를 기다리고 있습니다.
LWLock : CommitTimestamp 프로세스가 트랜잭션 커밋 타임스탬프를 읽거나 업데이트하기를 기다리고 있습니다.
LWLock : CommitTs 프로세스가 트랜잭션 타임스탬프에 대한 마지막 값 세트를 읽거나 업데이트하기 위해 대기 중입니다.
LWLock : CommitTsBuffer 프로세스가 커밋 타임스탬프에 대해 가장 오래전에 사용된 단순(SLRU) 캐시에 액세스하기 위해 대기 중입니다.
LWLock : CommitTsControlLock 프로세스가 pg_control 파일의 읽기 또는 업데이트 또는 새 미리 쓰기 로그(WAL) 생성을 위해 대기 중입니다.
LWLock : CommitTsLock 프로세스가 제어 파일을 읽거나 업데이트하거나 새 미리 쓰기 로그(WAL) 파일을 만들기 위해 대기 중입니다.
LWLock : CommitTsSLRU 프로세스가 동적 공유 메모리 할당 정보를 읽거나 업데이트하기 위해 기다리고 있습니다.
LWLock : ControlFile 프로세스가 동적 공유 메모리 상태를 읽거나 업데이트하기 위해 기다리고 있습니다.
LWLock : ControlFileLock 백엔드 프로세스가 백엔드 프로세스에 대한 잠금을 추가하거나 검사하기 위해 기다리고 있습니다.
LWLock : DynamicSharedMemoryControl 프로세스가 빠른 경로 잠금 정보를 읽거나 업데이트하기 위해 대기 중입니다.
LWLock : DynamicSharedMemoryControlLock 프로세스가 논리적 복제 작업자의 상태를 읽거나 업데이트하기 위해 대기 중입니다.
LWLock : LockManager 프로세스가 논리적 복제 작업자에 대한 작업이 완료될 때까지 기다리고 있습니다.
LWLock : LockFastPath 프로세스가 multixact_member 버퍼에서 I/O를 기다리고 있습니다.
LWLock : LogicalRepWorker 프로세스가 멀티액트 오프셋 버퍼에서 I/O를 기다리고 있습니다.
LWLock : LogicalRepWorkerLock 프로세스가 공유 멀티액트 상태를 읽거나 업데이트하기 위해 대기 중입니다.
LWLock : MultiXactMember 프로세스가 공유 멀티액트 상태를 읽거나 업데이트하기 위해 대기 중입니다.
LWLock : MultiXactOffset 프로세스가 멀티액트 멤버를 위해 가장 오래전에 사용된 단순(SLRU) 버퍼에서 I/O를 기다리고 있습니다.
LWLock : MultiXactGen 프로세스가 멀티액트 오프셋을 위해 가장 오래전에 사용된 단순(SLRU) 버퍼에서 I/O를 기다리고 있습니다.
LWLock : MultiXactGenLock 프로세스가 NOTIFY 메시지에 대해 가장 오래전에 사용된 단순(SLRU) 버퍼에서 I/O를 기다리고 있습니다.
LWLock : MultiXactMemberBuffer 프로세스가 NOTIFY 메시지를 읽거나 업데이트하기 위해 대기 중입니다.
LWLock : MultiXactOffsetBuffer 프로세스가 새 객체 ID(OID)를 할당하기 위해 대기 중입니다.
LWLock : NotifyBuffer 병렬 추가 계획 실행 중에 프로세스가 다음 하위 계획을 선택하기를 기다리고 있습니다.
LWLock : NotifyQueue 프로세스가 병렬 해시 계획 실행 중에 작업자를 동기화하기 위해 대기 중입니다.
LWLock : OidGen 프로세스가 공유 프로세스별 데이터 구조에 액세스하기 위해 대기 중입니다.
LWLock : ParallelAppend 프로세스가 pg_filenode.map 파일의 읽기 또는 업데이트를 기다리고 있습니다.
LWLock : ParallelHashJoin 프로세스가 pg_internal.init 파일의 읽기 또는 업데이트를 기다리고 있습니다.
LWLock : ProcArray 프로세스가 복제 원본을 생성, 삭제 또는 사용하기 위해 대기 중입니다.
LWLock : RelationMapping 프로세스가 복제 슬롯을 할당하거나 해제하기 위해 대기 중입니다.
LWLock : RelCacheInit 프로세스가 트랜잭션에 의해 유지되는 술어 잠금 목록에 액세스하기 위해 대기 중입니다.
LWLock : ReplicationOrigin 프로세스가 병렬 비트맵 인덱스 스캔 중에 공유 튜플 식별자(TID) 비트맵에 액세스하기 위해 대기 중입니다.
LWLock : ReplicationSlotAllocation 프로세스가 병렬 쿼리 중에 공유 튜플 스토어에 액세스하기 위해 대기 중입니다.
LWLock : SerializablePredicateList 프로세스가 하위 트랜잭션에 대해 가장 오래전에 사용된 단순(SLRU) 버퍼에서 I/O를 기다리고 있습니다.
LWLock : SharedTidBitmap 프로세스가 동기 복제 상태에 대한 정보를 읽거나 업데이트하기 위해 대기 중입니다.
LWLock : SharedTupleStore 프로세스가 테이블스페이스를 생성하거나 삭제하기 위해 대기 중입니다.
LWLock : SubtransBuffer 프로세스가 트리 비트맵(TBM)에서 공유 이터레이터 잠금을 기다리고 있습니다.
LWLock : SyncRep 프로세스가 준비된 트랜잭션 상태를 읽거나 업데이트하기 위해 대기 중입니다.
LWLock : TablespaceCreate 프로세스가 미리 쓰기 로그(WAL) 버퍼의 페이지를 대체하기 위해 대기 중입니다.
LWLock : TbBitmap 프로세스가 미리 쓰기 로그(WAL)를 메모리 버퍼에 삽입하기 위해 대기 중입니다.
LWLock : TwoPhaseState 프로세스가 미리 쓰기 로그(WAL) 버퍼가 디스크에 기록될 때까지 대기 중입니다.
LWLock : WALBufMapping 프로세스가 작업 제한 중 기본 백업 중에 대기 중입니다.
LWLock : WALInsert 백엔드 프로세스는 pg_sleep 함수를 호출하고 절전 시간 초과가 만료될 때까지 기다리고 있습니다.
LWLock : WALWrite 프로세스가 지연 설정으로 인한 복구 중에 미리 쓰기 로그(WAL)를 적용하기 위해 대기 중입니다.
Timeout : BaseBackupThrottle 프로세스가 소스(pg_wal, 아카이브 또는 스트림)에서 미리 쓰기 로그(WAL) 데이터를 사용할 수 없어 복구가 진행되는 동안 대기 중입니다.
Timeout : PgSleep 프로세스가 비용 기반 베큠 지연 지점에서 대기 중입니다.
Timeout : RecoveryApplyDelay 프로세스가 지연 설정으로 인한 복구 중에 미리 쓰기 로그(WAL)를 적용하기 위해 대기 중입니다.
Timeout : RecoveryRetrieveRetryInterval 프로세스가 소스(pg_wal, 아카이브 또는 스트림)에서 미리 쓰기 로그 (WAL) 데이터를 사용할 수 없어 복구가 진행되는 동안 대기 중입니다.
Timeout : VacuumDelay 프로세스가 비용 기반 베큠 지연 지점에서 대기 중입니다.

RDS

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/PostgreSQL.Tuning.concepts.html

대기 이벤트정의
Client:ClientRead 이 이벤트는 RDS for PostgreSQL이 클라이언트에서 데이터를 수신하기 위해 대기 중일 때 발생합니다.
Client:ClientWrite 이 이벤트는 RDS for PostgreSQL이 클라이언트에 데이터를 쓰기 위해 대기 중일 때 발생합니다.
CPU 이 이벤트는 스레드가 CPU에서 활성 상태이거나 CPU를 대기 중일 때 발생합니다.
IO:BufFileRead 및 IO:BufFileWrite 이러한 이벤트는 RDS for PostgreSQL이 임시 파일을 만들 때 발생합니다.
IO:DataFileRead 이 이벤트는 공유 메모리에서 페이지를 사용할 수 없기 때문에 연결이 백엔드 프로세스에서 저장소에서 필요한 페이지를 읽도록 대기할 때 발생합니다.
IO:WALWrite 이 이벤트는 RDS for PostgreSQL이 미리 쓰기 로그(WAL) 버퍼가 WAL 파일에 쓰여지기를 기다리는 동안 발생합니다.
Lock:advisory 이 이벤트는 PostgreSQL 애플리케이션이 잠금을 사용하여 여러 세션에서 활동을 조정할 때 발생합니다.
Lock:extend 이 이벤트는 백엔드 프로세스가 릴레이션을 확장하기 위해 릴레이션을 잠그기를 기다리는 동안 다른 프로세스에서 동일한 목적으로 해당 릴레이션에 대한 잠금이 있는 경우에 발생합니다.
Lock:Relation 이 이벤트는 쿼리가 현재 다른 트랜잭션에 의해 잠긴 테이블 또는 뷰에 대한 잠금을 얻기 위해 대기 중일 때 발생합니다.
Lock:transactionid 이 이벤트는 트랜잭션이 행 수준 잠금을 대기 중일 때 발생합니다.
Lock:tuple 이 이벤트는 백엔드 프로세스가 튜플에 대한 잠금 획득을 대기 중일 때 발생합니다.
LWLock:BufferMapping (LWLock:buffer_mapping) 이 이벤트는 세션이 데이터 블록을 공유 버퍼 풀의 버퍼와 연결하기 위해 대기 중일 때 발생합니다.
LWLock:BufferIO(IPC:BufferIO) 이 이벤트는 RDS for PostgreSQL이 페이지에 동시에 액세스하려고 할 때 다른 프로세스가 입출력(I/O) 작업을 완료할 때까지 기다리는 경우에 발생합니다.
LWLock:buffer_content (BufferContent) 이 대기 이벤트는 다른 세션에서 특정 데이터 페이지에 대해 쓰기 잠금을 설정한 동안 세션에서 메모리 내 해당 페이지 읽기 또는 쓰기를 대기 중일 때 발생합니다.
LWLock:lock_manager (LWLock:lockmanager) 이 이벤트는 RDS for PostgreSQL 엔진이 빠른 경로 잠금이 불가능할 때 잠금을 할당, 확인 및 할당 해제하기 위해 공유 잠금 메모리 영역을 유지 관리하는 경우에 발생합니다.
Timeout:PgSleep 이 이벤트는 서버 프로세스가 pg_sleep 함수 및 절전 시간 초과가 만료될 때까지 대기할 때 발생합니다.
Timeout:VacuumDelay 이 이벤트는 예상 비용 한도에 도달하여 진공 프로세스가 휴면 상태임을 나타냅니다.

 

 

 

참조

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Reference.Waitevents.html

https://blog.ex-em.com/1936

'공부 > DATABASE' 카테고리의 다른 글

PostgreSQL 유니크 인덱스 NULL 처리  (0) 2025.03.29
PostgreSQL 파티션 테이블  (0) 2025.03.29
postgreSQL Duplicate Key 영향도  (0) 2025.03.23
PostgreSQL 컬럼 변경 영향도  (0) 2025.03.23
PostgreSQL Any 연산자  (0) 2025.03.23