IPC:ProcArrayGroupUpdate - Amazon Relational Database Service

IPC:ProcArrayGroupUpdate

IPC:ProcArrayGroupUpdate 이벤트는 세션이 해당 작업의 끝에 그룹 리더가 트랜잭션 상태를 업데이트할 때까지 기다릴 때 발생합니다. PostgreSQL은 일반적으로 IPC 유형 대기 이벤트를 병렬 쿼리 작업과 연결하지만, 이 특정 대기 이벤트는 병렬 쿼리에만 국한되지 않습니다.

지원되는 엔진 버전

이 대기 이벤트 정보는 모든 RDS for PostgreSQL 버전에서 지원됩니다.

컨텍스트

프로세스 배열 이해 - 프로세스(proc) 배열은 PostgreSQL의 공유 메모리 구조입니다. 트랜잭션 세부 정보를 포함하여 실행 중인 모든 프로세스에 대한 정보가 들어 있습니다. 트랜잭션 완료(COMMIT 또는 ROLLBACK) 중에 ProcArray를 업데이트하여 변경 사항을 반영하고 어레이에서 transactionID를 지워야 합니다. 트랜잭션을 완료하려는 세션은 ProcArray에서 독점적 잠금을 획득해야 합니다. 이렇게 하면 다른 프로세스가 공유되거나 독점적인 잠금을 얻지 못합니다.

그룹 업데이트 메커니즘 - COMMIT 또는 ROLLBACK을 수행하는 동안 백엔드 프로세스가 독점 모드에서 ProcArrayLock을 가져올 수 없는 경우, ProcArrayGroupMember라는 특수 필드를 업데이트합니다. 그러면 종료하려는 세션 목록에 트랜잭션이 추가됩니다. 그러면이 백엔드 프로세스가 절전 모드로 전환되고, 절전 모드로 전환되는 시간이 ProcArrayGroupUpdate 대기 이벤트로 계측됩니다. 리더 프로세스라고 하는 ProcArrayprocArrayGroupMember의 첫 번째 프로세스는 ProcArrayLock을 독점 모드로 획득합니다. 그런 다음 그룹 transactionID 지우기를 기다리는 프로세스 목록을 지웁니다. 이 작업이 완료되면 리더는 ProcArrayLock을 해제한 다음, 이 목록의 모든 프로세스를 깨워 트랜잭션이 완료되었음을 알립니다.

대기 증가의 가능한 원인

실행 중인 프로세스가 많을수록 리더가 독점 모드에서 procArrayLock을 더 오래 유지합니다. 따라서 쓰기 트랜잭션이 많을수록 그룹 업데이트 시나리오로 인해 ProcArrayGroupUpdate 대기 이벤트를 기다리는 프로세스가 잠재적으로 쌓일 수 있습니다. Database Insights의 상위 SQL 보기에서 COMMIT이이 대기 이벤트의 대부분을 포함하는 문임을 알 수 있습니다. 이는 예상되지만 실행 중인 특정 쓰기 SQL에 대한 심층 조사를 통해 취해야 할 적절한 조치를 결정해야 합니다.

작업

대기 이벤트의 원인에 따라 다른 작업을 권장합니다. Amazon RDS Performance Insights를 사용하거나 PostgreSQL 시스템 보기 pg_stat_activity를 쿼리하여 IPC:ProcArrayGroupUpdate 이벤트를 식별합니다.

트랜잭션 커밋 및 롤백 작업 모니터링

커밋 및 롤백 모니터링 - 커밋 및 롤백 수가 증가하면 ProcArray에 대한 부담이 증가할 수 있습니다. 예를 들어 중복 키 위반 증가로 인해 SQL 문이 실패하기 시작하면 롤백이 증가하여 ProcArray 경합과 테이블 팽창이 증가할 수 있습니다.

Amazon RDS Database Insights는 PostgreSQL 지표 xact_commitxact_rollback을 제공하여 초당 커밋 및 롤백 수를 보고합니다.

동시성 감소

트랜잭션 일괄 처리 - 가능한 경우 커밋/롤백 작업을 줄이기 위해 단일 트랜잭션에서 작업을 일괄 처리합니다.

동시성 제한 - 동시 활성 트랜잭션 수를 줄여 ProcArray에서 잠금 경합을 완화합니다. 약간의 테스트가 필요하지만 총 동시 연결 수를 줄이면 경합을 줄이고 처리량을 유지할 수 있습니다.

연결 풀링 구현

연결 풀링 솔루션 - 연결 풀링을 사용하여 데이터베이스 연결을 효율적으로 관리함으로써 ProcArray의 총 백엔드 수와 그에 따른 워크로드를 줄입니다. 약간의 테스트가 필요하지만 총 동시 연결 수를 줄이면 경합을 줄이고 처리량을 유지할 수 있습니다.

연결 폭주 감소 - 마찬가지로 연결을 자주 생성하고 종료하는 패턴으로 인해 ProcArray에 추가 압력이 발생합니다. 이 패턴을 줄이면 전반적인 경합이 줄어듭니다.

더 빠른 스토리지 사용

전용 로그 볼륨 - IPC:ProcArrayGroupUpdate 대기 이벤트에 높은 IO:WALWrite 대기 이벤트가 수반되는 경우, 전용 로그 볼륨을 설정하면 WAL에 대한 병목 현상 쓰기를 줄일 수 있습니다. 그러면 커밋 성능이 향상됩니다.

자세한 내용은 전용 로그 볼륨을 참조하세요.