[Aurora PostgreSQL] VACUUM 이후 일시적인 입력 지연

2026. 1. 18. 16:02·공부/DATABASE

Vacuum 이후에 일시적으로 입력들이 지연이 있다가 점차 지연 속도가 낮아지면서 해소가 되는 현상을 여러번 확인하였습니다.

원인을 파악하고자 하였고 어떤 방법으로 개선할 수 있을지 확인해보았습니다.

해당 테이블은 약 160GB로 UPDATE와 INSERT가 1:1 비율 수준으로 발생하고 있었습니다.

 

Aurora 였기 때문에 Vacuum으로 인한 Disk 처리량이 부족하다고는 고려하지 않았고

Vacuum 이후 Dead Tuple 정리와 Free SpaceMap 정보가 업데이트 된 이후 INSERT가 여러 비어져 있는 공간에 입력되기 위해 처리 속도가 지연되는건 아닐까라는 가정을 세웠습니다.

만약 가정이 맞다면 Vacuum을 좀 더 빈번하게 동작하게하여서 입력의 성능 저하를 낮출 수 있지 않을까라고 생각하였습니다.

 

Vaccum 로그

시간 전체  Page 조회 Page 삭제 TUPLE 처리X TUPLE 소요 시간(초) 특이 사항
TableA            
10/10 11:09
(auto vacuum)
19,127,681 4,123,045 8,171,897 79,528,797 767 입력 쿼리 지연 시간 증가
1.26ms (약 6배)
10/27 06:00
(vacuum)
20,337,146 834,422 583,577 3,342,709 384 1.77ms
10/27 18:00
(vacuum 추가)
20,337,146 419,118 257,572 1,734,047 36 입력 쿼리 지연 시간 미 증가
index scan bypassed
10/28 06:00
(vacuum)
20,337,146 575,745 273,940 2,153,684 345 1.75ms
10/29 18:00 
index_cleanup on
20,337,146 404,214 249,099 1,654,231 302  0.67ms
10/30 06:00 
index_cleanup on
20,337,146 373,517 272,550 1,463,544 298 1.09ms
TableB            
10/28 06:00
(vacuum)
20,737,855 828,169 34,663 3,293,534 142 특이사항 없음

 

처음 수동 Vacuum 구문을 추가하였을 때 생각보다 Vacuum 처리 시간이 고르게 분포되지 않고 입력 지연 또한 유지되는걸 확인하였습니다. Vacuum 로그 중 index scan bypassed라는 구문을 확인하였고 해당 내용을 좀 더 확인하였습니다.

 

index scan bypassed??

베큠 프로세서가 인덱스 조회가 불필요하다고 판단되면 해당 단계를 스킵하는 방식.

아래 트리거에 의하여 실행됨

/*
 * Threshold that controls whether we bypass index vacuuming and heap
 * vacuuming as an optimization
 */
#define BYPASS_THRESHOLD_PAGES  0.02    /* i.e. 2% of rel_pages */
 
[...]
threshold = (double) vacrel->rel_pages * BYPASS_THRESHOLD_PAGES;
   bypass = (vacrel->lpdead_item_pages dead_items) < (32L * 1024L * 1024L)));

(테이블에 LP_DEAD (제거된 행 버전을 가리키는 행 포인터 튜플이 페이지에서 제거되었지만 라인 포인터 슬롯을 아직 재사용할 수 없음을 의미) 2%를 넘지 않고 TID 저장소가 아직 32MB를 초과하지 않으면 (자동)VACUUM은 인덱스 진공 작업을 건너뜁니다.)

INDEX_CLEANUP 옵션을 통하여 스킵하지 않도록 설정 가능

 

해당 사항으로 인하여 Vacuum 작업이 고르게 분포되지 않았다고 생각하였으며 옵션을 추가한 이후로 입력 쿼리의 평균 처리 시간이 급격히 증가하는 현상은 해소되었습니다.

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

[AWS] Database SavingPlan  (0) 2026.01.24
[Aurora, Aws DocumentDB] I/O Optimized  (0) 2026.01.24
[Aurora MySQL] 파티션 테이블 DDL  (0) 2026.01.18
[ElastiCache] Redis CrossSlot 에러  (0) 2026.01.18
[PostgreSQL] GIN 인덱스 특징  (0) 2026.01.18
'공부/DATABASE' 카테고리의 다른 글
  • [AWS] Database SavingPlan
  • [Aurora, Aws DocumentDB] I/O Optimized
  • [Aurora MySQL] 파티션 테이블 DDL
  • [ElastiCache] Redis CrossSlot 에러
무는빼주세요
무는빼주세요
내 머리를 믿지 말자
  • 무는빼주세요
    공부, 기록
    무는빼주세요
  • 전체
    오늘
    어제
  • 링크

    • 링크드인 (LinkedIn)
    • 분류 전체보기 (259)
      • 일상 (0)
      • 코딩 (77)
      • 공부 (181)
        • DATABASE (129)
        • 도커,쿠버네티스 (1)
        • 소소한 개발 (38)
        • 클라우드 영역 (1)
        • CS 영역 (11)
      • 포럼 (0)
  • 최근 글

  • 인기 글

  • hELLO· Designed By정상우.v4.10.5
무는빼주세요
[Aurora PostgreSQL] VACUUM 이후 일시적인 입력 지연
상단으로

티스토리툴바