VACUUM收回由死亡元组占用的存储空间。在通常的PostgreSQL操作中,被删除或者被更 新废弃的元组并没有在物理上从它们的表中移除,它们将一直存在直到一次VACUUM被执 行。因此有必要周期性地做VACUUM,特别是在频繁被更新的表上。

一般来说,vacuum对指定的表进行以下操作:
删除死元组:
删除每页上的死元组和对活动元组进行碎片整理。
删除指向死元组的索引元组。

冻结旧的txid:
如有必要,请冻结元组的旧文本。
更新冻结的与txid相关的系统目录(pg_database和pg_class)。
如果可能,请删除clog中不必要部分。

其他:
更新已处理表的FSM和VM。
更新几个统计信息(pg_stat_all_tables等)。

语法:

Syntax:
VACUUM [ ( option [, ...] ) ] [ table_and_columns [, ...] ]
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ ANALYZE ] [ table_and_columns [, ...] ]where option can be one of:FULL [ boolean ]FREEZE [ boolean ]VERBOSE [ boolean ]ANALYZE [ boolean ]DISABLE_PAGE_SKIPPING [ boolean ]SKIP_LOCKED [ boolean ]INDEX_CLEANUP [ boolean ]TRUNCATE [ boolean ]and table_and_columns is:table_name [ ( column_name [, ...] ) ]

需要注意的是,vacuum命令不能在事务中执行,vacuum 不加参数是对所有表进行操作。
主要说明下vacuum和vacuum full这两个命令区别:

  1. vacuum不会锁表,只是单纯的回收空间以被重用,被回收的空间一般情况不会被返还给操作系统,仅仅被保留在同一个表中以备重用。
  2. vacuum full会锁表,会将表的整个内容重写到一个新的磁盘文件中,并且不包含额外的空间,这使得没有被 使用的空间被还给操作系统。

例子:
–创建实验表

bill=# select count(*) from test ;count
----------10000000
(1 row)bill=# \dt+ test;List of relationsSchema | Name | Type  | Owner |  Size  | Description
--------+------+-------+-------+--------+-------------public | test | table | bill  | 651 MB |
(1 row)

–删除表中数据并vacuum
可以发现表大小没变。

bill=# delete from test where id<>10000000;
DELETE 9999999
bill=# vacuum test;
VACUUM
bill=# \dt+ test  List of relationsSchema | Name | Type  | Owner |  Size  | Description
--------+------+-------+-------+--------+-------------public | test | table | bill  | 651 MB |
(1 row)

–vacuum full该表
可以发现表所占空间已经被回收。

bill=# vacuum full test;
VACUUM
bill=# \dt+ test        List of relationsSchema | Name | Type  | Owner | Size  | Description
--------+------+-------+-------+-------+-------------public | test | table | bill  | 16 kB |
(1 row)

还有一点需要注意的是,vacuum full甚至会改变relfilenode(relfilenode 是用来命名数据文件的,会随数据物理位置变化而变化),但是vacuum full不会生成fsm和vm文件。

bill=# select relname,relfilenode from pg_class where relname = 't1'; relname | relfilenode
---------+-------------t1      |      190368
(1 row)
bill=# vacuum FULL t1;
VACUUM
bill=# select relname,relfilenode from pg_class where relname = 't1'; relname | relfilenode
---------+-------------t1      |      190379
(1 row)

vacuum命令详解相关推荐

  1. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  2. oracle home 命令,$ORACLE_HOMEbin目录下所有命令的使用方法及命令详解

    求$ORACLE_HOME/bin目录下所有命令的使用方法及命令详解 如题. $ORACLE_HOME/bin目录下有很多命令,那我们平时用到的也不是太多,即使用到的那部分可能用法也不是完全能掌握,所 ...

  3. 【FFmpeg】ffmpeg命令详解(三)高级选项

    ffmpeg命令详解(三)高级选项 1.-map 2.-ignore_unknown 3.-copy_unknown 4.-map_channel 5.-map_metadata 6.-map_cha ...

  4. 【FFmpeg】ffmpeg命令详解(二)

    ffmpeg命令详解(二) 4.流选择 4.1 自动选择流 4.2 手动选择流 5.命令行选择详解 5.1 命令行选项的值说明: 5.2 流说明符 5.3 通用选项 5.4 主选项 5.5 视频相关选 ...

  5. 【FFmpeg】ffmpeg命令详解(一)

    ffmpeg命令详解(一) 1.命令格式 2.简述 3.详细说明 3.1 过滤器 3.1.1 简单的过滤器图 3.1.2 复杂的过滤器图 3.2 流拷贝 1.命令格式 ffmpeg [global_o ...

  6. head和tail命令详解

    基础命令学习目录首页 原文链接:https://www.cnblogs.com/amosli/p/3496027.html 当要查看上千行的大文件时,我们可不会用cat命令把整个文件内容给打印出来,相 ...

  7. 常用memcached命令详解

    常用memcached命令详解: Memcached作为缓存服务器,对其操作的命令主要分为三类: 1.  服务器状态命令:可以查看memcahced服务的当前状态 2.  数据存储命令:如何存储数据到 ...

  8. linux yum命令详解

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

  9. linux中的shell有printf吗,Linux Shell系列教程之(八)Shell printf命令详解

    在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell printf命令有了一个简略的介绍,本篇给大家详细介绍下Shell中的printf命令. 一.Shell p ...

最新文章

  1. 基于Nginx的负载均衡
  2. 融合 MF 和 RNN 的电影推荐系统
  3. 4.Python算法之试探算法思想(回溯法)
  4. css3 上线圆角效果
  5. P4301-[CQOI2013]新Nim游戏【线性基】
  6. python设置格式模板
  7. android 编译faac,faac 移植到android
  8. POJ 1845 Sumdiv 【逆元】
  9. 聊一聊FPGA的片内资源相关知识
  10. Windows10上安装Keras 和 TensorFlow-GPU
  11. 易软门诊管理软件php,易软门诊管理系统最新下载
  12. 英雄无敌服务器维护,3月18日 维护更新公告
  13. vba基础 个人学习详细笔记 知识点梳理 -- 大白话篇
  14. 应急响应样本分析查杀集合
  15. 【大学生辩论赛】如何练习自己的辩论口才
  16. Ubuntu11.10安装科磊NW336驱动
  17. 插件用法--视频播放video.js
  18. 人生重开模拟器,脚本点击
  19. Java 生成各种 PDF 实战方案(图片、模板、表格)
  20. 基于 ZYNQ 的无线超声数据传输及显示系统的实现

热门文章

  1. Jmeter断言(预期结果)-响应断言
  2. PC电脑装机知识分享
  3. 【Week9 作业】A - 咕咕东的目录管理器、B - 东东学打牌、C - 签到题,独立思考哈
  4. pgcreate /dev/sdb 提示 Device /dev/sdb excluded by a filter解决办法
  5. 站上新风口的区块链:虚火还是实火 到底有多神奇?
  6. 荣耀30S入手体验分享 性能够用颜值深得我心
  7. 一种互联网项目开发方式
  8. bsd是linux发行版本,BSD推新版本 Linux不再是唯一开源操作系统
  9. 操作系统真象还原第9章:线程
  10. 【PMP】项目进度考点的说明