GPDB中AOCO列存页的checksum

简介: GPDB中AOCO列存页的checksum

GPDBAOCO列存页的checksum为了保证数据的正确性,AOCO列存页采用CRC32即循环冗余校验算法来进行校验。首先看下页结构。页类型有四种:AOSmallContentHeaderAOLargeContentHeaderAONonBulkDenseContentHeaderAOBulkDenseContentHeader。页头的大小都是8个字节。除了这些内容外,页头其实还有firstRowNumchecksum,但这两个成员在计算时归到了数据那部分。下面我们以SmallContentHeader为例来讲解下checksum

页头部分结构如上图所示。Checksum部分大小为8字节,分为2部分:block checksumheader checksum。首先计算block checksum,其实就是数据部分的checksumfirstRowNumvalue部分的crc值;然后再计算header checksumAoHeader_RegularSizeblock checksum部分的crc值。这样通过两个checksum来分别保证页头和数据部分的正确性。我们看下计算流程:计算时先计算block checksum,存储位置位于第1个crc的位置,计算内容从firstRowNum开始的所有数据。接着计算header checksum,存储位置位于第2个crc位置,计算内容从页头开始一直到第一个crc的结尾。AppendOnlyStorageFormat_AddBlockHeaderChecksums函数计算checksum

再看下,什么时候进行校验:

也就是当从磁盘上加载上来列内容后,会立即通过函数


AppendOnlyStorageFormat_VerifyHeaderChecksum

进行页头的checksum校验,然后读取块内容时调用函数


AppendOnlyStorageFormat_VerifyBlockChecksum

进行block checksum校验。

目录
相关文章
|
9月前
GPDB6和GPDB7直连primary命令的不同
GPDB6和GPDB7直连primary命令的不同
72 0
|
9月前
|
存储 关系型数据库 数据库
How to Optimize PostgreSQL Logical Replication
How to Optimize PostgreSQL Logical Replication
53 0
How to Optimize PostgreSQL Logical Replication
|
9月前
|
SQL NoSQL 数据库
GPDB中gp_vmem_protect_limit参数的意义
GPDB中gp_vmem_protect_limit参数的意义
103 0
|
存储 监控 算法
PostgreSQL checksum
在计算机系统中,[checksum](https://en.wikipedia.org/wiki/Checksum) 通常用于校验数据在传输或存取过程中是否发生错误。PostgreSQL 从 9.3 开始支持 checksum,以发现数据因磁盘、 I/O 损坏等原因造成的数据异常。
3795 0
|
关系型数据库 数据库 SQL
PostgreSQL Logical Replication
限制及特性 1、只支持普通表生效,不支持序列、视图、物化视图、外部表、分区表和大对象 2、只支持普通表的DML(INSERT、UPDATE、DELETE)操作,不支持truncate、DDL操作 3、需要同步的表必须设置REPLICA IDENTITY 不能为noting(默认值是default).
8714 0
|
存储 关系型数据库 MySQL
|
关系型数据库 MySQL RDS
Generation and Handling of Metadata Locks on RDS for MySQL Tables
MySQL uses metadata locking to manage concurrent access to database objects and to ensure data consistency.
2456 0