반응형
지난시간에 제가 설치하려고 했던 extension입니다.
이걸 사용해서 vacuum과 vacuum full 했을때 어떤 차이가 있는지 확인해보겠습니다.
테스트 테이블
data 컬럼하나만 있는 tbl1을 생성하고 A 하나를 insert합니다.
postgres=# create table tbl1 (data text);
CREATE TABLE
postgres=*# insert into tbl1 values ('A');
INSERT 0 1
확인
postgres=# SELECT lp as tuple, t_xmin, t_xmax, t_field3 as t_cid, t_ctid
postgres-# FROM heap_page_items( get_raw_page('tbl1',0)) ;
tuple | t_xmin | t_xmax | t_cid | t_ctid
-------+--------+--------+-------+--------
1 | 804 | 0 | 0 | (0,1)
(1 row)
delete후 확인
데이터는 삭제되었지만 tuple은 남아있음.
postgres=# delete from tbl1;
DELETE 1
postgres=# SELECT lp as tuple, t_xmin, t_xmax, t_field3 as t_cid, t_ctid
postgres-# FROM heap_page_items( get_raw_page('tbl1',0)) ;
tuple | t_xmin | t_xmax | t_cid | t_ctid
-------+--------+--------+-------+--------
1 | 804 | 805 | 0 | (0,1)
(1 row)
다시 INSERT 하고 UPDATE 여러번 하기
실제data는 C이지만 앞에 tuple이 1,2,3으로 dead tuple이 생성된것을 볼 수 있다.
postgres=# insert into tbl1 values ('A');
INSERT 0 1
postgres=# update tbl1 set data='B';
UPDATE 1
postgres=# update tbl1 set data='C';
UPDATE 1
postgres=# SELECT lp as tuple, t_xmin, t_xmax, t_field3 as t_cid, t_ctid
FROM heap_page_items( get_raw_page('tbl1',0)) ;
tuple | t_xmin | t_xmax | t_cid | t_ctid
-------+--------+--------+-------+--------
1 | 804 | 805 | 0 | (0,1) -----이건 dead tuple
2 | 806 | 807 | 0 | (0,3) --insert 'A' --dead tuple
3 | 807 | 808 | 0 | (0,4) --update 'B' --dead tuple
4 | 808 | 0 | 0 | (0,4) --update 'C'
(4 rows)
postgres=# select * from tbl1;
data
------
C
(1 row)
vacuum 수행 후 확인
마지막 4번 tuple만 데이터가 남아있고 나머지는 없어졌다. 하지만 delete 개념으로 1,2,3의 자리는 그대로 남아있다.
다시 update하면 이곳에 tx데이터가 update된다.
postgres=# vacuum tbl1;
VACUUM
postgres=# SELECT lp as tuple, t_xmin, t_xmax, t_field3 as t_cid, t_ctid
postgres-# FROM heap_page_items( get_raw_page('tbl1',0)) ;
tuple | t_xmin | t_xmax | t_cid | t_ctid
-------+--------+--------+-------+--------
1 | | | |
2 | | | |
3 | | | |
4 | 808 | 0 | 0 | (0,4)
(4 rows)
vacuum full 수행 후 확인
tuple이 최신것만 남기고 공간이 반환되었다.
postgres=# vacuum full tbl1;
VACUUM
postgres=# SELECT lp as tuple, t_xmin, t_xmax, t_field3 as t_cid, t_ctid
FROM heap_page_items( get_raw_page('tbl1',0)) ;
tuple | t_xmin | t_xmax | t_cid | t_ctid
-------+--------+--------+-------+--------
1 | 808 | 0 | 0 | (0,1)
(1 row)
***vacuum 후 빈 공간 재활용 여부 체크
update tbl1 set data='D';
update tbl1 set data='E';
update tbl1 set data='F';
update tbl1 set data='G';
update tbl1 set data='H';
update tbl1 set data='I';
update tbl1 set data='J';
tuple | t_xmin | t_xmax | t_cid | t_ctid
-------+--------+--------+-------+--------
1 | 808 | 811 | 0 | (0,2)
2 | 811 | 812 | 0 | (0,3)
3 | 812 | 813 | 0 | (0,4)
4 | 813 | 814 | 0 | (0,5)
5 | 814 | 815 | 0 | (0,6)
6 | 815 | 816 | 0 | (0,7)
7 | 816 | 817 | 0 | (0,8)
8 | 817 | 0 | 0 | (0,8)
(8 rows)
Vacuum 수행
postgres=# vacuum tbl1;
VACUUM
2번 tuple에 새로운 정보가 쓰여진다.
postgres=# update tbl1 set data='Z';
UPDATE 1
postgres=# SELECT lp as tuple, t_xmin, t_xmax, t_field3 as t_cid, t_ctid
FROM heap_page_items( get_raw_page('tbl1',0)) ;
tuple | t_xmin | t_xmax | t_cid | t_ctid
-------+--------+--------+-------+--------
1 | | | |
2 | 818 | 0 | 0 | (0,2)
3 | | | |
4 | | | |
5 | | | |
6 | | | |
7 | | | |
8 | 817 | 818 | 0 | (0,2)
(8 rows)
끝.
반응형
'다른 DBMS > PostgresDB' 카테고리의 다른 글
오류: 기타 다른 개체들이 이 롤에 의존하고 있어, "유저명" 롤을 삭제할 수 없음 (0) | 2024.05.29 |
---|---|
[postgresql] 데이터타입 총정리 (0) | 2024.04.02 |
postgres extention contrib 확장팩 설치 (0) | 2024.03.30 |
DB 설치 후 client tool과 외부 연결하기 (2) | 2023.11.22 |
[pg15] DATA Directory 변경하기 (0) | 2023.03.29 |
댓글