vacuum 数据库 用法_postgresql vacuum操作
来源 :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操作相关推荐
- vacuum 数据库 用法_PostgreSQL vacuum原理一功能与参数
从上篇"PostgreSQL MVCC 源码实现"中,我们知道,PG并没有像Oracle那样的undo来存放旧版本:而是将旧版本直接存放于relation文件中.那么带来的问题就是 ...
- vacuum 数据库 用法_SQLite Vacuum
SQLite Vacuum VACUUM 命令通过复制主数据库中的内容到一个临时数据库文件,然后清空主数据库,并从副本中重新载入原始的数据库文件.这消除了空闲页,把表中的数据排列为连续的,另外会清理数 ...
- vacuum 数据库 用法_[数据库学习]第二章SQL命令参考-VACUUM
VACUUM Garbage-collectsand optionally analyzes a database. 概要 VACUUM[FULL] [FREEZE] [VERBOSE] [table ...
- neo4j︱图数据库基本概念、操作罗列与整理(一)
图数据库常规的有:neo4j(支持超多语言).JanusGraph/Titan(分布式).Orientdb,google也开源了图数据库Cayley(Go语言构成).PostgreSQL存储RDF格式 ...
- Oracle数据库的impdp导入操作以及dba_directories使用方法
Oracle数据库的impdp导入操作以及dba_directories使用方法 今天从同事那里拿到了导出的dmp文件,当导入时发现了很多问题,记下来以免以后忘记,以下是本人的操作过程: 1.首先是创 ...
- MySQL——数据库的增删改操作
数据库的增删改操作 数据库的增操作 数据库的增操作主要涉及数据库的增加.数据表的增加.表记录增加以及表字段增加等.数据库的增加非常简单,就是新创建一个数据库:表记录的增加指的就是新增表的数据行,可以是 ...
- python操作mysql数据库 内存占用100_python操作MySQL数据库
python标准数据库接口为Python DB-API,为开发人员提供了数据库应用编程接口 DB-API是一个规范,定义了一系列必须的对象和数据库存取方式, 便于各种各样的底层数据库系统和多种多样的数 ...
- MySQL学习笔记03【数据库表的CRUD操作、数据库表中记录的基本操作、客户端图形化界面工具SQLyog】
MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...
- mysql数据的引用_MySQL数据库入门:mysql操作和程序引用
本文主要向大家介绍了MySQL数据库入门的mysql操作和程序引用,通过具体的实例让大家了解,希望对大家学习MySQL数据库入门有所帮助. mysql操作: 创建qrdata2表: create ta ...
最新文章
- 我眼中真正优秀的CTO
- python3 random函数_Python3 中 random模块
- 平安金管家显示连接服务器失败,平安金管家平安run上传步数失败请更换原设备手机详细解决教程...
- idea下org.apache.commons.dbcp.BasicDataSourc找不到
- w7怎么重启无限服务器,w7重启数据库服务器
- 属性 方法c语言,C语言如何实现C++中对象属性和方法
- SPSS操作(四):系统聚类分析
- 深度学习行人重识别ReID最新综述与展望
- rpc调试工具grpcui的安装使用
- docker create_Docker镜像管理(一)
- unity用visual studio写代码的时候一直显示importing assets
- 公众号排名优化技巧分享
- TVS 瞬态抑制二极管如何选型?
- java font 字体大小_Java字体大小从宽度
- 浅谈智能DNS云解析(二)
- [目标跟踪] 论文笔记:Parallel Tracking and Verifying(PTAV-Update)
- 嵌入式Linux--MYS-6ULX-IOT--总目录
- 为Onda v820w CH (v1) DualOS平板刷写Remix单系统
- GUI小工具-网盘搜索器
- Flink基础系列7-通过Web UI执行jar文件
热门文章
- Mac OSX 打开原生自带读写NTFS功能[10.11.6 work, 10.14.4不work]
- [SWPUCTF 2021 新生赛]
- 惠普激光打印机硒鼓加碳粉图解篇
- 微盟“删库”144小时:痛的不是股价,是信任
- openbabel 3 以及 python openbabel 安装教程
- 产品搞趣产品经理怎么样
- 如何复制网页上的任何内容(比如百度文库)
- 2. ROS安装(官网教程/简单好用)
- 珍爱生命,远离赛门铁克(Symantec)
- USB摄像头显示为VMare USB device