안녕하세요. 지현명입니다. 메뉴얼에 있는 AutoVacuum 공식 관련 질문입니다.
아래 공식 메뉴얼 "24.1.6 The AutoVacuum Daemon)에 보면
https://www.postgresql.org/docs/current/static/routine-vacuuming.html
이러한 공식이 나옵니다. AutoVacuum이 실행되는 조건
vacuum threshold = vacuum base threshold + vacuum scale factor * number of tuples
그래서 테이블에 250개 입력하고 테스트를 했습니다.
공식 메뉴얼 상으로는 아래와 같이 100 row이상 삭제 했을때만 AutoVacuum이 실행 되어야 하는데
(AutoVacuum 실행여부는 select last_autovacuum from pg_stat_all_tables 에서 확인)
Autovacuum Daemon |
vacuum base threshold |
50 |
A |
vacuum scale factor |
0.2 |
B |
전체행수(number of tuples) |
250 |
C |
vacuum scale factor * number of tuples |
50 |
D=(B*C) |
|
|
|
AutoVacuum threshold |
100 |
A+D |
|
|
|
전체 행수가 250일때 최소한 100 row 이상 삭제
되어야 AutoVacuum이 발생한다. |
50~ 100 사이의 row를 삭제하면 AutoVacuum이 되는 경우도 있고 아닌 경우도 있습니다. (일관성이 없습니다...)
50, 60, 70,80,90 이렇게 테스트 했습니다.
확실히 50 이하에서는 AutoVauum이 실행되지 않았고, 100 row이상에서는 매번 AutoVacuum이 실행됐습니다.
메뉴얼 상으로는 이 공식이 맞는데 pg_stat_all_tables.n_dead_tup >= threshold + pg_class.reltuples * scale_factor
Mastering postgresql 9.6 책에는 아래와 같은 표현이 나옵니다. 50row는 20%의 옵션 조건이지 더하는건 아닌데 제가 테스트 한 바도
이 책 내용처럼 vacuum base threshold (50)을 더하는게 아닌거 같은데 Postgresql의 정확한 조건은 어떤건가요?
"Therefore autovacuum_vacuuum_threshold says that we need 20% and that 20% must be at least 50 rows. Otherwise, VACUUM won't kick in. "
제 pc에 설치된 Postgresql의 다른 환경 조건 때문에 AutoVacuum이 오작동 하는걸까요? Mastering Postgresql 9.6 책만 아니면 그냥 그렇구나 하나 넘어갔을 텐데 저 문구가 계속 걸립니다. 공식 메뉴얼이 틀릴리도 없고....궁금합니다.
p.s
40개 삭제하고 2분뒤에 다시 60개 삭제하면 AutoVacuum이 실행됐습니다.
|