postgresql dead_tuple和live_tuple

本文介绍了PostgreSQL如何处理死元组(dead tuples),通过vacuum进程来清理并回收空间,以及vacuum的功能:空间回收、事务ID冻结、更新统计信息和更新可见性映射。此外,还探讨了自动vacuum的配置参数,如autovacuum_naptime、autovacuum_vacuum_threshold等。
摘要由CSDN通过智能技术生成


--PG并没有像Oracle那样的undo来存放旧版本;而是将旧版本直接存放于relation文件中。那么带来的问题就是dead tuple过多,导致relation文件不断增大而带来空间膨胀问题。
--为了解决这个问题,PG中引入了vacuum后台进程,专门来清理这些dead tuple,并回缩空间


--创建测试数据
postgres=# create table t (id int ,name varchar(50));
CREATE TABLE
postgres=# insert into t select id,'rudy'|| id from generate_series(1,100) id;


--查询统计信息,可知n_live_tup为100,n_dead_tup为0
postgres=# select relname,n_live_tup,n_dead_tup from pg_stat_user_tables where relname='t';
-[ RECORD 1 ]-----+-------
relid             | 88968
schemaname        | public
relname           | t
seq_scan          | 0
seq_tup_read      | 0
idx_scan          | 
idx_tup_fetch     | 
n_tup_ins         | 100
n_tup_upd         | 0
n_tup_del         | 0
n_tup_hot_upd     | 0
n_live_tup        | 100
n_dead_tup        | 0
last_vacuum       | 
last_autovacuum   | 
last_analyze      | 
last_autoanalyze  | 
vacuum_count      | 0
autovacuum_count  | 0
analyze_count     | 0
autoanalyze_count | 0


--由以下可知,没更新一次,n_dead_tup加1
postgres=# update t set name='dead tuple' where id=1;
UPDATE 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值