对于某些常进行archiver或者 purge操作的表而言,如果我们不定期回收表空间,则表体积会越涨越大。

但是pg自带的 vacuum full 在回收的过程中会阻塞读写操作,不能在生产环境直接运行。

因此,在生产环境 我们常用的表空间收缩工具是pg_squeeze 和 pg_repack。

这里先贴 pg_repack 的用法:

项目地址:  https://github.com/reorg/pg_repack

原理: 新建一个一模一样的影子表,然后拷贝原表的数据,最后rename替换原表。

注意: 待处理的表必须有主键

yum install centos-release-scl-rh
yum install llvm-toolset-7-clangcd /home/postgrestar xf pg_repack-ver_1.4.4.tar.gz export PATH=/usr/local/pgsql-11.5/bin:$PATH   -- 需要载入环境变量,不然编译过程中可能找不到pg_config这个文件cd pg_repack-ver_1.4.4make && make install

另外,会生成一个可执行的文件: /home/postgres/pg_repack-ver_1.4.4/bin/pg_repack

修改配置文件:

vim  /usr/local/pgsql-11.5/data/postgresql.conf

shared_preload_libraries = 'pg_repack'

然后 ,重启pg进程

使用方法:

create database db1;\c db1create extension pg_repack;create table testdata (id integer,course int,grade numeric(4,2),testtime date);
alter table testdata add primary key (id);insert into testdata select generate_series(1,100) as id,10 as course,10.11 as grade,'2017-07-06' as testtime;

然后,我们可以去看下PG datadir物理文件大小从1.1GB涨到了1.6GB了

然后,我们再使用命令 delete from testdata where id between 5000000 and 10000000;  对testdata表删除一半的数据 ,此时可以看到物理文件没有任何缩小。

然后,在外部使用pg_repack对 color表做空间回收:

cd /home/postgres/pg_repack-ver_1.4.4/bin./pg_repack -h 127.0.0.1  --port 5434 -Upostgres -d db1 -t testdata -j 2 -D -k

返回的结果如下(根据实际表的大小,来决定这个结果等待的时长):

NOTICE: Setting up workers.conns

INFO: repacking table "public.testdata"

pg_repack参数说明:

  -a, --all                 repack all databases-t, --table=TABLE         repack specific table only-I, --parent-table=TABLE  repack specific parent table and its inheritors-c, --schema=SCHEMA       repack tables in specific schema only-s, --tablespace=TBLSPC   move repacked tables to a new tablespace-S, --moveidx             move repacked indexes to TBLSPC too-o, --order-by=COLUMNS    order by columns instead of cluster keys-n, --no-order            do vacuum full instead of cluster-N, --dry-run             print what would have been repacked-j, --jobs=NUM            Use this many parallel jobs for each table-i, --index=INDEX         move only the specified index-x, --only-indexes        move only indexes of the specified table-T, --wait-timeout=SECS   timeout to cancel other backends on conflict-D, --no-kill-backend     don't kill other backends when timed out-Z, --no-analyze          don't analyze at end-k, --no-superuser-check  skip superuser checks in client-C, --exclude-extension   don't repack tables which belong to specific extension
Connection options:-d, --dbname=DBNAME       database to connect-h, --host=HOSTNAME       database server host or socket directory-p, --port=PORT           database server port-U, --username=USERNAME   user name to connect as-w, --no-password         never prompt for password-W, --password            force password prompt

我们再去查看物理文件大小,发现PG整个的文件大小又缩回到1.4G了(回收掉的200MB差不多就是一半的testdata表的空间大小)

最后, 我们可以使用脚本定时检测对超过某些阈值的表定时执行 pg_repack 操作,以便回收磁盘空间。

使用pg_repack 回收表体积相关推荐

  1. C语言:设圆的半径用 r 表示,圆柱的高用 h 表示,求圆球的表面积圆球的表体积,圆柱的体积,结果保留 3 位小数,要求有适当的提示

    目录 前言 一.案例 1.输入 2.输出 总结 前言 设圆的半径用 r 表示,圆柱的高用 h 表示,求圆球的表面积圆球的表体积,圆柱的体积,结果保留 3 位小数,要求有适当的提示.(这题一般来说会计算 ...

  2. PostgreSQL 磁盘空间的保护伞 PG_repack VS 表膨胀

    PG 最近的使用中,发现这个数据库确确实实是一个无底洞,东西太多了,但学习一样东西都是通过主干和分支的方式来学习,后续的学习其实有的时候是靠自觉和运气. 今天要说的pg_repack,这个插件,如果您 ...

  3. pg_repack 处理表和索引的膨胀

    os: ubuntu 16.04 db: postgresql 9.6.8 pg_repack: 1.4.4 postgresql 的 vacuum full 需要 access exclusive ...

  4. oracle快速回收表空间,drop user cascade_快速回收表空间大小

    SQL> select file_name,tablespace_name,bytes/1024/1024 mb from dba_data_files where tablespace_nam ...

  5. pg_repack插件安装使用

    pg_repack插件安装使用 获取代码 在 这个链接里 可以选择需要下载的pg_repack版本 wget http://api.pgxn.org/dist/pg_repack/1.4.4/pg_r ...

  6. PostgreSQL空间回收利器——pg_repack

    PostgreSQL的表或索引发生膨胀后,我们可以使用vacuum full的方式来重建表以回收磁盘空间.但是vacuum full需要持有排它锁,会堵塞读操作. 因此一般在生产系统中使用vacuum ...

  7. [原]Oracle删除大表并回收空间的过程

    近日在查询某项日志的时候,发现查询非常缓慢,根据以往的经验这是由于某个日志表过大引起的,为了加快查询,决定将大部分的历史数据迁移到另外一个表中,本文主要记录删除这个大表的过程,就解决问题而言还有很多方 ...

  8. pg_repack --no-order 某个表的过程分析

    pg_repack 某个表 $ pg_repack --wait-timeout 3600 --no-order --table public.tmp_t0 -d peiybdb --echo 分析日 ...

  9. PostgreSQL 收缩膨胀表或索引 - pg_squeeze or pg_repack

    PostgreSQL 收缩膨胀表或索引 - pg_squeeze or pg_repack 作者 digoal 日期 2016-10-30 标签 PostgreSQL , pg_repack , pg ...

最新文章

  1. python网络编程——简单例子
  2. OpenCV下的灰度直方图生成及显示的源码,带详细注释
  3. Abiword对话框资源
  4. C++ 3 基本数据类型
  5. amvu mysql_mysql--数据库备份
  6. mysql的本地id可以随便设置马_MySQL中的账号与权限管理
  7. Spark笔记:RDD基本操作(上)
  8. 【Python基础】11_Python中的字符串
  9. linux给ftp账号分配sftp权限,Linux设置用户通过SFTP访问目录的权限教程
  10. Android 系统(158)---Android O、N 减少占用ROM空间或者加快安装速度
  11. swift linux服务器,Swift on Linux —— Hello, world!
  12. 软件项目管理案例教程期末考试知识点复习(一)软件项目管理概述
  13. RT-Thread的STM32系列外设驱动添加 ---- 以PWM外设为例
  14. C++ 后退前进资源浏览器实现方式,附代码
  15. 微信小程序审核不通过的原因,这里整理了10个最常见的
  16. 游戏图片文件和声音文件的隐藏
  17. 如何把魅族Pro 5刷成Ubuntu手机
  18. 盘点:史上最全数据挖掘方法!我火速收藏!
  19. 百度智能云区块链产品负责人刘尧:Web3.0时代加速区块链到来,具有五大特性...
  20. C++实训练习册(C++之基础语法入门练习题)

热门文章

  1. 2022北京眼博会,中国国际青少年眼健康产业展会,近视矫正展
  2. Go语言-数据结构与算法
  3. 深度学习模型部署-triton
  4. 【Go语言】实现一个简单的纯后端学员管理系统,入门级别练手项目,练习结构体,接口,构造函数
  5. PageHelper 分页的实例
  6. 内存-磁盘混合存储支撑亿级向量近似最近邻搜索(SPANN)
  7. OpenCV从入门到精通——边缘检测算法Canny
  8. 武汉大学计算机学院推荐免试,武汉大学计算机学院2013年应届本科毕业生推荐免试研究生计分细则...
  9. 自动驾驶公交车第 1 部分:车辆运营技术要求
  10. 景联文科技:数据标注如何在人工智能自动驾驶中发挥作用?