前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pgsql的数据可靠性

pgsql的数据可靠性

原创
作者头像
风起--追风
发布2023-09-14 16:50:37
2220
发布2023-09-14 16:50:37
举报
文章被收录于专栏:sql与spec性能

pgsql目前是最大的开源数据库,集成了mysql与mongodb的特性,并且可以实现数据零丢失,支持同步复制,异步复制,延迟复制,兼容多种数据类型json,数组,以及自定义函数等。

一. pgsql存储过程

》1. 数据块写入buffer_pool,用户执行insert,update,delete等语句时,数据更改不会立即刷新到磁盘

》2. buffer_pool预写到WAL日志,WAL日志类似于ORACLE REDO日志保证数据的一致和完整性,以追加的形式记录数据的更改

》3. WAL日志通过fsync和checkpoint,刷新到磁盘,checkpoint会以backend进程形式,将buffer_pool中的脏数据写入磁盘。

二. 如何保证数据的可靠性

pgsql的数据页大小是8K,linux文件系统页大小是4K或8K(getconf PAGE_SIZE查询),数据页大小是8K,磁盘扇区是512B,因此在数据页并发写入磁盘时每个io由于写入扇区不同,可能因为传输或硬件故障等原因导致写入失败,一部分写入,一部分未写入;

针对对数据可靠性要求较高的环境,可以通过full_page_writes和check_sum配置来保证数据的可靠性

full_page_writes:全页写,在最近一次checkpoint时会将WAL日志的数据页进行整页拷贝,这样即使在数据缺失、系统崩溃时,也可以通过WAL日志来进行完整数据页的恢复

check_sum:数据块的校验功能,对数据页进行复制,在buffer_pool进入前后会进行check sum计算,写入内存时会进行check sum并与数据页进行比对,刷盘时也会进行check_sum,其目的是保证数据的完整,一致性。

三. 如何设置check_sum

1. 在数据库初始化时

initdb -k

2. 利用pg_checksums

pg_ctl stop -D /home/pgdata #关闭服务

pg_checksums -e -P -D /home/pgdata

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. pgsql存储过程
  • 二. 如何保证数据的可靠性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档