해당 글은 PG 11 기준으로 작성되었습니다.
Toast(The Oversized-Attribute Storage Technique)
정의: Toast는 크기가 고정되지 않는 타입의 Column 에 적용되는 기술로, 보다 큰 column 사이즈를 지원하기 위해 값을 압축/분할하여 별도의 pg_toast에 각각의 row로 담아 관리하는 기술이다.
fixed page size (commonly 8 kB) 보다 큰 경우에 적용된다.
- toast 관련하여 4가지 모드가 있으며, 모드들은 압축 유/무 분할 유/무 에 관련된 내용들이 있다.
- PostgreSQL 11버전 기준으로 toast 관련된 table space를 별도로 지정하는 기능은 없다.
(오라클에는 lob column을 별도의 테이블 스페이스로 지정 가능한 것과 대비된다.)
- 테이블 스페이스 사용하고 text 데이터를 생성하여 toast 테이블 사용하였을 시에 해당 테이블 스페이스에 공간이 늘어나는 것을 확인하였다.
toast table 사용되게 생성 및 확인 관련 쿼리
promdb=# CREATE table t1_toast(message text);
##### 테이블 toast 생성#####
promdb=# INSERT INTO t1_toast
SELECT (SELECT
string_agg(chr(floor(random() * 26)::int + 65), '')
FROM generate_series(1,10000))
FROM generate_series(1,10);
##### 테이블 toast에 row 생성#####
promdb=# SELECT reltoastrelid::regclass
FROM pg_class
WHERE relname = 't1_toast';
reltoastrelid
-------------------------
pg_toast.pg_toast_41120
##### 테이블 toast의 message row을 압축/분할해서 담고 있는 테이블 명 조회 #####
promdb-# SELECT pg pg_toast.pg_toast_41120;
##### 압축/분할되어 있는 테이블 내용확인 #####
특정 column toast 모드 변경하기(alter table set storage)
alter table t1_toast alter column column_name set storage EXTENDED;
용량순으로 table 정렬해서 top 20개 보기
SELECT nspname || '.' || relname AS "relation",
pg_size_pretty(pg_relation_size(C.oid)) AS "size"
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')
ORDER BY pg_relation_size(C.oid) DESC
LIMIT 20;
해당하는 테이블에 연결된 toast 테이블 이름 찾기
select relname from pg_class where oid = (select reltoastrelid from pg_class where relname='<t1_toast>');
'PostgreSQL' 카테고리의 다른 글
bloat postgresql check query (0) | 2021.07.18 |
---|---|
PostgreSQL에 oracle_fdw 설정하기- 2/2 (0) | 2021.01.20 |
PostgreSQL에 oracle_fdw 설정하기- 1/2 (0) | 2021.01.20 |
PostgreSQL 13(1편 Index size) (0) | 2020.09.27 |