AutoVacuum정리 하고 있는데 이해 되지 않는 부분이 있어 질문 드립니다.
신규로 설치해서 트랜잭션이 100개도 안되는 상황이라 아래 2번 케이스만 해당됩니다.
제가 궁금한것은 20% 이내로 삭제 했는데 왜 AutoVAcuum이 작동 되는 걸까요?
Manual 에는 AutoVacuum이 되는 조건으로
1. autovacuum_freeze_max_age - vacuum_freeze_min_age 값 만큼의 트랜잭션이 발생했다면, autovacuum 작업이 자동으로 진행
200000000-50000000
2. vacuum threshold = vacuum base threshold + vacuum scale factor * number of tuples
Therefore autovacuum_vacuuum_threshold says that we need 20% and that 20% must be at least 50 rows. Otherwise, VACUUM won't kick in.
AutoVacuum은 (삭제된 행)/(전체행) 이 20%가 되어야 하고, 그 20%는 최소한 50줄 이여야 한다.
---test
show autovacuum_vacuum_threshold -- 50
show autovacuum_vacuum_scale_factor --0.2
CREATE TABLE t_test ( i1 int, v1 char(100) );
insert into t_test SELECT i,'abcd' FROM generate_series(1, 100000) a(i);
--size확인
SELECT pg_relation_size('t_test');
14131200
15% 삭제 (0.15 * 100000)
DELETE from t_test where i1 <= 15000;
1분이상 기다림 (AutoVacuum ) - autovacuum_naptime 1min, 1개의 db로 테스트
삭제 했던거 만큼 추가로 입력
insert into t_test SELECT i,'abcd' FROM generate_series(1, 15000) a(i);
-- 다시 용량 측정
SELECT pg_relation_size('t_test');
14131200
--> 왜 AutoVacuum이 작동 한건가요? 삭제 한 row가 20% 보다 작은 15%인데..
|