PG中的checksum

PG中的checksum

视图pg_stat_database记录了校验和数据页失败的页数。

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。

1、查看checksum

[pg12@wcbpgcm1 data]$ psql
psql (12.9)
Type "help" for help.

postgres=# create extension pageinspect;
CREATE EXTENSION
postgres=# SELECT page_checksum(get_raw_page('pg_class', 0), 0);
 page_checksum 
---------------
          6326
(1 row)

postgres=# SELECT * FROM page_header(get_raw_page('pg_class', 0));
    lsn    | checksum | flags | lower | upper | special | pagesize | version | prune_xid 
-----------+----------+-------+-------+-------+---------+----------+---------+-----------
 0/162DCB0 |     6326 |     5 |   212 |  7760 |    8192 |     8192 |       4 |         0
(1 row)

2、pg_checksum命令

下列命令选项可用:
-D *directory* --pgdata=*directory*
指定存储数据库集簇的目录。
-c --check
检查校验和。如果未指定其它任何内容,这是缺省模式。
-d --disable
禁用校验和。
-e --enable
启用校验和。
-f *filenode* --filenode=*filenode*
仅验证文件节点为filenode的关系中的校验和。
-N --no-sync
缺省地,pg_checksums会等待所有文件安全地写到磁盘上。该选项使得pg_checksums不等待就返回,这样更快,但意味着后续如果操作系统崩溃会让更新的数据目录损坏。一般地,该选项对测试有用,但不应用在生产安装上。当使用--check时,该选项无效。
-P --progress
启用进度报告。在检查或启用校验和时,打开该选项,会提供进度报告。
-v --verbose
启用详细输出。列出所有检查的文件 。
-V --version
打印pg_checksums版本并退出。
-? --help
显示关于pg_checksums命令行参数的帮助并退出。

pg_checksums示例

[pg12@wcbpgcm1 data]$ pg_ctl stop
waiting for server to shut down....2022-04-10 11:46:25.226 CST [17456] LOG:  received fast shutdown request
2022-04-10 11:46:25.238 CST [17456] LOG:  aborting any active transactions
2022-04-10 11:46:25.239 CST [17456] LOG:  background worker "logical replication launcher" (PID 17463) exited with exit code 1
2022-04-10 11:46:25.239 CST [17458] LOG:  shutting down
2022-04-10 11:46:25.247 CST [17456] LOG:  database system is shut down
 done
server stopped
[pg12@wcbpgcm1 data]$ pg_checksums -D /home/pg12/data/
Checksum operation completed
Files scanned:  961
Blocks scanned: 2886
Bad checksums:  0
Data checksum version: 1
[pg12@wcbpgcm1 data]$ pg_checksums -D /home/pg12/data/ --enable
pg_checksums: error: data checksums are already enabled in cluster
[pg12@wcbpgcm1 data]$ pg_checksums -D /home/pg12/data/ --progress
22/22 MB (100%) computed
Checksum operation completed
Files scanned:  961
Blocks scanned: 2886
Bad checksums:  0
Data checksum version: 1

你可能感兴趣的:(pg)