从总体上看, 查询执行器实际就是按照执行计划的安排,
有机的调用存储,索引,并发等模块,按照各种执行计划中各种计划节点的实现算法来完成数据的读取或者修改的过程.
查询执行器有4表主要的子模块:
Portal
ProcessUtility
Executor
特定功能子模块
PG事务处理和并发控制 7.1 事务系统简介 什么是事务, 事务最大的特点是什么事务是数据库操作的执行单位.
事务最大的特点是: 一个事务提交之后或者完整执行,或者完全不执行, 即没有中间态.
数据库中有语句不在事务环境中吗没有, 绝对没有.
数据库中, 任何语句的执行都存在于事务环境中, 任何语句开始执行之前事务就开始了.
当语句执行完成后, 事务结束.
通常情况下, 我们提交的查询语句或者更新语句会被送入一个默认事务环境中执行.
PG中负责管理事务运行的模块称为事务管理器.
3个:
事务管理器
锁管理器
日志管理器
事务管理器是事务系统的中枢.
锁管理器实现了系统并发控制所需要的各种锁.
日志管理器用来记录事务执行的状态和数据的变化过程.
MVCC应用在事务执行的哪个阶段在PG中, 事务执行的读阶段采用了多版本并发控制(MVCC),
即对元组的读和写互不阻塞;而在事务执行的写阶段需要由各种锁来保证事务的隔离级别.
在PG中, 上层的事务块以及底层的事务块共同构成了传统数据库中所提到的事务的概念.
任何语句的执行总是先进入事务处理接口事务块中,
然后调用事务底层函数处理具体的命令, 最后返回事务块中.
在PG中, 一个事务块中包含多个事务,
所以事务块的状态数量要比底层事务的状态数量多的多.
在PG的事务处理层次中, 位于事务系统上层的是事务块.
PG执行一条SQL语句前会调用StartTransactionCommand函数,
执行结束时会调用CommitTransactionCommand函数.
如果命令执行失败, 则会调用AbortCurrentTransaction函数.
上述三个函数根据事务块的状态执行不同的操作, 并调用不同的底层事务执行函数.
需要注意的是, 上述三个函数只是进入事务系统上层的入口函数, 并不处理具体事务.
PG为什么要将事务系统为成2个层次PG将事务系统分成上层(事务块)和底层(事务)两个层次, 通过分层的设计,
在处理上层业务的时候可以屏蔽具体细节.
共4个:
启动事务
提交事务
退出事务
清理事务
7.3.3 简单查询事务执行过程实例 简单查询事务执行过程说明事务保存点(SAVEPOINT)提供了一种机制, 用于回滚部分事务.
PG在实现上把SAVEPOINT认为是定义子事务的标记. 保存点的作用就是实现事务的回滚,
即从当前子事务回滚到事务链(即: 事务块)中的某个祖先事务.
在PG中, 子事务的主要作用是实现保存点, 从而增强事务操作的灵活性.
7.4.1 保存点实现原理 7.4.2 子事务 7.5 两阶段提交 PG数据库使用什么机制来支持分布式数据库的事务处理的PG使用两阶段提交(Two Phase Commit, 2PC)来支持分布式数据库的事务处理.
什么是2pc (两阶段提交), 有什么作用2pc分为a. 预提交阶段 和 b. 全局提交阶段.
作用: PG使用2pc来支持分布式数据库的事务处理.
而实现分布式事务处理的关键就是两阶段提交协议.
两阶段提交协议是分布式数据库系统中保证分布式事务ACID特性的经典解决方案.
PG为其提供了很好的操作接口, 应用程序开发者利用该操作接口可以很好的实现该协议.
7.6 PG的并发控制 PG的并发控制是怎样的