检查点 Checkpoint

概念:

背景:为了改善事务处理的性能
解决方案:使用buffer pool缓存事务访问的数据,在事务逻辑上修改了记录,数据没有真正在事务commit
		时更新到磁盘上。
		为了保证数据库在异常情况下数据的完整性、准确性,数据库采用了逻辑日志和物理日志机制。
		在正常运行模式下,为了数据库能即使从异常中恢复,数据库需要定期(较短的时间内)将buffer
		pool 的数据同步到磁盘上,保证数据的物理有效性。

所以 GBase8t的non-blocking检查点技术不再阻塞应用程序的正常运行。
	数据库周期性地将buffer pool的脏数据刷新到磁盘上,达到磁盘、内存数据一致性的时间点 被称为
	检查点【checkpoint】,当数据库从异常故障中恢复时就可以从最新的一次checkpoint点开始恢复。

步骤:
	checkpoint发生时,只需要将内存中修改的数据(脏数据)同步到磁盘,而不需要将所有的信息回到
	磁盘,即如果只有一个page是脏数据,那么只需要将该page同步到磁盘即可,其他page不需要同步,
	同时,写会磁盘的数据仍然在内存中,只是将内存中与磁盘不一致的脏数据同步到磁盘中,同步到
	磁盘后,该数据仍然在内存中,从LRU的M队列移到LRU的F队列中。

举个例子:事务的解析过程【delete from customer where cust_id = 10】

涉及到的概念:page存储结构,page是io的最小单位,在一个page中存储多行记录

详细步骤解析:
	1.需要将delete操作的记录从磁盘读取到buffer pool中,读取到该记录所在的page到内存,内存中
	一个内存页存储对应的数据页
	2.将该数据也写入物理日志文件中,物理日志有一个对应的数据页存储delete操作之前的前影数据页。
	3.将delete操作的逻辑信息写入到逻辑日志文件中。
	4.修改buffer pool的内存也,将数据也中改行记录的槽位标记中的长度设置为0,标识记录被删除,
	同时更新数据页时间戳信息。
	5.当发生checkpoint(或者其他磁盘写操作)时,将该数据页从内存同步到磁盘,写磁盘需要将整个
	page更新到磁盘。同时将内存数据页从LRU的M队列移动到F队列。

Non-blocking Checkpoint简介:

GBase 8t提供非阻塞型检查点技术,通过把Checkpoint过程拆分多个阶段,把阻塞部分的时间段缩小到对
业务基本没有影响的一个范围。

	非阻塞检查点的执行步骤:
		1.阻塞所有线程进入一个新的关键区域critical section
		2.等待所有已在critical section中的所有线程退出
		3.对缓存的catalog信息进行flush
		4.对物理日志缓存区和逻辑日志缓存区进行flush
		5.在逻辑日志中记录检查点
		6.对保留页进行flush
		7.增加检查点的序号
		8.允许线程进入critical section
		9.对缓冲池进行flush
		10.关闭检查点,更新保留页中检查点记录。
		
	文字说明
		当系统触发非阻塞检查点操作是,首先阻塞事务的处理,记录系统恢复信息,清仓逻辑日志缓存
		区中的内容,记录检查点信息;之后,系统中的事务操作不再被阻塞,恢复继续运行,系统将内
		存中所有被修改的数据清仓到磁盘上;最后,将检查点的信息记载到系统保留页中,这样就完
		成了一个非阻塞检查点操作。
		我们可以看到,非阻塞检查点操作允许应用程序在发生检查点处理期间继续处理事务,事务不被
		阻塞。
		
	注意:
		在对buffer pool进行flush时,事务不会被阻塞。在执行检查点过程中,事务处理继续执行,
		物理日志和逻辑日志继续被使用。非阻塞检查点有一小部分需要在阻塞状态下等待用户离开
		critical section,并进行对系统恢复等元数据信息的刷新。

触发非阻塞检查点的事件:

管理员:
	创建管理重命名dbspace
	增加或者删除chunk
	增加或者删除逻辑日志文件
	修改物理日志大小或位置
	打开关闭磁盘镜像mirroring
备份:
	"假"备份
	归档操作的启动
	物理恢复结束时
CDR
	在ER子系统第一次启动时或者所有复制节点移除后重新启动是
HA:
	一个新的RSS或者SDS节点假如到集群中
	一个辅助服务器提升为primary服务器;
	辅助服务器上的物理日志不够用时
HDR:
	HDR模式改变时
	HDR建立后,发生第一次转变
	主要、第二服务器上的物理日志不够用时
Llog:
	逻辑日志不够用
LongTX:
	长事务发生时
Misc:
	由于IO错误导致dbspace或者chunk故障
	事务回滚的同时,chunk正发生撤销
pload:
	当时用pload启动快速模式时
Plog:
	物理日志使用达到75%时
	已使用的物理日志空间加上脏数据超过物理日志90%的空间时
Recovery:
	在恢复阶段及启动快速恢复时
Reorg:
	在online模式创建索引开始时,以及在碎片整理开始时
RTO:
	当设置onconfig参数rto_server_restart时
startup:
	启动数据库实例时
user
	当用户执行onmode触发时

无不读书神仙,有打瞌睡豪杰。