文档中心MogDBMogDB StackUqbar
v3.0

文档:v3.0

支持的版本:

其他版本:

pg_repack

pg_repack简介

插件pg_repack用于在线清理表空间,有效解决因对全表大量更新等操作引起的表膨胀问题。pg_repack无需获取排它锁,相比CLUSTER或VACUUM FULL更加轻量化。


pg_repack安装

  1. 访问MogDB下载页面,下载所需版本的pg_repack插件。

  2. 解压插件包,例如:

    tar -xzvf pg_repack-1.4.6-3.1.0-01-CentOS-x86_64.tar.gz
  3. 进入插件所在目录下,执行make install命令。

    cd pg_repack/
    make install
  4. 连接到数据库,执行create extension pg_repack;插件即可使用。

    MogDB=# create extension pg_repack;
    CREATE EXTENSION

pg_repack使用

  1. 连接数据库并且创建用户。

    gsql postgres -r -p 5001
    create user test password 'Test123456' login sysadmin;
  2. 在sql端执行:

    create extension pg_repack;
  3. 在数据库中创建pg_repack表,必须包含主键。

    create table repack_test(id int primary key, name name);
  4. 检查pg_repack是否创建成功。

    \dx
  5. 在repack_test表中插入2000000条数据。

    insert into repack_test select generate_series(1,2000000),'a';
  6. 查询表repack_test的大小。

    select pg_size_pretty(pg_relation_size('repack_test'));
  7. 删除部分数据,然后查询表大小。

    Delete from repack_test where id>1000000;

    删除1000000条数据成功之后,可以看表大小并没有改变。这时需要使用pg_repack工具。

  8. 使用pg_repack工具。

    pg_repack -d postgres -t test.repack_test -h 127.0.0.1 -U test -p 5001

    参数含义:

    • -d dbname

      数据库名

    • -t test.repack_test -h hostip

      服务端IP地址

    • -U user

      用户名

    • -p port

      端口号

    • -e

      输出repack过程中执行的所有SQL

    • -E DEBUG

      设置输出信息的日志级别为DEBUG

    • -a, --all

      repack所有库里的所有表和索引

    • -t, --table=TABLE

      repack指定的单个表

    • -I, --parent-table=TABLE repack

      指定的父表和继承该父表的所有子表

    • -c, --schema=SCHEMA repack

      指定schema下的所有表和索引

    • -s, --tablespace=TBLSPC

      把repack的多个或单个表迁到指定表空间

    • -S, --moveidx

      把repack的索引迁移到指定表空间

    • -o, --order-by=COLUMNS

      用order by columns替换cluster keys

    • -n, --no-order

      执行vacuum full替换cluster

    • -N, --dry-run

      输出repack执行了所有内容

    • -j, --jobs=NUM

      指定并发job数量。如果在处理索引时,插件会根据表的索引数量与-j指定的并发数量,取其中最小值来作为实际的并发job数量。

    • -i, --index=INDEX

      处理指定的索引

    • -x, --only-indexes

      只处理指定表的所有索引

    • -T, --wait-timeout=SECS

      设置后台冲突的生命周期,当有冲突时,超过指定时间只直接结束程序(单位秒)

    • -D, --no-kill-backend

      当插件执行超时,不杀死其他后台进程和线程。

    • -Z, --no-analyze

      在repack处理完表后,不执行analyze table操作

    • -k, --no-superuser-check

      在客户端中跳过超级用户的检查

    • -C, --exclude-extension

      不repack那些属于指定extension的表

    • -e, --echo

      输出插件pg_repack执行的所有sql语句

    • -E, --elevel=LEVEL

      输出对应的日志级别(debug,warning等)

  9. sql查看repack_test表大小,表空间释放成功。

    select pg_size_pretty(pg_relation_size('repack_test'));
Copyright © 2011-2024 www.enmotech.com All rights reserved.