[PostgreSQL] AutoVacuum 동작 테스트
- Database(데이터베이스)
- 2022. 7. 10. 18:08
개요
- postgresql.conf 에서 AutoVacuum 관련 설정을 하였다고 가정을 하고, 실제 AutoVacuum 이 정상적으로 동작하는지 테스트 진행합니다.
데이터 삽입 및 수정
- 테스트 진행을 위해, test 테이블 하나를 생성하고 데이터 Insert 및 Update 를 진행하였습니다.
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 생성
Dead Tuple, Live Tuple 확인
- Dead Tuple, Live Tuple 확인을 다음 SQL 구문을 통해 확인할 수 있습니다.
- 쿼리 조회 결과, 현재 test 테이블에 Dead Tuple 이 698159 인것을 확인할 수 있습니다.
adc=# 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;
relname | n_live_tup | n_dead_tup | ratio
---------+------------+------------+---------
test | 100000 | 698159 | 6.98159
(1 row)
AutoVacuum 동작 쿼리 확인
- 이제 어느정도 시간이 지나, AutoVacumm 동작이 이루어 졌는지 확인합니다.
- AutoVacuum 동작 확인하는 쿼리는 다음과 같습니다.
adc=# SELECT relname, last_vacuum, last_autovacuum, last_analyze, last_autoanalyze
FROM pg_stat_user_tables
order by relname;
relname | last_vacuum | last_autovacuum | last_analyze | last_autoanalyze
-----------+-------------+-------------------------------+--------------+------------------------------
test | | 2022-07-07 16:07:23.746402+09 | | 2022-07-07 16:07:23.82043+09
(1 rows)
- 위와 같이 2022-07-07 16:07:23.746402+09 시간에 AutoVacuum 이 실행된 것을 확인할 수 있습니다.
- 이제 다시 test 테이블의 Dead Tuple 을 확인하여 정상적으로 AutoVacuum 이 이루어 졌는지 확인합니다.
Dead Tuple, Live Tuple 확인
- 앞서 test 테이블의 Dead Tuple 이 698159 였습니다.
- 하지만, AutoVacuum 이 동작한 후에는 Dead Tupe 이 0 으로 된 것을 확인할 수 있습니다.
adc=# 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
ORDER BY ratio DESC;
relname | n_live_tup | n_dead_tup | ratio
---------+------------+------------+-------
test | 100000 | 0 | 0
(1 row)
728x90
'Database(데이터베이스)' 카테고리의 다른 글
[PostgreSQL] PostgreSQL Idle 상태의 Session 삭제 방법 (0) | 2022.10.28 |
---|---|
[PostgreSQL] postgresql too many clients already 오류 발생 및 해결 방법 (1) | 2022.10.13 |
[PostgreSQL] 아카이브 모드 백업을 이용한 특정 시점 복구 시나리오(Point In Time Recovery(PITR)) (0) | 2022.07.10 |
[PostgreSQL] 아카이브 모드 백업을 이용한 전체 복구 시나리오 (0) | 2022.07.08 |
[PostgreSQL] 아카이브 모드 백업 (0) | 2022.07.07 |
이 글을 공유하기