第一步:查询哪些表占用空间太大:

--数据库中单个表的大小(不包含索引)
select pg_size_pretty(pg_relation_size('表名'));--查出所有表(包含索引)并排序
SELECT table_schema || '.' || table_name AS table_full_name, pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS size
FROM information_schema.tables
ORDER BY
pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC limit 20--查出表大小按大小排序并分离data与index
SELECT
table_name,
pg_size_pretty(table_size) AS table_size,
pg_size_pretty(indexes_size) AS indexes_size,
pg_size_pretty(total_size) AS total_size
FROM (
SELECT
table_name,
pg_table_size(table_name) AS table_size,
pg_indexes_size(table_name) AS indexes_size,
pg_total_relation_size(table_name) AS total_size
FROM (
SELECT ('"' || table_schema || '"."' || table_name || '"') AS table_name
FROM information_schema.tables
) AS all_tables
ORDER BY total_size DESC
) AS pretty_sizes

第二:使用VACUUM对表空间进行回收

vacuum table_xx

名称

VACUUM -- 垃圾收集以及可选地分析一个数据库

语法

VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table ]
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ table [ (column [, ...] ) ] ]

描述

VACUUM 回收已删除行占据的存储空间。在一般的 PostgreSQL 操作里,那些已经 DELETE 的行或者被 UPDATE 过后过时的行并没有从它们所属的表中物理删除;在完成 VACUUM 之前它们仍然存在。因此有必须周期地运行 VACUUM ,特别是在经常更新的表上。

如果没有参数,VACUUM 处理当前数据库里每个表,如果有参数,VACUUM 只处理那个表。

VACUUM ANALYZE 先执行一个 VACUUM 然后是给每个选定的表执行一个 ANALYZE 。对于日常维护脚本而言,这是一个很方便的组合。参阅 ANALYZE 获取更多有关其处理的细节。

简单的 VACUUM(没有 FULL)只是简单地回收空间并且令其可以再次使用。这种形式的命令可以和对表的普通读写并发操作,因为没有请求排他锁。VACUUM FULL 执行更广泛的处理,包括跨块移动行,以便把表压缩到最少的磁盘块数目里。这种形式要慢许多并且在处理的时候需要在表上施加一个排它锁。

参数

FULL

选择"完全"清理,这样可以恢复更多的空间,但是花的时间更多并且在表上施加了排它锁。

FREEZE

选择激进的行"冻结"。指定 FREEZE 相当于执行 VACUUM 时将 vacuum_freeze_min_age 参数设为零。FREEZE 选项将在未来的版本中被取消,并且反对使用,你应当使用设置正确的参数值的方法来达到目的。

VERBOSE

为每个表打印一份详细的清理工作报告

ANALYZE

更新用于优化器的统计信息,以决定执行查询的最有效方法。

table

要清理的表的名称(可以有模式修饰)。缺省时是当前数据库中的所有表。

column

要分析的具体的字段名称。缺省是所有字段。

输出

如果指定了 VERBOSE ,那么 VACUUM 将发出处理过程中的信息,以表明当前正在处理那个表。各种有关这些表的统计也会打印出来。

注意

VACUUM 不能在事务块内执行。

SQL 标准里没有 VACUUM 语句。

建议生产数据库经常清理(至少每晚一次),以保证不断地删除失效的行。尤其是在增删了大量记录之后,对受影响的表执行 VACUUM ANALYZE 命令是一个很好的习惯。这样做将更新系统目录为最近的更改,并且允许 PostgreSQL 查询优化器在规划用户查询时有更好的选择。

不建议日常使用 FULL 选项,但是可以在特殊情况下使用。一个例子就是在你删除了一个表的大部分行之后,希望从物理上缩小该表以减少磁盘空间占用。VACUUM FULL 通常要比单纯的 VACUUM 收缩更多的表尺寸。FULL 选项并不清理索引。仍然推荐周期性的运行 REINDEX 命令。实际上,首先删除所有索引,再运行 VACUUM FULL 命令,最后重建索引通常是很快的。

VACUUM 导致 I/O 流量增加,可能会导致其它活动会话的性能恶劣。因此,有时候会建议使用基于开销的 vacuum 延迟特性。参阅节17.4.4获取细节。

PostgreSQL 包含一个"autovacuum"设施,它可以自动进行日常的 vacuum 维护,默认是关闭的。关于手动和自动清理的更多细节,参见节22.1。

