首页 > 其他分享 >9.PG表的磁盘碎片清理

9.PG表的磁盘碎片清理

时间:2023-12-24 14:33:18浏览次数:33  
标签:test1 last postgres tup 清理 PG size 磁盘碎片 pg

1.磁盘碎片

  • 在PG中删除行时,这些行为只是被标记为 'dead' , 并不是真正从物理存储上进行删除,因为空间也没有被释放回收。
  • 在PG中,除非进行自动的清理(vacuum)或者手工的清理,否则数据块所占用的物理空间是不会释放,在物理存储空间被回收之前,会导致存储空间中存在很多空洞。
  • 大量的更新操作会产生文件碎片化,PG最小逻辑存储分配单位是数据块,默认是8KB,因此,大量的更新操作也可能导致数据块的分裂(Block split),这个和mysql是一样的,即同一字段的数据可能存在不同的数据块中。
  • 频繁的数据分裂会使数据的存储变得稀疏,并且被不规则的数据填充,所以最终数据会有磁片。

2.示例:

#1.创建一张test1表
postgres=# create table test1(tid int,tname varchar(20)); CREATE TABLE#2.插入500w数据 postgres=# insert into test1 select n,'myname_'||n from generate_series(1,5000000) n; INSERT 0 5000000
#3.查看这张表的大小,有 2488MB
postgres=# select pg_size_pretty(pg_relation_size('test1')); pg_size_pretty ---------------- 2488 MB (1 row) #4.delete删除这张表的数据 postgres=# delete from test1; DELETE 50000000#5.再次查看这种表的大小,发现还是249MB,说明 delete时只是打了一个删除标记,但是数据并没有实际被删除。 postgres=# select pg_size_pretty(pg_relation_size('test1')); pg_size_pretty ---------------- 2488 MB (1 row)

5.再看看这个表的状态信息

postgres=# select * from pg_stat_user_tables where relname='test1';
-[ RECORD 1 ]-------+------------------------------
relid               | 16397
schemaname          | public
relname             | test1
seq_scan            | 28
last_seq_scan       | 2023-12-24 14:22:20.928472+08
seq_tup_read        | 55000005
idx_scan            | 
last_idx_scan       | 
idx_tup_fetch       | 
n_tup_ins           | 84832533
n_tup_upd           | 0
n_tup_del           | 55000000
n_tup_hot_upd       | 0
n_tup_newpage_upd   | 0
n_live_tup          | 12674745   #表示当前表的数据量,
n_dead_tup          | 37325572   #表示为回收的空间
n_mod_since_analyze | 0
n_ins_since_vacuum  | 0
last_vacuum         | 
last_autovacuum     | 2023-12-24 14:21:54.68686+08
last_analyze        | 
last_autoanalyze    | 2023-12-24 14:22:34.001211+08
vacuum_count        | 0
autovacuum_count    | 5
analyze_count       | 0
autoanalyze_count   | 2

由n_dead_tup的输出结果可知,test1表仍然占用了很多'空闲'数据块,其空间没有被回收。

6.手工进行碎片的清理。

postgres=# vacuum test1;
VACUUM

7.再次查看test1表的状态信息

postgres=# analyze test1;
ANALYZE
postgres=#  select * from pg_stat_user_tables where relname='test1';
-[ RECORD 1 ]-------+------------------------------
relid               | 16397
schemaname          | public
relname             | test1
seq_scan            | 29
last_seq_scan       | 2023-12-24 14:27:51.948177+08
seq_tup_read        | 55000005
idx_scan            | 
last_idx_scan       | 
idx_tup_fetch       | 
n_tup_ins           | 84832533
n_tup_upd           | 0
n_tup_del           | 55000000
n_tup_hot_upd       | 0
n_tup_newpage_upd   | 0
n_live_tup          | 0   #这里发现为0
n_dead_tup          | 0   #这里发现为0
n_mod_since_analyze | 0
n_ins_since_vacuum  | 0
last_vacuum         | 2023-12-24 14:26:58.599143+08
last_autovacuum     | 2023-12-24 14:21:54.68686+08
last_analyze        | 2023-12-24 14:28:43.193874+08
last_autoanalyze    | 2023-12-24 14:22:34.001211+08
vacuum_count        | 1
autovacuum_count    | 5
analyze_count       | 1
autoanalyze_count   | 2

