postgresql12表膨胀解决(不锁表)

本文介绍了如何检查数据库磁盘占用情况,识别出占用空间过大的表,并通过安装和配置pg_repack工具,执行表重构操作来减少空间占用,同时提供了一些关键命令和参数的使用说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看所有数据库占用磁盘空间

SELECT
  pg_database.datname AS "数据库名称",
  pg_size_pretty(pg_database_size(pg_database.datname)) AS "磁盘占用空间"
FROM
  pg_database;

发现有个数据库占用空间过大
在这里插入图片描述

查询库中所有表占用空间

SELECT
  table_name,
  pg_size_pretty(total_size) AS total_size
FROM (
  SELECT
    table_name,
    pg_total_relation_size(table_name::regclass) AS total_size
  FROM
    information_schema.tables
  WHERE
    table_schema = 'public' -- 你的数据库架构,通常是'public'
) AS table_sizes
ORDER BY
  total_size DESC;

发现有两张表超大,与实际数据量不符
在这里插入图片描述

安装pg_repack

yum install pg_repack12.x86_64

修改pg配置postgresql.conf

shared_preload_libraries = 'pg_repack'

重启pg
在数据库中创建扩展

CREATE EXTENSION pg_repack;

测试使用

/usr/pgsql-12/bin/pg_repack -h 10.10.33.14 -U postgres --dry-run -d test_db --table tset_table

如下则表示可以使用
在这里插入图片描述
尝试使用

/usr/pgsql-12/bin/pg_repack -h 10.10.33.14 -U postgres --no-kill-backend --wait-timeout=3600 -d test_db --table test_table

在云RDS中使用

在云数据库中部分云厂商出于安全考虑未开放superuser,所以这里使用的时候需要加上参数 –no-superuser-check

常用参数

参数说明
–echo输出过程信息
–no-superuser-check跳过superuser检查
–wait-timeout超时等待(秒)
–no-kill-backend超时时不要杀死其它后台

关于参数介绍,可以参考pg_repack 1.5.0 – Reorganize tables in PostgreSQL databases with minimal locks

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_43169720

如果本文对你有所帮助,请打赏—

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值