PostgreSQL中TOAST功能

來源:互聯網
上載者:User

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 的:請點這裡

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.