pg能够提高可靠性的参数,pg_checksums

定义

在计算机系统中,checksum 通常用于校验数据在传输或存取过程中是否发生错误。PostgreSQL从 9.3 开始支持 checksum,以发现数据因磁盘、 I/O 损坏等原因造成的数据异常。 PostgreSQL 从 9.3 开始支持数据页的 checksum,可以在执行 initdb 时指定 -k 或 --data-checksums 参数开启 checksum,但开启 checksum 可能会对系统性能有一定影响,官网描述如下: Use checksums on data pages to help detect corruption by the I/O system that would otherwise be silent. Enabling checksums may incur a noticeable performance penalty. If set, checksums are calculated for all objects, in all databases. All checksum failures will be reported in the pg_stat_database view.

功能

视图pg_stat_database记录了校验和数据页失败的页数。 启用 checksum 后,系统会对每个数据页计算 checksum,从存储读取数据时如果检测 checksum 失败,则会发生错误并终止当前正在执行的事务,该功能使得 PostgreSQL 自身拥有了检测 I/O 或硬件错误的能力。

Checksum 引入一个 GUC 参数 ignore_checksum_failure,该参数若设置为 true,checksum 校验失败后不会产生错误,而是给客户端发送一个警告。当然,checksum 失败意味着磁盘上的数据已经损坏,忽略此类错误可能导致数据损坏扩散甚至导致系统奔溃,此时宜尽早修复,因此,若开启 checksum,该参数建议设置为 false,默认为false。

PostgreSQL checksum 行为:
1、开启checksum后,PostgreSQL 从shared buffer把数据write出去,需要计算checksum。
2、开启checksum后,从shared buffer外面(disk, os page cache)读取BLOCK到shared buffer里面,需要计算block的checksum,对比存储在page head里头的checksum是否一致。
3、已经在shared buffer里面的block,变更、读取时并不需要计算checksum。

数据页的 checksum 在从 Buffer pool 刷到存储时才设置,当页面再次读取至 Buffer pool 时进行检测。PostgreSQL 会在页面从存储读入内存时检测其是否可用,调用函数为 PageIsVerified,该函数不仅会检测正常初始化过的页(non-zero page),还会检测 全零页(all-zero page)。

作用、使用

Checksum 使 PostgreSQL 具备检测因硬件故障或传输导致数据不一致的能力,一旦发生异常,通常会报错并终止当前事务,用户可以尽早察觉数据异常并予以恢复。

当然,开启 checksum 也会引入一些开销,体现在两个方面: 计算数据页的 checksum 会引入一些 CPU 开销,具体开销取决于 checksum 算法的效率 checkpoint 后,若因更新 Hint Bits 将页面第一次置为 dirty 会写一条记录 Full Page Image 的 WAL 日志,以用于恢复因更新 Hint Bits 产生的破碎页。

对于数据可用性要求较高的场景,通常建议将 full_page_writes 和 checksum 都打开,前者用于避免写失败导致的数据缺失,后者用于尽早发现因硬件或传输导致数据不一致的场景,一旦发现,可以利用 full_page_writes 和 checksum 记录在 WAL 日志中的 Full Page Image 进行数据恢复。

版权声明:本文为「小麦苗DBA宝典(www.xmmup.com)」的原创文章,遵循CC 4.0 BY -SA版权协议,转载请附上原文出处链接及本声明。
转载请保留原文链接: https://www.xmmup.com/pg12zhongdepg_checksumsmingling.html

### Windows 系统中 PostgreSQL 配置文件的位置 在 Windows 系统中,PostgreSQL 的配置文件通常位于安装目录下的 `data` 文件夹中。具体路径取决于 PostgreSQL 安装时所选择的目标位置[^4]。 常见的默认安装路径如下: - **C:\Program Files\PostgreSQL\<version>\data\**: 这里 `<version>` 是指 PostgreSQL 版本号,例如 `12`, `13` 等。 主要的配置文件包括但不限于以下几个: #### 1. 主要配置文件 - **postgresql.conf** - 此文件包含了 PostgreSQL 数据库的主要运行参数设置,例如内存分配、并发控制等。 - **pg_hba.conf** - 访问控制文件,定义了客户端如何连接到服务器以及权限管理策略。 - **pg_ident.conf** - 用户映射文件,用于将操作系统用户映射到数据库角色。 这些文件的具体存储位置可以通过查询系统视图获得。例如,可以使用以下 SQL 查询获取数据目录路径: ```sql SHOW data_directory; ``` 此命令会返回当前 PostgreSQL 实例的数据目录路径。 #### 2. 校验和支持 如果启用了数据页校验和 (`data_checksums`) 功能,则每个数据页都会包含额外的校验信息以增强可靠性。这一特性可以在初始化集群时启用,并通过以下方式确认其状态: ```sql SHOW data_checksums; ``` 上述命令的结果如果是 `on` 则表示已启用校验和功能[^5]。 --- ### 如何找到配置文件? 对于未明确知道安装路径的情况,可通过以下方法定位配置文件所在位置: 1. 使用 pgAdmin 工具查看服务器属性中的 “Data Directory” 字段; 2. 登录 PostgreSQL 并执行前述 `SHOW data_directory;` 命令。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值