[PostgreSQL] pgAgent Job Scheduler 에 VACUUM 등록 테스트
- Database(데이터베이스)
- 2022. 6. 23. 19:56
목적
- 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
'Database(데이터베이스)' 카테고리의 다른 글
[PostgreSQL] PostgreSQL postgresql.conf 파일 정보 (0) | 2022.06.24 |
---|---|
[PostgreSQL] PgTune 이란? (0) | 2022.06.23 |
[PostgreSQL] Autovacuum 최적화 (0) | 2022.06.23 |
[PostgreSQL] VACUUM 작업 (0) | 2022.06.22 |
[PostgreSQL] pgAgent Job 등록 생성 및 등록 방법 (0) | 2022.06.22 |
이 글을 공유하기