postgresql如何优雅地清理磁盘空间碎片VACUUM相关推荐

  1. linux清理磁盘空间的脚本,在Ubuntu和Linux Mint上释放空间的7种简单方法

    Linux系统空间不足?您可以通过以下几种方式清理系统,释放Ubuntu和其他基于Ubuntu的Linux发行版上的空间. 随着时间的流逝,随着添加和删除程序,任何操作系统都可能变得混乱.如果您拥有T ...

  2. 内存或磁盘空间不足 excel无法再次打开_Mac系统中检测和清理磁盘空间的几个工具...

    苹果电脑的内存和存储空间扩展比较麻烦,如果用户在购买的时候选择了搭配版的苹果电脑,那么你使用一段时间就会发现电脑已经没有多少空间了.此时最好的解决方法是卸载一些不用的程序,但是卸载前最好先检查一下你的 ...

  3. Mac 用久了空间不足?教你如何清理磁盘空间

    Mac 用久了空间不足?教你如何清理磁盘空间 Mac 怎么清理磁盘空间?这个问题还真的难住了不少小伙伴.是否有省心的办法来轻松搞定苹果电脑上的垃圾和缓存文件? 我们平常使用Mac的时候会觉得很省心,可 ...

  4. Win11磁盘空间不足怎么清理?Win11清理磁盘空间的方法

    ​磁盘空间不足将会影响电脑的运行,如果是在系统盘,会造成系统启动慢,运行缓慢,死机现象增多等,如果是在其他盘,会造成游戏或者应用软件使用缓慢,保存出错,硬盘读写能力下降.下面小编将为大家分享Win11 ...

  5. mac清理磁盘空间_Mac磁盘清理-如何释放Mac上的空间

    mac清理磁盘空间 Have you ever gotten a notification that you're running low on disk space on your Mac? Or ...

  6. ubuntu怎么清理软件包_ubuntu清理磁盘空间的多种方法

    这篇文章主要介绍了ubuntu清理磁盘空间的多种方法,需要的朋友可以参考下 Linux系统的硬盘并没有它所能达到的一样轻巧.例如,在你安装完软件后,APT软件包管理器会把软件包文件保存下来,除非你计划 ...

  7. macbook怎么清理磁盘空间 macbook的steam游戏怎么卸载

    在使用MacBook电脑的过程中,我们常常会遇到磁盘空间不足的问题.这种情况下,我们需要清理磁盘空间,使电脑更快地运行.另外,在MacBook上安装的Steam游戏也会占用大量磁盘空间,如果不需要它们 ...

  8. 如何在Mac上清理磁盘空间?这些方法你必须要懂

    对于Mac用户来说,清理磁盘往往是一件比较头疼的事情.看着爆满的磁盘空间又无从下手,只能忍痛删掉喜欢的音乐.视频或者是不常用的软件.实际上,清理Mac磁盘空间只需要使用以下几种清理磁盘空间方法即可释放 ...

  9. centos docker环境下如何清理磁盘空间

    Docker 容器磁盘占用100%(/data/docker/overlay2空间占用显示) overlay 40G 40G 0G 100% /var/lib/docker/overlay2/{id} ...

  10. linux系统清理内存,Linux实验室:五个清理磁盘空间小妙招

    1删除安装包:清空系统APT缓存 玩儿电脑最怕的就是卡慢,那么电脑卡慢应该怎么解决呢?对于windows系统来说,你可能有各种免费的杀毒软件.全家桶帮你清空系统空间,那么Linux系统怎么办?今天笔者 ...

最新文章

  1. 操作canal,报错:Caused by: java.io.IOException: end of stream when reading header
  2. hbuilder前端需要的插件_最新web前端学习路线
  3. Python3 写JSON数据到文件(多行格式化版)
  4. jQuery Ajax 方法调用 Asp.Net WebService 的详细例子
  5. OpenShift 4 - 获取能访问API服务的用户认证Token
  6. 计算机网络中TCP属于,【填空题】TCP/IP协议将计算机网络的结构划分为应用层、传输层、网络互连层等4个层次,其中IP协议属于【1】层。...
  7. NeHe OpenGL第九课:移动图像
  8. python注释中文_python注释不能识别中文
  9. linkedin 第三方网站登录(JavaScript SDK)
  10. 绿色建筑评价标准(GB/T 50378-2006)
  11. 转:Windows Azure Platform体验(3):Azure AppFabric
  12. 仿QQ局域网聊天软件
  13. 2022 最新 IntelliJ IDEA 2022 详细配置步骤演示(图文版)
  14. PHP生成唯一订单号 阿星小栈
  15. 数学建模——红酒品质分类
  16. 史上讲解最好的Docker教程,从入门到精通(建议收藏的教程)
  17. TSC 打印机开发TSPL黑底白字的打印以及一些问题
  18. Python将 Unicode 转换为 utf-8 格式
  19. FreeMind的常见问题和安装
  20. 布朗大学计算机科学博士怎样,2020年布朗大学博士含金量

热门文章

  1. 【原创】VBA学习笔记(313)VBA字典相关:遍历字典,用key查item, 用item查key的方法
  2. 前阿里P10赵海平被打3.25后离职,加入字节跳动,职级或为4+
  3. nginx配置CSP策略和Nonce随机数方案
  4. 图解 Python 编程(6) | 条件控制与if语句(附要点速查表·完结)
  5. 【图像处理】换脸技术哪家强?Python来挑战,一键换脸,毫无破绽~
  6. STM32F401CCU6踩坑系列
  7. Hibernate的一对一,一对多/多对一关联保存
  8. buu RSA what(共模攻击+base64隐写)
  9. 微信商户平台如何下载证书和设置KEY值?
  10. java导出excel 自定义表头