来源 :https://blog.csdn.net/u011598529/article/details/49276029

PostgreSQL数据库管理工作中,定期vacuum是一个重要的工作.

vacuum的效果:

1.1释放,再利用 更新/删除的行所占据的磁盘空间.

1.2更新POSTGRESQL查询计划中使用的统计数据

1.3防止因事务ID的重置而使非常老的数据丢失。

第一点的原因是PostgreSQL数据的插入,更新,删除操作并不是真正放到数据库空间.如果不定期释放空间的话,由于数据太多,查询速度会巨降.

第二点的原因是PostgreSQL在做查询处理的时候,为了是查询速度提高,会根据统计数据来确定执行计划.如果不及时更新的话,查询的效果可能不如预期.

第三点的原因是PostgreSQL中每一个事务都会产生一个事务ID,但这个数字是有上限的. 当事务ID达到最大值后,会重新从最小值开始循环.这样如果不及时把以前的数据释放掉的话,原来的老数据会因为事务ID的丢失而丢失掉.

虽然在新版本的Postgresql中有自动的vacuum,但是如果是大批量的数据IO可能会导致自动执行很慢,需要配合手动执行以及自己的脚本来清理数据库。

1. vacuumdb 是 SQL 命令 VACUUM的封装,所以用vacuumdb和vacuum来清理数据库都可以,效果是一样的。

2.vacuumdb 中的几个重要参数:可以用vacuumdb --help查询。

-a/--all               vacuum所有的数据库

-d dbname        只vacuum dbname这个数据库

-f/--full               执行full的vacuum

-t table              只vacuum table这个数据表

-z/--analyze       Calculate statistics for use by the optimizer

3. 切换到postgres用户下:

vacuumdb -d yourdbname -f -z -v 来清理你的数据库。

或者加到conrtab中15 1 * * * postgres vacuumdb -d mydb-f -z -v >> /tmp/vacuumdb.log

每天的一点一刻开始进行清理。

4. 如何查询我的XID是否接近临界值的命令:

select age(datfrozenxid) from pg_database;

或者:select max(age(datfrozenxid)) from pg_database;

5. 然而我们关心的是哪一个大的表组要真正的vacuum:

SELECT relname, age(relfrozenxid) as xid_age, pg_size_pretty(pg_table_size(oid)) as table_size FROM pg_class WHERE relkind = 'r' and pg_table_size(oid) > 1073741824

ORDER BY age(relfrozenxid) DESC LIMIT 20;

这个命令是查询按照最老的XID排序,查看大于1G而且是排名前20的表。

下面是一个例子:

relname         |  xid_age  | table_size

------------------------+-----------+------------

postgres_log           | 199785216 | 12 GB

statements             |   4551790 | 1271 MB

normal_statement_times |        31 | 12 GB

然后你可以单独每个表进行vacuum:

vacuumdb --analyze --verbose --table 'postgres_log' mydb

vacuum 数据库 用法_postgresql vacuum操作相关推荐

  1. vacuum 数据库 用法_PostgreSQL vacuum原理一功能与参数

    从上篇"PostgreSQL MVCC 源码实现"中,我们知道,PG并没有像Oracle那样的undo来存放旧版本:而是将旧版本直接存放于relation文件中.那么带来的问题就是 ...

  2. vacuum 数据库 用法_SQLite Vacuum

    SQLite Vacuum VACUUM 命令通过复制主数据库中的内容到一个临时数据库文件,然后清空主数据库,并从副本中重新载入原始的数据库文件.这消除了空闲页,把表中的数据排列为连续的,另外会清理数 ...

  3. vacuum 数据库 用法_[数据库学习]第二章SQL命令参考-VACUUM

    VACUUM Garbage-collectsand optionally analyzes a database. 概要 VACUUM[FULL] [FREEZE] [VERBOSE] [table ...

  4. neo4j︱图数据库基本概念、操作罗列与整理(一)

    图数据库常规的有:neo4j(支持超多语言).JanusGraph/Titan(分布式).Orientdb,google也开源了图数据库Cayley(Go语言构成).PostgreSQL存储RDF格式 ...

  5. Oracle数据库的impdp导入操作以及dba_directories使用方法

    Oracle数据库的impdp导入操作以及dba_directories使用方法 今天从同事那里拿到了导出的dmp文件,当导入时发现了很多问题,记下来以免以后忘记,以下是本人的操作过程: 1.首先是创 ...

  6. MySQL——数据库的增删改操作

    数据库的增删改操作 数据库的增操作 数据库的增操作主要涉及数据库的增加.数据表的增加.表记录增加以及表字段增加等.数据库的增加非常简单,就是新创建一个数据库:表记录的增加指的就是新增表的数据行,可以是 ...

  7. python操作mysql数据库 内存占用100_python操作MySQL数据库

    python标准数据库接口为Python DB-API,为开发人员提供了数据库应用编程接口 DB-API是一个规范,定义了一系列必须的对象和数据库存取方式, 便于各种各样的底层数据库系统和多种多样的数 ...

  8. MySQL学习笔记03【数据库表的CRUD操作、数据库表中记录的基本操作、客户端图形化界面工具SQLyog】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  9. mysql数据的引用_MySQL数据库入门:mysql操作和程序引用

    本文主要向大家介绍了MySQL数据库入门的mysql操作和程序引用,通过具体的实例让大家了解,希望对大家学习MySQL数据库入门有所帮助. mysql操作: 创建qrdata2表: create ta ...

最新文章

  1. 我眼中真正优秀的CTO
  2. python3 random函数_Python3 中 random模块
  3. 平安金管家显示连接服务器失败,平安金管家平安run上传步数失败请更换原设备手机详细解决教程...
  4. idea下org.apache.commons.dbcp.BasicDataSourc找不到
  5. w7怎么重启无限服务器,w7重启数据库服务器
  6. 属性 方法c语言,C语言如何实现C++中对象属性和方法
  7. SPSS操作(四):系统聚类分析
  8. 深度学习行人重识别ReID最新综述与展望
  9. rpc调试工具grpcui的安装使用
  10. docker create_Docker镜像管理(一)
  11. unity用visual studio写代码的时候一直显示importing assets
  12. 公众号排名优化技巧分享
  13. TVS 瞬态抑制二极管如何选型?
  14. java font 字体大小_Java字体大小从宽度
  15. 浅谈智能DNS云解析(二)
  16. [目标跟踪] 论文笔记:Parallel Tracking and Verifying(PTAV-Update)
  17. 嵌入式Linux--MYS-6ULX-IOT--总目录
  18. 为Onda v820w CH (v1) DualOS平板刷写Remix单系统
  19. GUI小工具-网盘搜索器
  20. Flink基础系列7-通过Web UI执行jar文件

热门文章

  1. Mac OSX 打开原生自带读写NTFS功能[10.11.6 work, 10.14.4不work]
  2. [SWPUCTF 2021 新生赛]
  3. 惠普激光打印机硒鼓加碳粉图解篇
  4. 微盟“删库”144小时:痛的不是股价,是信任
  5. openbabel 3 以及 python openbabel 安装教程
  6. 产品搞趣产品经理怎么样
  7. 如何复制网页上的任何内容(比如百度文库)
  8. 2. ROS安装(官网教程/简单好用)
  9. 珍爱生命,远离赛门铁克(Symantec)
  10. USB摄像头显示为VMare USB device