PostgreSQL中TOAST功能
PostgreSQL中的TOAST的內容是儲存在另一個object中的,與原表的OID不一樣。比較像Oracle中的LOB類型儲存,(預設使用 out-of-line storage 是儲存在lobsegment裡的, Inline Storage 儲存在表的空間裡)。
如果表中有某些欄位使用TOAST進行儲存,那麼,通過普通的pg_relation_size('表名')查詢不到TOAST欄位所佔用的空間。如果要查詢TOAST欄位所佔用的空間,可以先查詢出TOAST欄位對應的OID,再通過pg_relation_size(OID)的方式查詢出TOAST欄位所佔用的空間。
--以下實驗驗證pg_relation_size('表名')查詢不到TOAST欄位所佔用的空間
testdb=> create table t(id int, remark text);
CREATE TABLE
testdb=> insert into t(id) select random() * 100 from generate_series(1,500);
INSERT 0 500
testdb=> select oid,relname,reltoastrelid from pg_class where relname = 't';
oid | relname | reltoastrelid
-------+---------+---------------
24679 | t | 24682
(1 row)
testdb=> select pg_size_pretty(pg_relation_size(24679));
pg_size_pretty
----------------
24 kB
(1 row)
testdb=> select pg_size_pretty(pg_relation_size(24682));
pg_size_pretty
----------------
0 bytes
(1 row)
TOAST欄位所佔用的空間現在是0
testdb=> select pg_size_pretty(pg_total_relation_size('t'));
pg_size_pretty
----------------
56 kB
(1 row)
testdb=> insert into t(remark) select repeat(md5(random()::text), 10000) from generate_series(1,1000);
INSERT 0 1000
testdb=> select pg_size_pretty(pg_relation_size(24679));
pg_size_pretty
----------------
72 kB
(1 row)
testdb=> select pg_size_pretty(pg_relation_size(24682));
pg_size_pretty
----------------
4000 kB
(1 row)
TOAST欄位所佔用的空間已經變為4000kB
testdb=> select pg_size_pretty(pg_total_relation_size('t'));
pg_size_pretty
----------------
4184 kB
(1 row)
使用pg_total_relation_size查出的結果是包括TOAST欄位所佔用的空間的。
testdb=> create index idx_id_id on t(id);
CREATE INDEX
testdb=> select pg_size_pretty(pg_relation_size(24679));
pg_size_pretty
----------------
72 kB
(1 row)
testdb=> select pg_size_pretty(pg_relation_size(24682));
pg_size_pretty
----------------
4000 kB
(1 row)
testdb=> select pg_size_pretty(pg_total_relation_size('t'));
pg_size_pretty
----------------
4240 kB
(1 row)
增加索引後,OID為24679和24682的大小都不變,而pg_total_relation_size的大小增加了,所以pg_total_relation_size的大小是包括了索引所佔用的空間的。
------------------------------------華麗麗的分割線------------------------------------
Ubuntu Server 14.04 下安裝 PostgreSQL 9.3.5 資料庫
CentOS 6.3環境下yum安裝PostgreSQL 9.3
PostgreSQL緩衝詳述
Windows平台編譯 PostgreSQL
Ubuntu下LAPP(Linux+Apache+PostgreSQL+PHP)環境的配置與安裝
Ubuntu上的phppgAdmin安裝及配置
CentOS平台下安裝PostgreSQL9.3
PostgreSQL配置Streaming Replication叢集
如何在CentOS 7/6.5/6.4 下安裝PostgreSQL 9.3 與 phpPgAdmin
------------------------------------華麗麗的分割線------------------------------------
PostgreSQL 的詳細介紹:請點這裡
PostgreSQL 的:請點這裡
本文永久更新連結地址: