pg_repack插件部署:

wget http://api.pgxn.org/dist/pg_repack/1.4.5/pg_repack-1.4.5.zip
source /home/postgres/.bash_profile
make
make install

create extension pg_repack;--到指定数据库下执行

Postgresql通过数据多版本实现mvcc,删除数据并不会真正删除数据,而是修改标识,更新是通过删除+插入的方式进行,所以在频繁更新的系统,数据膨胀是个头疼的问题,如果不进行处理,数据膨胀倍数可能达到十几倍。为了处理膨胀问题,pg提供了vacuum工具,vacuum分为普通vacuum(共享锁)和vacuumfull(排它锁),普通vacuum会清理死元组,但是不会进行空间重组,磁盘上的空间不会释放,但是会释放死元组的空间,后续插入的元组会根据空闲空间管理fsm优先插入空闲空间。Vacuum full清理会释放磁盘空间,但是会获取八级锁,因为vacuum full的原理是新建一个表数据文件,然后从老表中拷贝数据到新文件中,这个过程会阻塞select。因为影响业务,pg社区开发了pg_repack工具,老版本叫pg_reorg。Pg_repack以extension的方式存在,用户可以自己安装该插件。本文简单介绍一下pg_repack的使用。

经过测试,在执行pg_repack的同时对表进行并发查询,性能下降大概只有10%到20%,读取操作可以正常进行。并且表的oid没有发生变化,repack执行完成后,通过pg_relation_filepath()函数查询发现表的数据文件发生了改变,同时会删除原来的数据文件,其实执行vacuum full数据文件也会发生改变。

repack原理:

下面聊聊repack的原理吧,原理其实和vacuum full是类似的,都是新建一个文件,然后将老文件数据拷贝过来,然后进行文件切换,它不阻塞读写的秘诀就是新建文件和拷贝的过程是在线做的,在没有完成拷贝之前,原来的文件还是可以读写的,只有在切表那一瞬间可能会有影响。那么它是怎么做到在线拷贝的呢?源库的数据文件一直在变,所以表文件其实分为两部分,一部分是基础数据,一部分是增量数据,基础数据的拷贝就是正常的拷贝,增量数据是通过创建触发器来捕获在该表上的读写操作来实现的,待基础数据拷贝完后再将trigger捕获的增量sql进行应用,达到最终结果。

我们其实可以发现,pg_repack会在库里创建名为repack的schema,里面有两张表:primary_keys和tables。Primarys分为两列,第一列indrelid代表表的oid,第二列indexrelid代表主键或唯一索引的oid。Tables表记录了创建trigger以及捕获的相关语句,语句按一条条的record进行记录。

下面我们就是要模拟一个表膨胀的案例,然后再用 pg_repack 来解决一些问题

1  我们在postgres 数据库中创建一张表

CREATE TABLE test (id serial primary key,num1 bigint, num2 double precision, num3 double precision);

2 插入测试数据

INSERT INTO test (num1, num2, num3)

SELECT round(random()*10), random(), random()*142

FROM generate_series(1, 2000000) s(i);
  
下面我们就开始进行一个表膨胀的操作,我们开启两个事物

1第一个事物往表里面在插入 200万的数据

2 第二个事物更新表里面的某个字段的值

补充:oid2name -d d2 -t test      oid2name -d d2 -f 文件名  -x

repack应用:

pg_repack  -d postgres --table public.test;

补充用法:

pg_repack --no-order --table test_1 test
pg_repack --wait-timeout 3600 --jobs 10 --no-order -d test
pg_repack --wait-timeout 3600 --jobs 10 --no-order --schema=test -d test
pg_repack --wait-timeout 3600 --jobs 10 --only-indexes --table test.test_1 --no-order -d test
pg_repack --wait-timeout 3600 --jobs 10 --index test.idx1 --no-order -d test

这相当于重新写了一个新的文件,将原来的物理文件踢掉,重新对表进行了一次整理。那这样的好处不光是表的占用空间变小了,收益的还有访问表的速度也会更快。最后这个命令还可以并行运行,后面加参数 J 和你的并行数。

postgresql垃圾清理插件pg_repack相关推荐

  1. C++语言学习笔记15:Clean 垃圾清理插件

    C++语言学习笔记15:Clean 垃圾清理插件 对话框 STET1 图片切换功能 导入位图资源 插入图片控件并修改属性 添加消息处理函数 step2 开发思路及类关系图 step3 添加控件及MFC ...

  2. sublime text3 运行lua_[电脑常识] 用这4个系统垃圾清理软件,让电脑操作系统运行如飞 !...

    电脑经过长时间的运行,便会产生大量的系统垃圾,如果不及时进行清理,电脑运行速度就会越来越慢,甚至会威胁到操作系统的安全.由于操作系统产生的系统垃圾不但数量多,而且种类复杂,如果用手工清理,那将是一件十 ...

  3. cleanmymac苹果电脑必备mac系统垃圾清理工具分享

    电脑系统垃圾太多,影响使用效率,有哪些好用的mac系统垃圾清理工具值得入手呢?小编整理的几款简单好用的分享给大家,需要的拿走,小白必备,mac系统垃圾清理工具分享. 相信不少的小伙伴都在用苹果电脑,C ...

  4. 精品软件推荐 CCleaner中文版 好用的系统垃圾清理工具

    cc清理器ccleaner中文版是一款好用的系统垃圾清理工具,可以从您的系统中清除无用的文件和垃圾信息!ccleaner中文版可以让您的 Windows 运行更快.效率更高.释放出更多的硬盘空间.小巧 ...

  5. 垃圾清理软件 CCleaner 5.59 绿色便携优化版

    本文转载至[爱编程]博客,欢迎去原博客网站支持博主 CCleaner 是一款由梨子公司(Piriform)开发的系统优化和隐私保护软件,不仅在国外有很多用户,而且在中国也有很多人使用.它可以删除Win ...

  6. Cleanmymac x最新版Mac个人电脑垃圾清理软件工具

    Cleanmymac x最新版是一个非常有效和广泛的程序来清洁您的Mac个人电脑垃圾清理小工具.这提供了许多方便清洁的功能,优化 还有你的Mac个人电脑程序.它可以保持你的Mac和Macizo几乎都是 ...

  7. 管家婆之垃圾清理功能

    闲暇之余终于完成了"垃圾清理功"能主要框架和对windows垃圾文件的搜索和清,.浏览器缓存和视频软件存储垃圾文件逻辑还未实现. 通过插件系统挂接上"垃圾清理" ...

  8. win7 html 插件,win7系统清理插件的三种方法

    近期好多网友询问说win7系统怎么清理插件?我们在使用网络软件和插件时,可以带来很多便利.但是使用过程中会不可避免的安装一些不必要的电脑插件,甚至是恶评插件,这对电脑安全构成威胁.所以我们要清理一些无 ...

  9. CleanMyMac4.11.3macOS系统垃圾清理应用

    CleanMyMac X是一款知名的专业Mac系统软件工具,拥有一键智能扫描Mac系统缓存.删除系统垃圾和恶意软件,并让 Mac 恢复高效运行. CleanMyMac 是由推出了 Macpaw 出品的 ...

最新文章

  1. C++ link2005 error 错误 解决方法汇总(一般重复定义,如果都是不就是 函数定义和实现没有分离)...
  2. 这年头,老赖没得混了!大数据式追债,你见过吗?
  3. MS SQL 2008 发布订阅配置错误总结
  4. 数据结构:单链表操作之如何判断链表是否带环及相关操作
  5. html文件设置断点调试,断点调试
  6. 【JAVA实例】代码生成器的原理讲解以及实际使用
  7. win10安装vbox没有虚拟网卡_消失的虚拟网卡
  8. grpc(5):使用grpc+consul 开发服务调用
  9. JDK1.8 List转Map
  10. 报修管理系统微信小程序源码
  11. google地图瓦片地址
  12. Android流量统计分析
  13. Outlook_Hotkey
  14. 机器学习中处理缺失值的7种方法
  15. 如何利用阿里云市场购买并使用短信服务
  16. google::protobuf::Closure::Run
  17. Collaborative Spatiotemporal Feature Learning for Video Action Recognition 论文笔记
  18. 130-Vue中的监听事件——Watch
  19. 使用Plink对SNP数据进行质量控制
  20. vba的change事件

热门文章

  1. 自动驾驶测试中的场景构建
  2. Vocabulary and Phrase in Paper of Computer Vision (Updating)
  3. 由浅入深配置webpack4
  4. 现在人工智能自动修复老照片的效果有好?
  5. 第一章:计算机的软硬件基本结构_4
  6. 数字计算机之父——冯·诺依曼
  7. 选购国外虚拟主机的一些心得体会
  8. Fleck webSocket
  9. Mac运行exe的几种方法,欢迎补充!
  10. Google首页电吉他Doodle源代码