`
yayafenghua
  • 浏览: 3081 次
  • 性别: Icon_minigender_2
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

postgresql检查点

阅读更多
1 Checkpoint作用
1.1将事务提交的修改写进disk(写脏数据);保证数据库的完整性和一致性。
1.2缩短恢复时间

2 checkpoint所用结构体
typedef struct CheckPoint
{
XLogRecPtr redo;//创建检查点时记录xlog插入位置
TimeLineID ThisTimeLineID;
uint32 nextXidEpoch;
TransactionId  nextXid;
Oid nextOid;
         MultiXactId   nextMulti; MultiXactOffset nextMultiOffset;
TransactionId  oldestXid;
Oid oldestXidDB; pg_time_t      time;

TransactionId    oldestActiveXid;
} CheckPoint;

XLogRecPtr  //记录文件内的位置(文件名和文件内偏移)
typedef struct XLogRecPtr
{
uint32 xlogid; /* log file #, 0 based */
uint32 xrecoff; /* byte offset of location in log file */
} XLogRecPtr;

3 checkpoint's position
the checkpoint's position is saved in the file pg_control and log
when pg_control corrupt
To deal with the case where pg_control is corrupt, we should support the possibility of scanning existing log segments in reverse order — newest to oldest — in order to find the latest checkpoint

4checkpoint执行控制
4.1,数据量达到checkpoint_segments(=3)*16M时,系统自动触发;
4.2,时间间隔达到checkpoint_timeout参数值时;
4.3,用户发出checkpoint命令时。

5 创建一个检查点
5.1是recptr是pg_contrl中checkpoint中的recptr进行赋值(如果pg_control中关于checkpoint的记录是正确的话)。
5.2如果pg_control中recptr的记录是不正确的,则checkpoint.recptr = {0}。

// redo保存了xlog的当前插入transaction log位置。
5.2.1INSERT_RECPTR(checkPoint.redo, Insert, Insert->curridx);
其中Insert为:XLogCtlInsert *Insert = &XLogCtl->Insert;
5.2.2checkPoint.nextXid = ShmemVariableCache->nextXid;
5.2.3checkPoint.oldestXid = ShmemVariableCache->oldestXid;
5.2.4checkPoint.oldestXidDB = ShmemVariableCache->oldestXidDB;
6 Flush all data in shared memory to disk, and fsync
实现函数static void
CheckPointGuts(XLogRecPtr checkPointRedo, int flags)
{
CheckPointCLOG();
CheckPointSUBTRANS();
CheckPointMultiXact();
CheckPointPredicate();
// CheckPointRelationMap();
CheckPointBuffers(flags); /* performs all required fsyncs */
/* We deliberately delay 2PC checkpointing as long as possible */
CheckPointTwoPhase(checkPointRedo);
}
保证redo之前的日志记录的数据修改都刷新到数据库磁盘文件中。

Xlog文件随时间的变化        current insertion point
----------------------------------------------------------------->
            数据是一致性            |            数据一致性未知
                               CheckPoint中的redo
创建checkPoint时,首先获取redo位置,然后保证redo之前的xlog记录的修改都刷新到数据磁盘文件中。这样保证的checkPoint左的数据库文件一致性。如果在checkPoint后需要recovery,只需要redo位置向右replay xlog。

4 Now insert the checkpoint record into XLOG.
4.1  rdata.data = (char *) (&checkPoint);
rdata.len = sizeof(checkPoint);
rdata.buffer = InvalidBuffer;
rdata.next = NULL;

4.2 insert
recptr = XLogInsert(RM_XLOG_ID,
shutdown ? XLOG_CHECKPOINT_SHUTDOWN :
XLOG_CHECKPOINT_ONLINE,
&rdata);

4.3 flush to disk
Ensure that all XLOG data through the given position is flushed to disk.
XLogFlush(recptr);

结束一个检查点
把一些统计信息写到LOG(= 15)中。

欢迎批评指正~_~
分享到:
评论

相关推荐

    Postgresql-10安装包

    本文将详细介绍如何使用提供的 PostgreSQL-10 安装包进行安装,以及在安装过程中可能遇到的关键知识点。 **一、PostgreSQL 10 的特性** 1. **并行查询优化**:PostgreSQL 10 引入了并行查询功能,使得大型表的扫描...

    PostgreSQL 行可见性验证

    Clog的维护包括在数据库正常关闭或检查点发生时将数据写入文件,以及在数据库启动时加载pg_xact文件中的数据。 在数据库系统中,为了保证并发事务的正确性和隔离性,数据库系统必须提供一套规则来确定哪些数据是...

    PostgreSQL博客1

    2. **后台工作者**:包括检查点进程、归档进程、统计收集器、Wal Writer等,它们执行各种后台任务,确保数据库的正常运行和维护。 3. **前端/后端进程**:当用户连接到PostgreSQL时,服务器创建一个后端进程来处理...

    Internals Of PostgreSQL Wal.pdf

    - Bgwriter(后台写入器):用于刷新共享缓冲区和执行检查点。 - Clog(提交日志):在事务状态缓冲区上下文中使用。 - 分页写入问题:当操作系统无法在磁盘文件中写入部分页面时可能导致数据损坏。 PostgreSQL的...

    PostgreSQL 运行状况检查和 SQL 性能分析

    进行 PostgreSQL 的运行状况检查和 SQL 性能分析是确保数据库高效、稳定运行的关键环节。以下是对这些知识点的详细阐述: 1. **运行状况检查**: - **监控指标**:监控包括CPU使用率、内存使用情况、磁盘I/O、网络...

    MySQL和PostgreSQL的比较

    PostgreSQL同样支持在线与离线备份、崩溃、时间点和事务恢复,且能实现热备份,其写前日志在数据目录的子目录中维护。 #### 八、JDBC驱动程序 MySQL与PostgreSQL均提供了JDBC驱动程序,允许Java应用程序访问数据库...

    postgresql8.2.3用户手册API

    《postgresql8.2.3用户手册API》是PostgreSQL数据库系统在8.2.3版本中的应用程序编程接口(API)的详细指南。...通过深入学习并熟练掌握这些知识点,开发者能够高效地构建与PostgreSQL数据库交互的应用程序。

    PostgreSQL-9.2.4-1-windows-x64.rar

    13. **监控与日志**:定期检查PostgreSQL的日志文件,了解系统性能和错误信息,使用工具如pg_stat_activity监控数据库活动。 14. **扩展功能**:PostgreSQL 9.2.4支持多种扩展,如全文搜索、GIS支持等,可以根据...

    presto部署并连接postgresql

    在使用Presto连接PostgreSQL时,需要注意以下几点: - **权限和安全**:确保PostgreSQL用户有执行查询的权限,并考虑使用SSL连接以增强安全性。 - **性能优化**:根据你的数据规模和查询需求,可能需要调整Presto的...

    postgreSQL

    PostgreSQL的特性包括但不限于以下几点: 1. **ACID合规性**:PostgreSQL严格遵循ACID(原子性、一致性、隔离性、持久性)原则,确保在事务处理中的数据完整性。 2. **多版本并发控制(MVCC)**:PostgreSQL采用...

    Linux环境PostgreSQL源码编译安装1

    以下是对PostgreSQL在Red Hat 6.5上进行源码编译安装的详细步骤和相关知识点: 首先,确保系统已经安装了必要的依赖项,如GCC编译器,可以通过运行`yum install gcc`来安装。这里使用的PostgreSQL版本为9.6.2,需要...

    postgresql和postgis安装包

    例如,你可以使用`ST_GeomFromText()`函数来创建几何对象,用`ST_Distance()`计算两点之间的距离,或者用`ST_Contains()`检查一个区域是否包含另一个区域。 8. **优化和备份**:为了保证数据安全和性能,定期备份...

    postgresql-9.3.1 安装包 linux

    在Linux环境下安装`postgresql-9.3.1`版本,你需要了解以下几个关键知识点: 1. **下载与解压**:首先,你需要从官方或可靠的源下载`postgresql-9.3.1.tar.gz`这个压缩包文件。在Linux终端中,你可以使用`wget`命令...

    PostgreSQL9.6x64-HaoSQL

    在PostgreSQL 9.6中,主要包含以下关键知识点: 1. **性能提升**:PostgreSQL 9.6通过引入并行查询功能,显著提高了处理大数据集的能力。这一特性允许数据库在执行某些查询时,利用多核CPU的计算能力,从而加快处理...

    postgresql 总结

    以下是关于 PostgreSQL 安装部署中需要注意的一些核心知识点: 1. **字符编码和区域设置**: - `locale`:在初始化数据库(`initdb`)时,locale 参数非常重要,它决定了数据库的字符排序规则和字符类型。例如,`...

    postgreSQLwindows

    2. **空间数据操作**: 安装PostGIS后,你可以创建和操作地理对象,如点、线、面等。利用PostGIS的函数和方法,可以进行空间查询、分析和地理编码。 3. **GIS应用开发**: PostGIS为Web和桌面GIS应用提供了丰富的接口...

    Go-PostgreSQLBGWorker用Go编写的PostgreSQL后台工作进程

    创建一个Go编写的PostgreSQL BGWorker,你需要熟悉以下几个关键点: 1. **注册BGWorker**:在PostgreSQL中,你需要在共享内存中注册你的BGWorker,声明它的功能和启动条件。这通常通过`bgworker.h`头文件中的API...

    MySQL与PostgreSQL数据库高可用分析实践.pdf

    本文档详细介绍了MySQL和PostgreSQL数据库高可用的分析实践,涵盖了高可用原理、MySQL高可用和PostgreSQL高可用等方面的知识点。 一、高可用原理 高可用是指系统在无中断的情况下执行其功能的能力,是进行系统设计...

    flink cdc postgresql

    5. **监控与故障恢复**:通过Flink的检查点和状态管理,确保即使在故障后也能从最后一个已知状态恢复,保持数据一致性。 在文件名“gridvo-flink-cdc”中,“gridvo”可能是特定的项目名称或工具,可能与Flink CDC...

    Oracle至PostgreSQL数据库迁移方案.pptx

    下面是该方案的详细知识点: 一、Ora2PG简介 Ora2PG是一个Perl语言编写的开源工具,用于将Oracle或MySQL数据库迁移到PostgreSQL数据库。它连接Oracle数据库,自动扫描并提取其结构或数据,然后生成可以加载到...

Global site tag (gtag.js) - Google Analytics