database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 9880 게시물 읽기
No. 9880
AutoVacuum 이 실행되는 조건
작성자
지현명(gwise)
작성일
2017-09-08 15:56
조회수
7,207

 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%인데..

 

이 글에 대한 댓글이 총 5건 있습니다.

log_autovacuum_min_duration = 0

설정해서 로그를 살펴보세요.

제 시스템에서는 pg_relation_size 값이 증가 하네요.

 

pg_stat_all_tables 뷰를 통해서 autovacuum 쪽이 잘 돌고 있는지 살펴볼 수 있습니다.

 

김상기(ioseph)님이 2017-09-08 16:21에 작성한 댓글입니다.

답변 감사합니다. 윈도우 버전이라서 그럴까요?...집에서 리눅스 버전으로 테스트 해보겠습니다.

SELECT * FROM pg_stat_all_tables WHERE RELNAME = 't_test'

이거로 조회 하니까

last_autovacuum  :  2017-09-08 16:31:10.753139+09

last_autoanalyze : 2017-09-08 16:31:10.987152+09

이렇게 되어 있습니다. 결국 AutoVacuum이 작동한건데.....

로그에 한글 정확하게 나오게 하려면 어떻게 해야 하나요?....AutoVacuum실행 됐습니다.

 

2017-09-08 16:47:04 KST 濡쒓렇: "postgres.public.t_test" ?뚯씠釉??먮룞 泥?냼: ?몃뜳???먯깋: 0

?섏씠吏€: 0 ??젣?? 1725 ?⑥쓬, 0 ?€?앹쑝濡?嫄대꼫?€, 0 ?숆껐?섏뼱 嫄대꼫?€

?쒗뵆: 15000 ??젣?? 85000 ?⑥쓬, 0 ??젣?????녿뒗 二쎌? ?쒗뵆

踰꾪띁 ?ъ슜?? 3471 議고쉶, 4 ?볦묠, 3 蹂€寃쎈맖

?됯퇏 ?쎄린 ?띾룄: 0.091 MB/s, ?됯퇏 ?곌린 ?띾룄: 0.068 MB/s

?쒖뒪???ъ슜?? CPU 0.00s/0.01u sec elapsed 0.34 sec

2017-09-08 16:47:04 KST 濡쒓렇: "postgres.public.t_test" ?뚯씠釉붿쓽 ?쒖뒪???ъ슜 ?먮룞 遺꾩꽍: CPU 0.00s/0.01u sec elapsed 0.23 sec

지현명(gwise)님이 2017-09-08 16:33에 작성한 댓글입니다.
이 댓글은 2017-09-08 17:22에 마지막으로 수정되었습니다.

한글 메시지 문제는

그 로그 파일을 보려고 하는 클라이언트 (cmd 가 되든, notepad 가 되든, 아니면, 기타 무엇이 되든, 그게 windows 환경에서 사용하는 응용 프로그램)가 utf8 인코딩을 정상적으로 보여줄 수 있으면 되겠죠.

 

통상 psql 인 경우는 uhc 환경으로 lc_messages 값이 ko_KR.cp949 로 자동 변환을 하는데,

서버는 데이터베이스가 utf8 환경이면, 서버 메시지를 ko_KR.cp949로 지정하는 것은 꽤 위험해 보이고... 그렇다고, ko_KR.utf8 메시지를 편하게 보는 것도 그리 깔끔하지 않을 것이고, 여튼 그렇네요.

 

그냥 영어로 쓰세요. 크크. 제가 돈이 없어서 windows를 돈 주고 살 형편이 못되서 윈도우즈 환경에서 서버 메시지의 한글 처리 관련을 깔끔하게 테스트 하지는 못했습니다.

김상기(ioseph)님이 2017-09-08 18:06에 작성한 댓글입니다.

테스트하기전에 autovacuum을 수행하고 통계정보를 확인하신후에 비교하시면 정확한 테스트가 가능합니다.

김주왕(kimjuking)님이 2017-09-11 09:45에 작성한 댓글입니다.

답변 감사합니다.

김주왕님 답변 주신 내용중에 통계정보하고 AutoVacuum하고 관련 있나요?

pg_stat_all_tables에도 AutoVacuum하고 AutoAnalyze가 분리 되 었고 

공식 메뉴얼에도 두개가 실행되는 조건이 분리 되어 있던데.....

매번 테스트 하기 전에 drop table하고 다시 create해서 초기화 한 후에 합니다.

제가 놓치고 있는 부분이 있을까요? pg AutoVacuum 어렵게만 느껴집니다.

지현명(gwise)님이 2017-09-11 11:25에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9883AutoVacuum 메뉴얼 공식관련 [6]
지현명
2017-09-11
8241
9882AutoVAcuum인데 테이블(파일) size 작아지는 현상 [3]
지현명
2017-09-08
7134
9881시간대별 조회 쿼리 궁금 합니다 [2]
추성민
2017-09-08
7952
9880AutoVacuum 이 실행되는 조건 [5]
지현명
2017-09-08
7207
9878유저,스키마,테이블에 설정한 권한들 확인할 수 있는 것 [6]
postgres
2017-09-05
9079
9876plpgsql 내에서 table type 정의하여 사용할 때 이상한 점. [1]
개발이하고싶어요
2017-08-28
7102
9875postgres 설치 오류 문의 입니다. [3]
이은성
2017-08-23
8428
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다