PostgreSQL vacuum freeze

2024-08-21 05:44
文章标签 postgresql freeze vacuum

本文主要是介绍PostgreSQL vacuum freeze,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、简介

  数据库使用 32 位事务号,最大容纳 42 亿左右的事务号,事务号是循环使用的。当前事务号过去的 21 亿事务属于过去的事务号,当前事务号往前的 21亿 属于未来的事务号,未来的事务号对当前事务是不可见的。当事务号处于未来事务时,就会导致该事务不可见(事务 ID 回卷),为了预防此类情况发生,数据库事务号在达到阈值时 autovacuum 会自动冻结(freeze)重置事务 ID 为 2(冻结的事务id,比任何普通的事务 ID 都旧),来防止事务 ID 回卷。出于各种原因,数据库无法自动从一个表中清除旧的事务 ID,当数据库的最旧事务 ID 和回卷点之间达到一千一百万个事务时,数据库将开始发出这样的警告消息:

WARNING:  database "mydb" must be vacuumed within 10985967 transactions
HINT:  To avoid a database shutdown, execute a database-wide VACUUM in that database.

  如提示信息所建议,一次手动的 VACUUM 应该会修复该问题;但是注意 VACUUM 必须由一个超级用户来执行,否则它将无法处理系统目录并且不能推进数据库的 datfrozenxid。如果这些警告被忽略,一旦距离回卷点只剩下一百万个事务时,数据库将会关闭并且拒绝开始任何新的事务:

ERROR:  database is not accepting commands to avoid wraparound data loss in database "mydb"
HINT:  Stop the postmaster and vacuum that database in single-user mode.

  这一百万个事务的富余是为了让管理员能通过手动执行所要求的 VACUUM 命令进行恢复而不丢失数据。但一旦数据库进入到安全关闭模式,唯一方法是停止数据库,以单一用户启动数据库来执行 VACUUM。

二、清理年龄操作示例

数据库正常运行时:

--查询所有数据库的年龄,定位年龄超限的数据库
SELECT datname, age(datfrozenxid) FROM pg_database;--对年龄超限的数据库,查询库下所有表的年龄,找到年龄超限的对象
SELECT oid, relname, relfrozenxid, age(relfrozenxid) FROM pg_class where relfrozenxid != 0 order by age(relfrozenxid) desc limit 20; --对年龄超限的对象执行清理操作
VACUUM objectname;
或
VACUUM FREEZE objectname;

VACUUM 为懒惰模式清理对象年龄,只会扫描包含死元组的页面。VACUUM FREEZE 为激进模式清理对象年龄,会扫描所有页面。

数据库进入到安全关闭模式时:

--停止数据库
pg_ctl stop--单用户模式连入对应数据库
postgres --single -D $PGDATA databasename--执行清理操作
VACUUM FREEZE VERBOSE;

三、注意事项

  • 执行 vacuum freeze 操作前,确保有可用的数据库备份。
  • 对数据量大的对象进行 vacuum freeze 操作,会占用大量 IO,数据库在运行间执行此操作,需避开业务时间段。
  • 对数据量大的对象进行 vacuum freeze 操作,据库集簇的 pg_xact 、pg_commit_ts、pg_wal 子目录可能占据更多空间,确保磁盘有可用空间。

这篇关于PostgreSQL vacuum freeze的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092289

相关文章

PostgreSQL核心功能特性与使用领域及场景分析

PostgreSQL有什么优点? 开源和免费 PostgreSQL是一个开源的数据库管理系统,可以免费使用和修改。这降低了企业的成本,并为开发者提供了一个活跃的社区和丰富的资源。 高度兼容 PostgreSQL支持多种操作系统(如Linux、Windows、macOS等)和编程语言(如C、C++、Java、Python、Ruby等),并提供了多种接口(如JDBC、ODBC、ADO.NET等

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、

PostgreSQL入门介绍

一、PostgreSQL 背景及主要功能介绍 1、背景 PG数据库,全称为PostgreSQL数据库,是一款开源的关系型数据库管理系统(RDBMS)。其起源可以追溯到20世纪80年代末和90年代初,由加拿大的计算机科学家Michael Stonebraker及其团队在加州大学伯克利分校启动。该项目旨在创建一个强大的、开源的关系型数据库管理系统,作为早期关系型数据库系统Ingres的继承者。Mi

PostgreSQL索引介绍

梦中彩虹   博客园首页新随笔联系管理 随笔 - 131  文章 - 1  评论 - 14 PostgreSQL索引介绍 INDEX 索引是增强数据库性能的常用方法。索引使得数据库在查找和检索数据库的特定行的时候比没有索引快的多。但索引也增加了整个数据库系统的开销,所以应该合理使用。 介绍 假设我们有一个类似这样的表: CREATE TABLE test1 (id integ

PostgreSQL分区表(partitioning)应用实例详解

https://www.jb51.net/article/97937.htm   PostgreSQL分区表(partitioning)应用实例详解  更新时间:2016年11月22日 10:25:58   作者:小灯光环    我要评论   这篇文章主要为大家详细介绍了PostgreSQL分区表(partitioning)应用实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

PostgreSql中WITH语句的使用

https://blog.csdn.net/chuan_day/article/details/44809125 PostgreSql中WITH语句的使用 With语句是为庞大的查询语句提供了辅助的功能。这些语句通常是引用了表表达式或者CTEs(一种临时数据的存储方式),可以看做是一个查询语句的临时表。在With语句中可以使用select,insert,update,delete语句。当然wit

PostgreSQL 17即将发布,新功能Top 3

按照计划,PostgreSQL 17 即将在 2024 年 9 月 26 日发布,目前已经发布了第一个 RC 版本,新版本的功能增强可以参考 Release Notes。 本文给大家分享其中 3 个重大的新增功能。 MERGE 语句增强 MERGE 语句是 PostgreSQL 15 增加的一个新功能,它可以在单个语句中实现 INSERT、UPDATE 以及 DELETE 操作,非常适合数据

Peewee+Postgresql+PooledPostgresqlDatabase重连机制

需求: Postgresql数据库服务重启后,需要业务代码正常读写数据库 方案: 通过继承playhouse.shortcuts.ReconnectMixin和playhouse.pool.PooledPostgresqlDatabase来创建一个新的ReconnectPooledPostgresqlDatabase类修改reconnect_errors属性来适配Postgresql

【PostgreSQL教程】PostgreSQL 高级篇之 LOCK(锁)

博主介绍:✌全网粉丝20W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可以先关注收藏起来,在工作中、生活上等遇到相关问题都可以给我

【PostgreSQL教程】PostgreSQL 高级篇之 TRANSACTION(事务)

博主介绍:✌全网粉丝20W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可以先关注收藏起来,在工作中、生活上等遇到相关问题都可以给我