昨晚技术分享当中,那个实验由于我虚拟机环境问题,一直有问题。
今天用公众号把这部分实验过程与大家分享 (*^▽^*)
检查点作用
1.将事务提交的修改写进disk(写脏数据);保证数据库的完整性和一致性。
2.缩短恢复时间,将脏页写入相应的数据文件,确保修改后的文件通过fsync()写入到磁盘。
检查点触发条件
1.checkpoint_timeout 设置的间隔时间自上一个检查点已经过去(默认间隔为 300 秒(5分钟))。
2.在 9.4 或更早版本中,为checkpoint_segments设置的 WAL段文件的数量自上 一个检查点以来已经被消耗(默认数量为 3)。
3.在 9.5 或更高版本中,pg_xlog(在 10 或更高版本中为 pg_wal)中的WAL 段 文件的总大小已超过参数max_wal_size的值(默认值为 1GB(64 个文件))。
4.PostgreSQL 服务器在smart或fast模式下停止。
5.当超级用户手动发出 CHECKPOINT 命令时,它的进程也会这样做。
6.写入WAL的数据量已达到参数max_wal_size(默认值:1GB)。
7.执行pg_start_backup函数时。
8.在进行数据库配置时(例如CREATE DATABASE DROP DATABASE语句)。
实验1
CREATE DATABASE 是否会触发检查点?
通过pg_waldump工具分析WAL段文件来确定下。
1.确定下当前实例的Redo point LSN和最近一笔checkpoint在wal段中的xlog记录LSN位置。
postgres@pg01-> pg_controldata
Latest checkpoint location: 0/310000D8(最近一笔checkpoint在wal段中的xlog记录LSN位置)
Latest checkpoint's REDO location: 0/310000D8(Redo point LSN)
Latest checkpoint's REDO WAL file: 000000010000000000000031(当前WAL段文件)
2.创建数据库
postgres=# create database test;
CREATE DATABASE
3.创建数据库之后,重新查询Redo point LSN和最近一笔checkpoint在wal段中的xlog记录LSN位置的值
postgres@pg01-> pg_controldata
Latest checkpoint location: 0/31001A10(最近一笔checkpoint在wal段中的xlog记录LSN位置)
Latest checkpoint's REDO location: 0/310019D8(Redo point LSN)
Latest checkpoint's REDO WAL file: 000000010000000000000031
4.比对CREATE DATABASE后Latest checkpoint location位置
Latest checkpoint location
CREATE DATABASE之前0/310000D8
CREATE DATABASE之后0/31001A10
说明CREATE DATABASE会触发检查点
复制
实验2
通过pg_waldump解析wal段文件,来解析CREATE DATABASE后检查点的执行情况。
CREATE DATABASE之前
Latest checkpoint's REDO location: 0/310000D8(Redo point LSN)
CREATE DATABASE之后
Latest checkpoint's REDO location: 0/310019D8(Redo point LSN)
CREATE DATABASE WAL段文件
Latest checkpoint's REDO WAL file: 000000010000000000000031
解析
pg_waldump -p opt/pg_root/pg_wal -s 0/310000D8 000000010000000000000031
截取 0/310000D8这个重做点LSN位置之后的部分WAL中的XLOG日志:
rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 0/31001930, prev 0/310018F8, desc: CHECKPOINT_ONLINE redo 0/310018F8; tli 1; prev tli 1; fpw true; xid 0:2578; oid 32928; multi 1; offset 0; oldest xid 480 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 2577; online
rmgr: Database len (rec/tot): 42/ 42, tx: 2577, lsn: 0/310019A8, prev 0/31001930, desc: CREATE copy dir 1663/1 to 1663/24736
rmgr: Standby len (rec/tot): 54/ 54, tx: 0, lsn: 0/310019D8, prev 0/310019A8, desc: RUNNING_XACTS nextXid 2578 latestCompletedXid 2576 oldestRunningXid 2577; 1 xacts: 2577
rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 0/31001A10, prev 0/310019D8, desc: CHECKPOINT_ONLINE redo 0/310019D8; tli 1; prev tli 1; fpw true; xid 0:2578; oid 32928; multi 1; offset 0; oldest xid 480 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 2577; online
rmgr: Transaction len (rec/tot): 66/ 66, tx: 2577, lsn: 0/31001A88, prev 0/31001A10, desc: COMMIT 2021-10-14 23:34:01.752146 EDT; inval msgs: catcache 21; sync
rmgr: Standby len (rec/tot): 50/ 50, tx: 0, lsn: 0/31001AD0, prev 0/31001A88, desc: RUNNING_XACTS nextXid 2578 latestCompletedXid 2577 oldestRunningXid 2578
分析部分信息
rmgr: XLOG desc: CHECKPOINT_ONLINE
rmgr: Database desc: CREATE copy dir 1663/1 to 1663/24736
postgres=# select oid,datname from pg_database where datname='test';
oid | datname
-------+-----------
24736 | test
rmgr: XLOG desc: CHECKPOINT_ONLINE
rmgr: Database中的24736记录的就是test的oid值。
通过wal段文件内容也可以分析出create database会触发检查点。
复制
文章转载自CP的PostgreSQL厨房,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
外国CTO也感兴趣的开源数据库项目——openHalo
小满未满、
1903次阅读
2025-04-21 16:58:09
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
381次阅读
2025-04-15 14:48:05
转发有奖 | PostgreSQL 16 PGCM高级认证课程直播班招生中!
墨天轮小教习
196次阅读
2025-04-14 15:58:34
中国PostgreSQL培训认证体系新增PGAI应用工程师方向
开源软件联盟PostgreSQL分会
189次阅读
2025-05-06 10:21:13
华象新闻 | PostgreSQL 18 Beta 1、17.5、16.9、15.13、14.18、13.21 发布
严少安
167次阅读
2025-05-09 11:34:10
4月“墨力原创作者计划”获奖名单公布!
墨天轮编辑部
166次阅读
2025-05-13 16:21:59
PG生态赢得资本市场青睐:Databricks收购Neon,Supabase融资两亿美元,微软财报点名PG
老冯云数
151次阅读
2025-05-07 10:06:22
SQL 优化之 OR 子句改写
xiongcc
146次阅读
2025-04-21 00:08:06
告别老旧mysql_fdw,升级正当时
NickYoung
127次阅读
2025-04-29 11:15:18
QPlus V6.3 更新,新增PostgreSQL与PolarDB PG支持,OceanBase 容灾管理重磅上线
沃趣科技
119次阅读
2025-05-13 09:39:27