LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

PostgreSQL 企业级能力:新增文件回滚自动清除

maoxiaoming
2025年8月19日 10:21 本文热度 20

崩溃恢复场景: 用例

下面我们在 PostgreSQL 的数据库中,创建一个表,插入一些数据。

CREATE TABLE t (id integername text);

INSERT INTO t (id, name)
  SELECT i, repeat('Pg'32)
    FROM generate_series(11000000AS s(i);

下面我们启动一个事务块,创建一个空表t1,复制表t创建一个新表t_copy,并查看下表文件的存储路径。

BEGIN;

CREATE TABLE t1 ();

CREATE TABLE t_copy AS TABLE t;

SELECT pg_relation_filepath(nameAS path
  FROM (VALUES ('t1'), ('t_copy')) AS t (name);
     path
--------------
 base/5/16389
 base/5/16392

让我们立即停止数据库,模拟数据库异常宕机的故障,再重新启动数据库服务:

pg_ctl stop --mode=immediate
pg_ctl start

数据库重新启动后,手动触发一次检查点:

CHECKPOINT;

检查重启前事务块中新增的表文件:

ls -lh base/5/{16389,16392}
-rw------- 1 postgres postgres   0 Aug 18 17:43 base/5/16389
-rw------- 1 postgres postgres 97M Aug 18 17:44 base/5/16392

崩溃恢复场景: 内部原理

下面是我们在 PostgreSQL 的事务中创建表文件时,崩溃恢复后出现表文件残留问题的内部原因:

  1. 1. PostgreSQL 在事务运行的过程中,会在会话内存中记录创建的表文件。
  2. 2. 当事务发生异常或者执行回滚操作时,会即时地清除这些表文件。
  3. 3. 当事务异常中断,如:磁盘不足引发的 PANIC 错误,系统发出的 OOM 内存不足信号,或者发生软件错误的扩展插件,系统停电导致的服务器崩溃时,会话内存中记录的新增表文件会丢失,出现表文件残留的问题。

Redrock Postgres 的解决方案

Redrock Postgres 在创建表文件时,会记录撤消日志,当正在连接的会话因为某些原因被中止后,数据库重新启动后会检查这些异常中止的事务。数据库会回滚这些异常中止的事务,根据记录的撤消日志清理残留的表文件。

下面我们在 Redrock Postgres 的数据库中,创建和上面相同的表,并插入同样的数据。

CREATE TABLE t (id integername text);

INSERT INTO t (id, name)
  SELECT i, repeat('Pg'32)
    FROM generate_series(11000000AS s(i);

下面我们启动一个事务块,创建一个空表t1,复制表t创建一个新表t_copy,并查看下表文件的存储路径。

BEGIN;

CREATE TABLE t1 ();

CREATE TABLE t_copy AS TABLE t;

SELECT pg_relation_filepath(nameAS path
  FROM (VALUES ('t1'), ('t_copy')) AS t (name);
     path
--------------
 base/5/16389
 base/5/16392

让我们立即停止数据库,模拟数据库异常宕机的故障,再重新启动数据库服务:

pg_ctl stop --mode=immediate
pg_ctl start

数据库重新启动后,手动触发一次检查点:

CHECKPOINT;

事务回滚的时候不会立即清理残留的表文件,表文件的实际清理操作是在检查点的过程中完成的。

检查重启前事务块中新增的表文件:

ls -lh base/5/{16389,16392}
ls: cannot access 'base/5/16389': No such file or directory
ls: cannot access 'base/5/16392': No such file or directory

数据库重新启动后,回滚了异常中止的事务,根据事务记录的撤消日志清理了残留的表文件。

转自:https://mp.weixin.qq.com/s/98DnaCDJPcjFTS2JpxlRYg​


该文章在 2025/8/19 10:21:13 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved