[PostgreSQL] pgAgent Job Scheduler 에 VACUUM 등록 테스트

목적

  • pgAgent Job Scheduler 를 하나 생성 후, 수동 Vacuum 작업 코드를 추가하여 Scheduler 실행으로 Vacuum 작업이 동작하는지 확인 진행합니다.
  • 해당 작업은 수동 Vacuum 명령어를 Job 을 통해 등록하여 자동으로 실행하는 방법으로, Autovacuum 작업이랑 은 완전 다른 개념입니다.

1. Job 등록하기

  • 우선 테스트 진행할 Job Scheduler 를 하나 생성 및 등록합니다.
  • 해당 Job 에는 수동으로 Vacuum 작업을 진행하는 테스트 코드를 추가 하였습니다.

2. 테스트 데이터 생성

  • 실제 Vacuum 작업을 하기 위해서는 테스트 테이블 및 데이터를 Insert, Update 해 주어서 Live Tuple, Dead Tuple 들이 생기도록 해야 합니다.
  • 아래 쿼리를 통해 테스트 데이터를 생성 및 등록할 수 있습니다.
create table test (a int, b int);
alter table test set (autovacuum_enabled = false); -- autovacuum 비활성화
insert into test select generate_series, generate_series from generate_series(1, 100000);
\dt+ test -- table 크기 : 3568 kB(10만건) / 총 10만개(10만:live tuple)의 dead tuple 생성
update test set b = b + 1 ;
\dt+ test -- table 크기 : 7104 kB(20만건) / 총 20만개(10만:dead tuple + 10만:live tuple)의 dead tuple 생성
update test set b = b + 1 ;
\dt+ test -- table 크기 : 10 MB(30만건) / 총 30만개((10만 + 10만):dead tuple + 10만:live tuple)의 dead tuple 생성
  • 위와 같이 데이터를 등록하게 되면, 아래와 같이 테스트 데이터가 생성된 것을 확인할 수 있습니다.
  • 아래 내용은 다음 쿼리 문을 통해서 조회 가능합니다.
  • 현재 조회 결과, 30만건의 live_tuple 이 있고, 약 29만건의 dead_tuple 이 있습니다.
SELECT relname, n_live_tup, n_dead_tup, n_dead_tup / (n_live_tup::float) as ratio
FROM pg_stat_user_tables
WHERE n_live_tup > 0 AND n_dead_tup > 1000
ORDER BY ratio DESC;

3. Vacuum 수동 실행

  • 앞서 Job Scheduler 를 통해 Vacuum 을 수동으로 실행하는 Code 를 넣어 주었습니다.
  • 실제로 Job Scheudler 를 실행하여 test 테이블에서 dead tuple 이 정리 되었는지 확인 진행합니다.
  • 실행 결과, Job Scheduler 정상 동작 하였고 dead tuple 이 정리된 것을 확인할 수 있습니다.

Vacuum 동작 확인

  • Vacuum 이 정상 동작하여, dead tuple 값이 0 으로 표시되는 것을 확인할 수 있습니다.

Job Scheduler 로그 확인

  • Job Scheduler 로그 확인 결과, Job 정상 수행 된 것을 확인할 수 있습니다.

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY