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 9882 게시물 읽기
No. 9882
AutoVAcuum인데 테이블(파일) size 작아지는 현상
작성자
지현명
작성일
2017-09-08 19:00:46
조회수
588

입력한 순서대로 데이터 중 끝에 (10%) 데이터를 삭제 하니까 AutoVAcuum되면서

File번호 그대로 이고 FileSize가  줄었습니다.(이건 Vacuum인가 Vacuum Full인가? 둘도 아닌데..)

AutoVacuum은 Vacuum인데 왜 Vacuum Full처럼 파일 용량이 줄어 드나요? Vacuum Full하면 파일

번호 바뀌어야 하는데 이건 바뀌지도 않고.....어떤 이유에서 이런가요?

앞에꺼 10%(?) 지우면 AutoVauum 되고 파일번호 그대로 이고 파일 size도 그대로 입니다. 

AutoVacuum에서 맨앞에 끝은 예외 적으로 20%가 안되도 작동 하는건가요?

-- test case 

CREATE TABLE t_test ( i1 int, v1 char(100) );

 SELECT pg_relation_filepath('t_test') --전체 경로

 base/12401/25930

 insert into t_test SELECT i, 'abcd' FROM generate_series(1, 100000) a(i);

 SELECT pg_relation_size('t_test');

14131200

 

마지막 10% 삭제 

DELETE from t_test where i1 > 90000;

--1분 기다림

 --AutoVacuum 작동 확인

SELECT last_autovacuum FROM pg_stat_all_tables WHERE RELNAME = 't_test'

 --파일 번호 다시 확인 (맨 처음과 동일함)

SELECT pg_relation_filepath('t_test') --전체 경로

base/12401/25930

--사이즈 확인 (그러나 용량 줄어듬, AutoVacuum인데....)

SELECT pg_relation_size('t_test');

12713984

 

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

일반 vacuum 작업도 여유 공간 확보 작업 대상이 해당 파일의 끝부분이고, 그 페이지 전체가 자료 정리 대상이 되면 여유 공간이라고 표시하지 않고, 그냥 그 페이지를 버려버립니다.

그래서 물리적인 파일 크기가 줄어들게 됩니다.

20%의 변화가 있어야 autovacuum이 실행되는데, 10% 변화가 있었음에도 불구하고, autovacuum이 실행된 원인은 찾아봐야 알겠네요. 테이블 변화량과 autovacuum 실행에 대한 부분은 그 관련 환경 설정을 잘 살펴보세요. 더 뭐라 할 부분이 없네요.

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

autovacuum이 10%에서 돈 것은 다른 통계에 의해서 인지.. 단순 테스트시에는 autovacuum이 저는 돌지 않습니다.

아마 이러한 것은 테이블 통계에 의한 것이 아니라 데이터베이스 통계에 의하여 수행된 것이 아닌가 의심되고요..

 

두번째의 경우 vacuum이 vacuum full처럼 반환하는 구조는 아니지만 그렇다고 불필요한 페이지까지 남기지는 않습니다.

 

select max(ctid) from t_test2;

max

----------

(1724,8)

 

이것은 delete전 페이지 수로 1724 페이지를 사용하지만

delete 후 수동으로 vacuum으로 돌렸을 경우

select max(ctid) from t_test;

max

-----------

(1551,42)

 

해당되는 데이터는 다 뒤에 있기 때문에 해당 page가 전부다 지워지는 경우에는 반환을 합니다.

 

 

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

 두분의 답변 감사합니다. 결론은 해당 페이지가 여유공간이 아니라고 

판단되면 버리기 때문에 AutoVacuum(normal Vacuum)이라도 용량이 줄어 준다는 거군요..

메뉴얼 상으로는 AutoVacuum은 Normal Vacuum이고 Normal Vacuum은 공간을 재활용 하기 때문에

OS에게 공간을 돌려주지 않는다고 정의 되어 있어서 테스트 하면서 혼란이 있던 부분입니다.

영어 문법처럼 예외 상황이라고 외워야 겠습니다.(잘 이해는 되지 않네요 ㅠㅠ 아직 pg내공이 부족한듯 해요)

 

 

지현명(gwise)님이 2017-09-11 11:03:58에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9887C프로그램에서 Postgresql 접속 및 조회하는 .so 파일 호출시 문의드립니다. [4]
플그램초짜
2017-09-14
488
9884다른 Session에서 다른 table에 lock인 상태에서 Vacuum을 하게되면 [16]
지현명
2017-09-12
577
9883AutoVacuum 메뉴얼 공식관련 [6]
지현명
2017-09-11
568
9882AutoVAcuum인데 테이블(파일) size 작아지는 현상 [3]
지현명
2017-09-08
588
9881시간대별 조회 쿼리 궁금 합니다 [2]
추성민
2017-09-08
548
9880AutoVacuum 이 실행되는 조건 [5]
지현명
2017-09-08
572
9878유저,스키마,테이블에 설정한 권한들 확인할 수 있는 것 [6]
postgres
2017-09-05
590
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2017 DSN, All rights reserved.
작업시간: 0.075초, 이곳 서비스는
	PostgreSQL v9.6.3으로 자료를 관리합니다