优点: 使用MVCC的主要优点是对检索(读取)数据的锁请求与写数据的锁请求并不冲突,
所以读不会阻塞写, 而写也从不阻塞读. 这就极大地提升了并发处理能力.
日志是数据库系统必不可少的一部分, 它以一种安全的方式记录数据库变更的历史.
当系统出现故障后, 数据库系统通过使用日志来重建对数据库所做更新的过程,
以恢复数据库到一致状态, 从而保证数据库的一致性和完整性.
4个:
XLOG 事务日志
CLOG 提交日志
SUBTRANS (子事务日志)
MULTIXACT(组合事务日志)
已经有XLOG, 为什么还要CLOG呢XLOG是一般的日志记录, 即通常意义上所认识的(数据库事务)日志记录,
它记录了事务对数据库更新的过程和事务的最终状态.
CLOG在一般的数据库教材上是没有提及的, 其实CLOG是XLOG的一种辅助形式,
记录了事务的最终状态. 因为每一条XLOG日志记录相对较大,
如果需要通过日志判断一个事务的状态, 那么使用CLOG比使用XLOG要高效的多.
同时CLOG占用的空间也非常有限.
此外, 为支持嵌套事务, PG还引入了SUBTRANS日志记录----即子事务日志,
记录每个事务的父事务的事务ID, 这样通过一个事务可以递归查找到其父事务,
但是并不能通过一个事务查找到其子事务.
同时, 为了支持多版本并发控制, PG引入了组合事务ID(MultiXactID),
记录事务的组合关系, 并维持从众多事务ID到MultiXactId的映射关系.
在PG中, 日志通过日志文件来存放. 如果每个日志记录在创建时都被立即写到磁盘上,
那么将增加大量的I/O开销. 因为通常向磁盘的写入是以(数据)块为单位进行的,
而在大多数情况下, 一个日志记录比一个块小得多, 为了降低写入日志带来的I/O开销,
数据库系统在实现时往往设置了日志缓冲区, 即先将日志记录写到主存中的日志缓冲区中,
当日志缓冲区满了以后以块为单位向磁盘写出.
否.
在数据库系统中,
日志缓冲区通过日志管理器来管理.数据库系统并不直接操作磁盘日志文件,
一般是通过日志缓冲区来使用日志文件,
而缓冲区和磁盘之间的交互,同步则由日志管理器来完成.
PG有四种日志管理器, 即XLOG(事务日志), CLOG(事务提交日志),
SUBTRANS(子事务日志)以及MULTIXACT(组合事务日志).
PG通过一种缓冲区来实现对CLOG日志, SUBTRANS日志以及MULTIXACT日志的管理,
即SLRU缓冲池----采用简单LRU(Last Recently Used)算法作为页面转换算法的缓冲池.
不是.
如果要获取一个事务的状态, 并不是直接通过日志管理器操作日志缓冲池,
而是要通过事务日志接口例程(Routes)进行操作.
由于使用日志的资源有很多种, PG为对日志进行分类,
使用了资源管理器(不是第3章中介绍的资源跟踪器)的概念.
资源管理器主要用于在日志系统中把各种需要记录的数据分类,
通在日志中标识资源管理号, 使系统在恢复或者读取日志记录时,
能够很方便的知道该日志记录的元数据属于哪一类,
从而通过资源管理器的方法可以准确的选择对应的方法.
CLOG日志记录的是事务的最终状态. CLOG日志管理器管理着CLOG日志缓冲池,
该日志缓冲池是基于SLRU缓冲池实现的.
共2块:
CLOG日志管理器相关数据结构
CLOG日志管理器主要操作
7.11.3 SUBTRANS日志管理器 7.11.4 MULTIXACT日志管理器 7.11.5 XLOG日志管理器 XLOG日志概述XLOG是传统数据库理论中提到的事务日志, 它详细地记录了服务进程对数据库的操作过程.
XLOG在内存中是如何存放的XLOG日志文件在内存中按页进行存放, 每个页面大小为8KB, 每个页都有一个头部,
头部信息之后才是XLOG日志记录.
每个XLOG文件都有一个ID, 但事实上它被分为一个个大小为16MB的XLOG段文件来存放.
如何在磁盘目录中唯一的确定XLOG单文件XLOG文件号和段文件号可以用来唯一的确定这个段文件.
如何确定XLOG日志文件内的一个日志记录的地址确定日志文件内一个日志记录的地址时,
只需用一个XLOG文件号和日志记录在该文件内人偏移量即可.
共3个:
XLOG日志管理器相关数据结构
XLOG日志管理器主要操作
XLOG日志恢复策略
1 XLOG日志管理器相关数据结构 PG日志是REDO还是UNDO日志PG只使用REDO方法来进行数据库的恢复,
它不使用UNDO是因为其数据的多版本使得UNDO没有必要.