设为首页 加入收藏

TOP

PostgreSQL中TOAST功能
2015-12-15 22:18:00 来源: 作者: 【 】 浏览:3
Tags:PostgreSQL TOAST 功能

?如果表中有某些字段使用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的大小是包括了索引所占用的空间的。


------------------------------------华丽丽的分割线------------------------------------


------------------------------------华丽丽的分割线------------------------------------


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇PostgreSQL日志分类与管理 下一篇Linux(Ubuntu)环境下安装DB2 V1..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: