1.pg_repack是一个可以在线重建表和索引的扩展。它会在数据库中建立一个和需要清理的目标表一样的临时表,将目标表中的数据COPY到临时表,并在临时表上建立与目标表一样的索引,然后通过重命名的方式用临时表替换目标表

os:centos 7.4

数据库:postgresql 10.5

pg_repack-1.4.6

2.安装

[postgres@node1 ~]$ unzip pg_repack-1.4.6.zip
[postgres@node1 ~]$ ll
total 248
drwxrwxr-x 8 postgres postgres    184 Oct  4  2019 pg_repack-1.4.6
-rwxr--r-- 1 postgres postgres 125523 May 28 15:23 pg_repack-1.4.6.zip
[postgres@node1 ~]$ cd pg_repack-1.4.6/
[postgres@node1 pg_repack-1.4.6]$ ll
total 16
drwxrwxr-x 3 postgres postgres   71 Oct  4  2019 bin
-rw-rw-r-- 1 postgres postgres 1662 Oct  4  2019 COPYRIGHT
drwxrwxr-x 2 postgres postgres  121 Oct  4  2019 doc
drwxrwxr-x 3 postgres postgres  139 Oct  4  2019 lib
-rw-rw-r-- 1 postgres postgres 1616 Oct  4  2019 Makefile
-rw-rw-r-- 1 postgres postgres 1285 Oct  4  2019 META.json
drwxrwxr-x 2 postgres postgres  219 Oct  4  2019 msvc
-rw-rw-r-- 1 postgres postgres 2201 Oct  4  2019 README.rst
drwxrwxr-x 4 postgres postgres   96 Oct  4  2019 regress
drwxrwxr-x 2 postgres postgres   54 Oct  4  2019 SPECS
[postgres@node1 pg_repack-1.4.6]$ makepostgres@node1 pg_repack-1.4.6]$ psql
psql (12.2)
Type "help" for help.postgres=# create extension pg_repack;
CREATE EXTENSION
postgres=# \dnList of schemasName    |  Owner
------------+----------public     | postgresrepack     | postgrestbase      | postgrestbase_pgxz | tbase
(4 rows)postgres=# \dxList of installed extensionsName    | Version |   Schema   |                         Description
-----------+---------+------------+--------------------------------------------------------------pg_repack | 1.4.6   | public     | Reorganize tables in PostgreSQL databases with minimal locksplpgsql   | 1.0     | pg_catalog | PL/pgSQL procedural language
(2 rows)

测试:

--安装pgstattuple模块(提供多种函数来获得元组层的统计信息) postgres=# create extension pgstattuple;
CREATE EXTENSION--建测试表(表必须有主键或者唯一约束)postgres=# create table repack_test(id int primary key ,name varchar(10));
CREATE TABLEpostgres=# \d repack_testTable "public.repack_test"Column |         Type          | Collation | Nullable | Default
--------+-----------------------+-----------+----------+---------id     | integer               |           | not null | name   | character varying(10) |           |          |
Indexes:"repack_test_pkey" PRIMARY KEY, btree (id)--插入测试数据
postgres=# insert into repack_test select generate_series(1,50000000),'a';
INSERT 0 50000000--用pg_stattuple查看表情况
postgres=# select * from pgstattuple('repack_test');table_len | tuple_count | tuple_len | tuple_percent | dead_tuple_count | dead_tuple_len | dead_tuple_percent | free_space | free_percent
-----------+-------------+-----------+---------------+------------------+----------------+--------------------+------------+--------------181239808 |     5000000 | 150000000 |         82.76 |                0 |              0 |                  0 |     620336 |         0.34
(1 row)--查看表大小postgres=# \dt+ repack_testList of relationsSchema |    Name     | Type  |  Owner   |  Size  | Description
--------+-------------+-------+----------+--------+-------------public | repack_test | table | postgres | 173 MB |
(1 row)--更新数据postgres=# update repack_test set name ='b' where id<2500000;
UPDATE 2499999--再用pg_stattuple查看表情况
postgres=# select * from pgstattuple('repack_test');table_len | tuple_count | tuple_len | tuple_percent | dead_tuple_count | dead_tuple_len | dead_tuple_percent | free_space | free_percent
-----------+-------------+-----------+---------------+------------------+----------------+--------------------+------------+--------------271859712 |     5000000 | 150000000 |         55.18 |          2499999 |       74999970 |              27.59 |     930540 |         0.34
(1 row)--在此执行pg_repack
[postgres@node1 contrib]$ pg_repack -p 5432 -d postgres --no-order --table repack_test
INFO: repacking table "public.repack_test"
--再用pg_stattuple查看表情况
postgres=# select * from pgstattuple('repack_test');table_len | tuple_count | tuple_len | tuple_percent | dead_tuple_count | dead_tuple_len | dead_tuple_percent | free_space | free_percent
-----------+-------------+-----------+---------------+------------------+----------------+--------------------+------------+--------------271859715 |     5000000 | 150000000 |         82.76 |                0 |              0 |                  0 |     620336 |         0.34
(1 row)

在线pg_repack

repack数据库

postgres@node1 contrib]$ pg_repack -p 5432 -d postgres --no-order --jobs 4  --elevel=info

repack模式

 pg_repack -p 5432 -d postgres --schema=public --no-order --jobs 4  --elevel=info

repack表和索引

pg_repack -p 5432 -d postgres --no-order --table public.repack_test --elevel=info

repack所有索引

pg_repack -p 5432 -d postgres --no-order --only-indexes --table public.repack_test --elevel=info

repack指定索引

 pg_repack -p 5432 -d postgres  --index public.repack_test_pkey --elevel=info

参考文章

https://www.cnblogs.com/zhangfx01/archive/2004/01/13/14267667.html

pg_repack安装及使用相关推荐

  1. PG之pg_repack使用

    简介 pg_repack is a PostgreSQL extension which lets you remove bloat from tables and indexes, and opti ...

  2. pg_repack插件安装使用

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

  3. centos7 安装pg_repack

    1. 安装依赖库: yum -y install postgresql-devel yum -y install postgresql-static 2. 下载源码包并解压进入 wget http:/ ...

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

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

  5. 使用pg_repack实现在线vacuum

    Postgresql通过数据多版本实现mvcc,删除数据并不会真正删除数据,而是修改标识,更新是通过删除+插入的方式进行,所以在频繁更新的系统,数据膨胀是个头疼的问题,如果不进行处理,数据膨胀倍数可能 ...

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

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

  7. postgresql垃圾清理插件pg_repack

    pg_repack插件部署: wget http://api.pgxn.org/dist/pg_repack/1.4.5/pg_repack-1.4.5.zip source /home/postgr ...

  8. postgres数据库表空间收缩之pg_squeeze,pg_repack

    #数据库表空间收缩之pg_squeeze,pg_repack 文章目录 pg_squeeze1.2 原理 优点 安装 使用 pgstattuple 临时处理 监控方式 注意事项 squeeze1.2和 ...

  9. pg_repack bloat 处理测试初步

    一.软件安装 1.软件需求: postgresql-9.5.2.tar.gz pg_repack-1.3.4.zip 2.安装pg_repack [root@localhost pg_repack-1 ...

最新文章

  1. mysql 存储过程 获取错误,MySQL存储过程相互调用并获得错误码示例
  2. NYOJ-14 会场安排问题(经典贪心,区间完全不覆盖模板)
  3. 在Golang中使用Protobuf
  4. 使用maven创建web项目
  5. 2021年Node.js开发人员学习路线图
  6. linux mysql 开发_Linux64下mysql安装和开发
  7. 成都拓嘉启远电商:拼多多单号批量导入如何操作
  8. 浪潮服务器销售案例ppt,浪潮服务器上架安装.ppt
  9. 沉没成本效应:每个人终其一生的断舍离
  10. tokenize java,Java split string - Java tokenize string examples - 入门小站-rumenz.com
  11. Python之NumPy(axis=0/1/2...)的透彻理解——通过np.sum(axis=?)实例进行说明
  12. 通配符的匹配很全面, 但无法找到元素 ‘aop:aspectj-autoproxy‘ 的声明
  13. pycharm-03-工程结构
  14. 海康摄像机接入NVR后怎么会自动变成H.265
  15. 首都经贸计算机考研怎么样,【考研心路历程】首都经贸大学考研的回忆与感悟...
  16. 最小二乘法入门(Matlab直线和曲线拟合)
  17. Get智能写作 | 掌握这5个小技巧,让你的写作飞起来
  18. LCA(包含RMQ)
  19. 如何找回删除的文件?这个实用的小技巧可以解决
  20. 【SLM6550】 2A同步降压型锂电池充电电路

热门文章

  1. Invalid configuration of tez jars, tez.lib.uris is not defined in the configuration
  2. scrum 和敏捷介绍(概念、流程、自己的理解)
  3. 树莓派+SSH反向代理实现远程开机
  4. Ubuntu如何把主文件夹的中文设置成英文
  5. DC-4靶场练习—teehee提权
  6. 新书推荐 | 供应链质量防线:供应商质量管理的策略、方法与实践
  7. 论坛php 图片上传,Discuz! X3 论坛文件图片上传尺寸:小于2M的修改方法
  8. rs485接口上下拉_RS-485总线为什么要加上拉下拉电阻?如何选择RS485的上下拉电阻?...
  9. Python中的string和bytes的转换
  10. Excel隔行插入空白行小技巧