首页 > 数据库 >RDS的PG数据库删除数据后表空间不释放问题处理

RDS的PG数据库删除数据后表空间不释放问题处理

时间:2023-05-09 15:56:53浏览次数:51  
标签:后表 插件 RDS -- repack 索引 PG 原表 pg

清理表空间(pg_repack)

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

前提条件

RDS实例需要满足以下条件:

实例大版本 内核小版本
PostgreSQL 10、11、12或13 20210331及以上
PostgreSQL 14或15 20221030及以上

说明 查看和升级内核小版本,请参见升级内核小版本

注意事项

  • pg_repack需要额外的存储空间。全表repack时,剩余存储空间大小需要至少是待repack表大小的2倍。
  • pg_repack无法操作临时表。
  • pg_repack无法操作GiST索引。
  • pg_repack运行时无法对repack操作中的表执行DDL。pg_repack会持有ACCESS SHARE锁,禁止DDL执行。
  • 重建表和索引时会占用较多的磁盘IO,使用时请提前评估是否影响业务。以ESSD PL1云盘为例,repack 100GB的表时,会达到IO吞吐上限(250MB/s)。

功能介绍

pg_repack插件支持全表repack和索引repack。

  • 对整表数据进行repack的实现原理如下:

    1. 创建日志表记录对原表的变更。
    2. 在原表创建触发器,将原表的INSERT、UPDATE和DELETE操作记录到日志表中。
    3. 创建新表,与原表的行列相同。
    4. 在新表中创建索引。
    5. 将日志表里的变更应用到新表。
    6. 在system catalog交换新旧表。
    7. 删除旧表。

    说明 pg_repack会在第1、2步和第6、7步短暂持有ACCESS EXCLUSIVE锁。其余步骤pg_repack只需要持有原表的ACCESS SHARE锁,不影响原表的INSERT、UPDATE和DELETE。

  • 对表中索引进行repack的实现原理如下:

    1. 以CONCURRENTLY方式创建新索引。
    2. 在system catalog交换新旧索引。
    3. 删除旧索引。

插件开启与关闭

说明 请使用高权限账号执行如下命令。

  • 开启插件。

    CREATE EXTENSION pg_repack;   #经测试只对单个具体数据库生效
    
  • 关闭插件。

    DROP EXTENSION pg_repack;
    

安装客户端

pg_repack插件需要配合客户端使用,以ECS Alibaba Cloud Linux 3.2104及以上版本为例,参考以下命令:

  1. 安装环境依赖。

    sudo yum install postgresql* redhat-rpm-config libpq* openssl-devel readline-devel -y
    
  2. 添加环境变量。

    export PATH=$PATH:/usr/lib64/pgsql/postgresql-12/bin
    
  3. 下载pg_repack客户端并编译安装。

    wget https://github.com/reorg/pg_repack/archive/refs/tags/ver_1.4.6.tar.gz
    tar zxvf ver_1.4.6.tar.gz
    cd pg_repack-ver_1.4.6
    make && make install
    

使用示例

-- 检查但不执行:--dry-run
pg_repack --dry-run --no-superuser-check --echo --no-order -h 连接串 -p 端口 -d database1 -U user --table schema1.table1

-- 检查并执行
pg_repack  --no-superuser-check --echo --no-order -h 连接串 -p 端口 -d database1 -U user --table schema1.table1

常见问题

Q:报错“ERROR: pg_repack failed with error: You must be a superuser to use pg_repack”。

A:请使用-k或--no-superuser-check,避免没有权限。

重要 全表repack时,无法通过此方式拥有权限。

相关参考

pg_repack的详细说明可参考pg_repack官方帮助文档
本文参考阿里云官方文档:https://help.aliyun.com/document_detail/212985.html?spm=5176.smartservice_service_robot_chat_new.help.dexternal.4ceb709aEanDJ8

标签:后表,插件,RDS,--,repack,索引,PG,原表,pg
From: https://www.cnblogs.com/pgyLang/p/17385361.html

