postgresql12表膨胀解决(不锁表)

发布时间:2024年01月24日

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

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

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

文章来源:https://blog.csdn.net/weixin_43169720/article/details/135815491
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。