Aurora PostgreSQL에서 공격적인 vacuum 블로커 식별 및 해결
PostgreSQL에서는 vacuum 작업이 스토리지를 회수하고 트랜잭션 ID 랩어라운드
postgres_get_av_diag()
함수는 공격적 vacuum 진행 상황을 방지하거나 지연시키는 문제를 식별하는 데 도움이 됩니다. 제안이 제공되며, 여기에는 문제를 식별할 수 있는 경우 문제 해결을 위한 명령이, 문제를 식별할 수 없는 경우 추가 진단을 위한 지침이 포함될 수 있습니다. 공격적 vacuum 블로커는 연령이 RDS의 적응형 autovacuum 임곗값인 트랜잭션 ID 5억 개를 초과할 때 보고됩니다.
트랜잭션 ID의 연령이란 무엇인가요?
트랜잭션 ID에 대한 age()
함수는 데이터베이스(pg_database.datfrozenxid
) 또는 테이블(pg_class.relfrozenxid
)에 대해 가장 오래된 고정되지 않은 트랜잭션 ID 이후 발생한 트랜잭션 수를 계산합니다. 이 값은 마지막 공격적 vacuum 작업 이후의 데이터베이스 활동을 나타내며 향후 VACUUM 프로세스에 대해 가능한 워크로드를 강조합니다.
공격적 vacuum이란 무엇인가요?
공격적인 VACUUM 작업은 일반적인 VACUUM에서는 대개 건너 뛰는 페이지를 포함하여 테이블 내에 있는 모든 페이지에 대한 종합적인 스캔을 수행합니다. 이 철저한 스캔의 목표는 최대 연령에 근접한 트랜잭션 ID를 '고정'하여 트랜잭션 ID 랩어라운드
postgres_get_av_diag()
가 블로커를 보고하려면 블로커의 연령이 최소 5억 개의 트랜잭션이어야 합니다.