相关文章

  • PG系、Oracle、MySQL数据库在特定场景下结果差异分析
    PG系、Oracle、MySQL数据库在特定场景下结果差异分析作者:余从佳更新时间:2022-07-0110:52人气值:416 本文主要介绍以PolarDBO引擎、ADBPG为代表的PG系数据库在某种特定事务场景下,其事务结果与Oracle、MySQL不同的现象,并分析该现象出现的原因。一、数据初始化 Cr......
  • 基于FPGA的FSK调制解调系统verilog开发
    1.算法仿真效果VIVADO2019.2仿真结果如下:  2.算法涉及理论知识概要      频移键控是利用载波的频率变化来传递数字信息。数字频率调制是数据通信中使用较早的一种通信方式,由于这种调制解调方式容易实现,抗噪声和抗衰减性能较强,因此在中低速数字通信系统中得到了较......
  • CodeForces - 626B Cards (全排列&模拟)
    TimeLimit: 2000MS MemoryLimit: 262144KB 64bitIOFormat: %I64d&%I64uCodeForces-626BCardsSubmit StatusDescriptionCatherinehasadeckof ntakeanytwo(notnecessarilyadjacent)cardswithdifferentcolorsandexchangethemforanewcardof......
  • PG数据库生态选型思路与最佳实践
    PG数据库生态选型思路与最佳实践2021-03-29 1157举报简介: PG数据库生态选型思路与最佳实践内容简要:1. 数据库发展的趋势2. 传统企业级数据库选型3. 数据库迁移的最佳实践4. 数据库迁移至PG整体解决方案   第一部分--数据库的发展趋势 数据库......
  • 部署repmgr PG14集群<无autofailover>
    系统环境OS:CentOS7192.168.56.11node1192.168.56.12node2部署操作流程1.系统环境初始化echoredhat|passwdroot--stdinecho-e"192.168.56.11node1">>/etc/hostsecho-e"192.168.56.12node2">>/etc/hostsse......
  • thinkphp使用pgsql,提示table_msg函数缺失的解决方法
    thinkphp使用pgsql,提示table_msg函数缺失的解决方法 打开navicate,打开查询,执行下面代码就可以解决:CREATEORREPLACEFUNCTIONpgsql_type(a_typevarchar)RETURNSvarcharAS$BODY$DECLAREv_typevarchar;BEGINIFa_type='int8'THENv_type:......
  • pgadmin4中view/edit data列名称右侧有小锁图标导致不能修改数据。
    pgadmin4中,view/editdata之后数据列名称旁边有个小锁的图片,导致不能修改数据。解决方法:之前创建表时没有primarykey,表加上primarykey即可,之后列名称之后的小图标变成了一支笔。例CREATETABLEjoe.tb1(idint,c1varchar(128),constraintpk_tb1_idprimarykey(id));......
  • pg_statistic系统表主键冲突
    pg_statistic系统表主键冲突报错信息1、数据库报错如下错误23505重复键违反唯一约束"pg_statistic_relid_att_inh_index"键值"(starelid,staattnum,stainherit)=(18413,1,f)"已经存在  对表"db_sqlfx.public.t_sql_project"进行自动清理报错原因:pg_statistic索引......
  • MASA MinimalAPI源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口
    源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口1.ServiceBase1.AutoMapRoute源码如下:AutoMapRoute自动创建map路由,MinimalAPI会根据service中的方法,创建对应的api接口。比如上文的一个方法:publicasyncTask<WeatherForecast[]>PostWeather(){re......
  • Xilinx Artix-7系列 FPGA器件XC7A100T-1FGG484I、XC7A200T-L2FFG1156E现场可编程门阵
    产品简介:Xilinx®Artix-7系列FPGA重新定义了成本敏感型解决方案,功耗比上一代产品降低了一半,同时为高带宽应用提供一流的收发器和信号处理能力。这些设备基于28纳米HPL工艺构建,提供一流的性能功耗比。与MicroBlaze™软处理器一起,Artix-7FPGA非常适用于便携式医疗设备、......