暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL学习随笔6 实验 检查触发条件之create database

648

昨晚技术分享当中,那个实验由于我虚拟机环境问题,一直有问题。

今天用公众号把这部分实验过程与大家分享 (*^▽^*)

检查点作用

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'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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论