- 浏览: 232268 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
chenxliang:
2016年10月26、27日,上海浦东,Postgres中国用 ...
PostgreSQL的用户、角色和权限管理 -
gejiod:
最近出了SQL:2011標準,希望樓主也更新下
SQL2008标准 -
lincon77:
太长了,又是E文,要是有些例子可能好理解些
SQL2003标准 -
少主丶无翼:
很谢,找了很久
SQL2003标准 -
zeeeitch:
...
PostgreSQL启动过程中的那些事七:初始化共享内存和信号二十:shmem中初始化堆同步扫描、pg子进程相关结构
Pg 控制文件 pg_control 里存储的数据是一个 ControlFileData 结构。 控制文件尽量保持小于 512 个字节以使其适合一个典型的磁盘驱动的物理簇的大小。这会减少由于电源故障而写控制文件直接失败的可能性。但控制文件的物理大小是 8K ,这个远大于 512 个字节。这样做是为了控制文件格式变化时保持物理大小不变,如果正在读一个不兼容的文件,以使 ReadControlFile 能传递一个合适的错误版本控制文件信息而代替一个读错误。系统里定义了和自己匹配的控制文件版本变量 PG_CONTROL_VERSION ,启动时会做系统和控制文件的匹配校验。
1
控制文件里存储了唯一系统标识符、系统状态数据、数据库启动前系统必须恢复到的最小点、检查服务器硬件架构计算能力的字节排序和浮点数格式、数据库的配置兼容 backend 进程执行的参数、指明类型 timestamp 、 interval 、 time 内部格式的标志、指明不同类型传值( pass-by-value )状态的标志以及所有这些信息的经验和。具体见下面 ControlFileData 结构。
typedef struct ControlFileData
{
/* 唯一系统标识符——保证控制文件和产生 XLOG 文件的数据库一致 */
uint64 system_identifier ;
/*
版本标识符信息。保持这些制度在同一个偏移量,特别是 pg_control_version ;如果它们改变了他们就不再有用。(由于历史原因他们必须在文件里是 8 字节,而不是在最前面。)
pg_control_version 标识 pg_control 自身的格式。
catalog_version_no 标识系统 catalog 的格式。
在私有文件里有额外的版本标识符;例如, WAL 日志文件每页包含的 magic 数可以作为 WAL 日志的版本。
*/
uint32 pg_control_version ; /* PG_CONTROL_VERSION */
uint32 catalog_version_no ; /* see catversion.h */
/* 系统状态数据 */
DBState state ; /* see enum above */
pg_time_t time ; /* time stamp of last pg_control update */
XLogRecPtr checkPoint ; /* last check point record ptr */
XLogRecPtr prevCheckPoint ; /* previous check point record ptr */
CheckPoint checkPointCopy ; /* copy of last check point record */
/*
这两个值确定数据库启动前我们必须恢复到的最小点:
我们在归档恢复期间刷出数据的时候 minRecoveryPoint 被更新到最后重放的 LSN 。这保证了归档恢复,退出并且在更早的停止位置启动 并恢复到这个位置。如果我们已经从内存里把新的 WAL 记录 X 刷出到磁盘,没有到达 X 我们决不能启动。没有做归档恢复时 minRecoveryPoint 是 0
backupStartPoint :如果我们正在从在线备份恢复而且还没有到达备份的结尾, backupStartPoint 是备份开始检查点的 redo 指针。到达备份结尾后置 backupStartPoint 为 0 并且到达它之前我们不能启动数据库。负责一个布尔值就足够了,但是当我们看到一个 end-of-backup 记录时我们用这个 redo 指针做检查,以保证这个 end-of-backup 记录是我们正在基于其恢复的那个基础备份。
*/
XLogRecPtr minRecoveryPoint ;
XLogRecPtr backupStartPoint ;
/* 确定 WAL 能被用于归档或双机热备的参数设置 */
int wal_level ;
int MaxConnections ;
int max_prepared_xacts ;
int max_locks_per_xact ;
/*
这些数据用来检查数据库和 backend 进程在其上执行的硬件架构计算能力。我们不需要显式检查字节顺序( endianness ),因为对于一个不同字节顺序的机器控制文件版本会看到问题,但我们需要担心字节对齐和浮点格式。(注意:磁盘存储布局通常依赖于 SHORTALIGN 和 INTALIGN ,但实际上在所有感兴趣的架构上它们是相同的。)
对于浮点兼容仅测试一个 double 值不是个刀枪不入的测试,但会满足大多数场合。
*/
uint32 maxAlign ; /* alignment requirement for tuples */
double floatFormat ; /* constant 1234567.0 */
#define FLOATFORMAT_VALUE 1234567.0
/* 这些数据用来确保数据库的配置兼容 backend 进程执行 */
uint32 blcksz ; /* data block size for this DB */
uint32 relseg_size ; /* blocks per segment of large relation */
uint32 xlog_blcksz ; /* block size within WAL files */
uint32 xlog_seg_size ; /* size of each WAL segment */
uint32 nameDataLen ; /* catalog name field width */
uint32 indexMaxKeys ; /* max number of columns in an index */
uint32 toast_max_chunk_size ; /* chunk size in TOAST tables */
/* 指明内部 timestamp 、 interval 、 time 内部格式的标志 */
bool enableIntTimes ; /* int64 storage enabled? */
/* 指明不同类型 pass-by-value 状态的标志 */
bool float4ByVal ; /* float4 pass-by-value? */
bool float8ByVal ; /* float8, int8, etc pass-by-value? */
/* CRC of all above ... MUST BE LAST! */
pg_crc32 crc ;
} ControlFileData;
其中的成员 state 、 checkPointCopy 、 checkPoint 、 prevCheckPoint 、 minRecoveryPoint 、 backupStartPoint 需要说明
2
成员 state 是 DBState 枚举类型变量。作系统状态指示器。存储于控制文件,如果改变了该枚举类型,必须修改控制文件版本和系统内变量 PG_CONTROL_VERSION 。 定义见下面。
typedef enum DBState
{
DB_STARTUP = 0,
DB_SHUTDOWNED ,
DB_SHUTDOWNED_IN_RECOVERY ,
DB_SHUTDOWNING ,
DB_IN_CRASH_RECOVERY ,
DB_IN_ARCHIVE_RECOVERY ,
DB_IN_PRODUCTION
} DBState ;
3
成员 checkPointCopy 是 CheckPoint 类型变量,就是常说的检查点,是最后的那个检查点的拷贝,以备灾难恢复是使用,改变该结构定义要求改变控制文件版本和系统内变量 PG_CONTROL_VERSION 。定义见下面。
typedef struct CheckPoint
{
XLogRecPtr redo ; /* 开始创建一个检查点时下一个 XLOG 记录的位置 */
TimeLineID ThisTimeLineID ; /* 当前时间线 */
uint32 nextXidEpoch ; /* 下一个事务 ID 的高排序位 */
TransactionId nextXid ; /* 下一个空闲事务 ID */
Oid nextOid ; /* 下一个空闲 OID */
MultiXactId nextMulti ; /* 下一个空闲多事务 ID */
MultiXactOffset nextMultiOffset ; /* next free MultiXact offset */
TransactionId oldestXid ; /* cluster-wide minimum datfrozenxid */
Oid oldestXidDB ; /* database with minimum datfrozenxid */
pg_time_t time ; /* 检查点时间戳 */
/*
仍在运行的最早的事务 ID ( XID )。只有在从一个在线检查点初始化热备模式时才需要,以使在 GUC 参数 wal_level 是 hot_standby 时我们不用为在线检查点计算运行最早的 XID 。否则设置为常量 InvalidTransactionId 。
*/
TransactionId oldestActiveXid ;
} CheckPoint ;
4
成员 checkPoint 、 prevCheckPoint 、 minRecoveryPoint 、 backupStartPoint 是 XLogRecPtr 结构类型的变量。先看 XLogRecPtr 结构类型,用于记录 XLOG 记录在 XLOG 日志文件中的位置,下面是其结构定义:
typedef struct XLogRecPtr
{
uint32 xlogid ; /* 逻辑 XLOG 日志文件 ID ,从 0 开始 */
uint32 xrecoff ; /* 在 XLOG 日志文件里的字节偏移量 */
} XLogRecPtr ;
注意:这儿容易引起理解错乱,这个 xlogid (对应实际 XLOG 文件名字的中间八位)表示逻辑 XLOG 日志文件 ID ,因为组成 XLOG 逻辑文件的实际物理文件远小于 4Gb 。组成对应这个 xlogid 的逻辑日志文件的每一个实际物理文件是一个 XLogSegSize 字节大小的“段”( "segment" ,段号是实际 XLOG 文件名字的后八位)。前面加上用八位表示的一个时间线 ID 、逻辑日志文件号和段号一起标识一个物理的 XLOG 日志文件(“段”)。段号和物理文件里的偏移量由 xrecoff/XLogSegSize 和 xrecoff%XLogSegSize 计算。
checkPoint 表示最后的检查点记录指针、 prevCheckPoint 表示最后检查点的前一个检查点记录指针、 minRecoveryPoint 表示数据库从归档恢复的时候的最小恢复点、 backupStartPoint 表示数据库从备份恢复的时候的备份起始点。
------------
转载请著明出处,来自博客:
blog.csdn.net/beiigang
beigang.iteye.com
发表评论
-
PostgreSQL服务过程中的那些事三:pg服务进程中的内存上下文
2012-12-31 15:07 2074题外话:年底了,就以这篇博文结束2012 ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询六:执行器执行
2012-11-07 20:13 1851话说 查询“ select c ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询五:规划成plantree
2012-10-31 20:37 1753话说 查询“ select cname, comp ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询四:分析重写成querytree
2012-10-24 19:27 1440话说 查询“ select cname, comp ... -
postgresql 小技巧
2012-10-16 19:36 1410Note : #PostgreSQL and ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询三:获取内存快照
2012-10-16 19:31 1765话说 查询“ select cname, comp ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询二:SQL解析为parsetree
2012-10-09 19:50 1558话说 查询“ select cname, comp fr ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询一:开启事务
2012-09-25 19:55 1900在《 PostgreSQL 服务过程中的那些事二: ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.八:加载DB基础设施,完成服务进程初始化
2012-09-18 21:02 1810话说调用 InitPostgres ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.七:初始化portal管理环境
2012-09-11 19:58 1643话说调用 In ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.六:初始化系统表缓存catcache
2012-09-04 20:51 1873话说调用 InitPostgres ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.五:初始化relcache管理环境
2012-08-28 20:47 1327话说调用 InitPostgres ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程三:初始化relcache管理环境
2012-08-28 20:46 0<!-- [if gte mso 9]><x ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询梗概
2012-08-21 21:04 1266话说客户端发起请求, pg 服务器为该请求启动一个 ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程二:建立连接完成
2012-08-13 18:50 15843 这节主要讨论 pg 服务进程 pos ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一
2012-08-08 14:42 5717到pg 服务进程了,打算搞一个完整但简单的查询例子,从 ... -
PostgreSQL启动过程中的那些事十九:walwriter进程二
2012-08-03 16:53 13873 这节主要讨论 walwrit ... -
PostgreSQL启动过程中的那些事十九:walwriter进程一
2012-08-01 17:26 1628话说 main()->Po ... -
PostgreSQL启动过程中的那些事十八:bgwriter进程二
2012-07-27 07:25 14403 这节主要讨论 bgwr ... -
PostgreSQL启动过程中的那些事十八:bgwriter进程一
2012-07-23 20:18 1658话说 main()->Postm ...
相关推荐
本文档将通过一系列的图片和示例,深入探讨PostgreSQL的内部存储结构,主要包括内部存储方式、索引结构以及系统表之间的关系等内容。 #### 二、内部存储方式 PostgreSQL的存储结构主要分为以下几个层次: 1. **...
【PostgreSQL 体系结构与特色】 PostgreSQL,作为大数据时代备受推崇的数据库系统,是由加州大学伯克利分校计算机系于90年代开发的。这个学府同样孕育了如Spark这样的大数据处理框架,其在数据库领域的影响力...
PostgreSQL 是一个强大的开源关系型数据库管理系统,其存储结构对于理解和优化数据库性能至关重要。本文将深入探讨 PostgreSQL 的存储结构,特别是“Heap File”,也就是堆表。 堆表是 PostgreSQL 中存储数据的基本...
文件分布体系结构: 在服务器端,PostgreSQL的数据文件和配置文件有其特定的存储位置和结构。数据文件通常保存在数据目录中,其中包括基础文件、临时文件、索引文件、表文件等。配置文件则包含了控制服务器行为的...
对于开发者来说,这个源码是一个很好的学习资源,可以帮助理解文件存储系统的实现细节,提升Web开发能力。同时,也可根据实际需求,对源码进行二次开发,定制符合特定业务场景的服务。 总的来说,这款2023年最新...
1. PostgreSQL的表结构: - 创建表:使用`CREATE TABLE`语句定义表的结构,包括表名、字段类型及约束条件。例如,创建一个名为`products`的表,其中包含产品编号(product_no)、名称(name)和价格(price)三个...
PostgreSQL是一款开源的关系型数据库管理系统(RDBMS),以其强大的功能、高度的可扩展性和稳定性而受到广泛赞誉。它支持SQL标准,并提供丰富的数据类型和高级编程接口,使得开发者能够构建复杂的应用程序。 **...
当这些代码经过编译、链接等步骤形成可执行文件,并在操作系统中运行起来后,就被赋予了一个新的身份——进程。进程不仅包含了程序的代码,还包括了数据、内存映射以及操作系统为其分配的资源等。 **进程创建**: - ...
文件存储(如NFS、CIFS)保留了文件系统的层次结构,适合存储和共享文件。NoSQL数据库(如MongoDB、Cassandra)则提供了一种灵活的数据模型,可以存储半结构化或非结构化数据,适用于处理大规模、高性能的数据场景。...
- **文件存储 (File Storage)**:包括数据文件、索引文件等。 - **实用工具进程 (Utility Processes)**:如备份、恢复等特殊任务。 #### 二、进程结构 PostgreSQL 采用的是“每个用户一个进程”的模型。这是因为:...
3. PostgreSQL逻辑存储结构: 在PostgreSQL中,数据库(Database)指的是存储数据和相关对象的物理文件集合。实例(Instance)是操作系统进程的一系列集合以及这些进程所管理的内存区域。集群(Cluster)则是指一组...
PostgreSQL是一个开放源代码的对象关系数据库系统(ORDBMS),它具有强大的功能和灵活性,支持广泛的SQL标准,并且能够处理大量的数据。作为一个开源数据库,PostgreSQL拥有活跃的社区和丰富的文档资源。 DBA...
PostgreSQL是一种开源的对象关系型数据库管理系统,其体系结构复杂而精细,旨在提供高效、稳定且功能丰富的数据存储和管理解决方案。以下将详细解析PostgreSQL的主要组成部分及其作用。 1. **核心组件** - **...
PostgreSQL是一种开源的对象关系型数据库管理系统(ORDBMS),它以其强大的功能、高度的稳定性、良好的社区支持和丰富的数据类型而闻名。标题“postgresql”直接指出了我们要讨论的主题,即PostgreSQL数据库系统。...
PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性和可靠性而受到全球开发者的广泛赞誉。在标题和描述中提到的“postgresql 12、15离线安装包”指的是为这两个版本提供的安装程序,适用于没有互联网...
数据库管理系统(DBMS)是用于存储和管理数据的应用程序,而PostgreSQL作为一款DBMS,支持多种数据类型,如字符串、整数、浮点数、日期/时间、二进制数据以及自定义类型。它还支持事务处理,确保数据的一致性和完整...
PostgreSQL是一种开源的关系型数据库管理系统,因其强大、稳定和灵活的特性而被广泛使用。离线安装意味着在没有网络连接的情况下进行安装,这对于网络环境受限或者安全要求较高的环境尤其重要。 【描述】:描述中...
PostgreSQL 是一个强大的开源关系型数据库管理系统,以其稳定性和丰富的功能在IT行业内备受推崇。这里的“postgresql-9.1.11-1-windows-binaries”指的是PostgreSQL的9.1.11版本针对Windows操作系统的二进制发行版,...