8.查看test1表大小

postgres=# select pg_size_pretty(pg_relation_size('test1'));
-[ RECORD 1 ]--+--------
pg_size_pretty | 0 bytes

 

  

  

标签:test1,last,postgres,tup,清理,PG,size,磁盘碎片,pg
From: https://www.cnblogs.com/zmc60/p/17924370.html

相关文章

  • 【论文精读#1】SPGAN-DA:用于领域自适应遥感图像语义分割的语义保留生成对抗网络
    作者:YanshengLi发表年代:2023使用的方法:无监督领域自适应(UDA)、GAN、ClassMix、边界增强来源:IEEETGRS方向:语义分割期刊层次:CCFB;工程技术1区;IF8.2文献链接:https://doi.org/10.1109/TGRS.2023.3313883LiY,ShiT,ZhangY,etal.SPGAN-DA:Semantic-Pres......
  • 7.PG的控制文件
    控制文件控制文件记录了数据库运行时的一些信息,如数据库OID,是否为打开状态,预写日志的位置、检查点的信息等。控制文件位置默认保存在$PGDATA/global目录下,pg_control这个就是。控制文件内容[postgres@iZwz909xeqcc7ouqk8528zZ16]$pg_controldatapg_control......
  • GPG实践
    作业要求参考http://www.ruanyifeng.com/blog/2013/07/gpg.html,给队友发送一封邮件,邮件内容为自己学号+对方学号,用对方公钥加密,然后对方用自己私钥解密。提交安装,加密,解密过程中的截图。下载GPG下载windows版本创建密钥使用密钥加密对方的解密......
  • 6.PG数据库管理
    1.PG数据库库属主PG中的数据库属主属于创建者,只要有cretedb权限就可以创建数据库,数据库属主不一定拥有存放在该数据库中其它用户创建的对象的访问权限。数据库在创建后,允许public角色连接,即允许任何人连接数据库在创建后,不允许除了超级用户和owner之外的任何人在数据库中创建s......
  • 最大工作频率为32MHz,R7F100GPL2DFA、R7F100GPL3CFA低功耗MCU,10M08SAU169C8GGB MAX® 1
    一、RL78/G23 新一代RL78微控制器,最大工作频率为32MHz,外围功能得到进一步扩展,低功耗性能也有所提升。RL78/G23微控制器是RL78系列的新一代产品,CPU工作时的功耗为41μA/MHz,STOP(保持4KBSRAM)时的功耗为210nA,其低功耗在业内首屈一指。此外,由于采用SNOOZE模式定序器,它还能大幅度减少......
  • Unity最新一键清理Prefab中所有MissingComponent
    因为老的API Properties.DeleteArrayElementAtIndex(propertyIndex);提示没权限修改,而unity提供了新的API GameObjectUtility.RemoveMonoBehavioursWithMissingScript(go);更方便移除丢失的组件,需要遍历物体下面所有子节点,否则无法移除子节点的丢失组件。于是重新整理了下......
  • 源码安装pgsql16.1
    源码安装pgsql16.1进入postgresql官网下载源码包postgresql源码包下载地址这里以目前最新的pgsqlv16.1为例创建组:postgresgroupaddpostgres创建用户postgres并加入组postgres中useradd-gpostgrespostgres解压源码包tar-xfpostgresql-16.1.tar.gz进入解压后的目......
  • helm secrets 和 gpg 使用
    相关链接https://github.com/jkroepke/helm-secretshttps://github.com/getsops/sops涉及命令#macinstallgpgbrewinstallgpg#生成gpgkeyexportKEY_NAME="TiexinGuo"exportKEY_COMMENT="testkeyforsops"gpg--batch--full-generate-key<......
  • GPG实践
    1.创建我的公钥和私钥2.队友接收到我的公钥文件3.队友利用我的公钥进行加密4.接受队友加密过的文件5.用我自己的私钥进行解密......
  • GPG实践
    ......