第16 章 管理物理日志[@more@]
一、更改物理日志位置和大小
因为给物理日志分配的空间必须是连续的,所以在将物理日志移动至没有足够连续空间的数据库空间或者将日志大小增大到超过可用的连续空间,则会产生错误。
可以使用 oncheck -ce 查看每个 dbspace 的 chunk 以及每个 chunk 的大小和使用情况。
1.1 使用文本编辑器来更改物理日志位置或大小
可以在数据库服务器处于联机方式时,通过编辑 ONCONFIG 文件来更改物理日志位置和大小。
PHYSFILE :指定物理日志文件的大小(以千字节计)
PHYSDBS:将物理日志移动至指定的数据库空间
直至您关闭并重新启动数据库服务器后,更改才会生效。然后立即创建 0 级备份以确保所有恢复机制可用。
1.2 使用 onparams 更改物理日志位置和大小
要更改物理日志的大小和位置,请在将数据库服务器转为静默或单用户方式后执行以下命令:
onparams -p -s size -d dbspace -y
size :是物理日志的新大小(以千字节计)
dbspace:指定物理日志要驻留的数据库空间
以下示例更改物理日志的大小和位置。新的物理日志大小为 400 千字节,且日志将驻留在 dbspace6 数据库空间中。如下所示,该命令还用 -y 选项重新初始化共享内存,以使更改可立即生效:
onparams -p -s 400 -d dbspace6 -y
在关闭并重新启动数据库服务器之后,创建 0 级备份以确保所有恢复机制可用。
二、监控物理和逻辑日志记录活动
2.1 onstat -l
第一行显示每个物理日志缓冲区的信息
其中:
numwrits:从缓冲区到磁盘的写入次数
pages/IO:向缓冲区写入的页数与向磁盘写入的次数之比率
第二行显示每个逻辑日志缓冲区的信息
2.2 监控检查点信息
onstat -m
查看消息日志中的最近 20 行。 如果检查点消息未出现在最近 20 行中,则直接用文本编辑器读取消息日志。数据库服务器在检查点结束时将个别检查点消息写入日志。如果发生了检查点,但数据库服务器没有页可写入磁盘,则数据库服务器不会将任何消息写入消息日志。
onstat -p
numckpts:自数据库服务器联机以来发生的检查点数。
ckptwaits:用户线程等待检查点完成的次数。
三、检查点
“检查点”定义:磁盘上的页与共享内存缓冲池中的页同步时的时间点。
检查点发生的时机:
1. 在物理日志达到总体的75%时触发
2. 由 CKPTINTVL 配置参数指定的检查点的时间间隔
3. 由 RTO_SERVER_RESTART 配置参数指定的快速恢复所需要的时间。
当配置了 RTO_SERVER_RESTART 时,系统忽略 CKPTINTVL 。系统监视物理和逻辑日志使用情况,以估计快速恢复的持续时间。如果系统估计快速恢复所需要的时间超过 RTO_SERVER_RESTART 所指定的时间,那么服务器将自动触发检查点。所以 RTO_SERVER_RESTART 是目标时间量,不能是保证的时间量。
在检查点数据库服务器所执行的操作:
(http://publib.boulder.ibm.com/infocenter/idshelp/v10/topic/com.ibm.admin.doc/admin557.htm)
1. 数据库服务器阻止用户线程进入临界段。
2. 将逻辑日志缓冲区清仓到磁盘上当前逻辑日志文件。 (先逻辑日志)
3. 数据库服务器将物理日志缓冲区清仓到物理日志。 (再物理日志)
4. 将所有已修改的页清仓到磁盘。 (最后是数据)
5. 数据库服务器将检查点记录写入逻辑日志缓冲区。
6. 逻辑清空物理日志。(可以覆盖当前条目)。
四、快速恢复
“快速恢复”定义:当数据库服务在非正常情况下被关闭后在重新启动时将其恢复为一致状态的一个自动过程。快速恢复的过程:
(http://publib.boulder.ibm.com/infocenter/idshelp/v10/topic/com.ibm.admin.doc/admin562.htm)
1. 使用物理日志中的数据将所有磁盘页返回至它们在最近检查点之时的状态。
物理日志的每个前映象包含在检查点之后所对应的更新页的地址,所以系统可以将物理日志中的每个前映象页写到共享内存并又写回到磁盘
2. 在逻辑日志文件中查找最新的检查点记录。
数据库服务器在逻辑日志中定位最近检查点记录的地址
3. 前滚所有在最近检查点记录之后写入的逻辑日志记录。 (前滚是对已提交的事务而言)
这样便可以再现自最近检查点时刻以来直到发生非正常关机之时对数据库的所有更改
4. 回滚那些在逻辑日志中没有相关联的 COMMIT 或 BEGCOM 记录的事务。
(数据库服务器在事务提交时写 BEGCOM 记录。)
五、物理日志
“物理日志”定义:它是磁盘页的集合,在此存储将要更改页(还未修改时)的映象。
在下一检查点之前有多次修改的情况下,仅在物理日志中记录第一个前映象。数据库服务器将前映像存储在物理日志中,直至下一检查点。
六、物理日志记录
“物理日志记录”定义:把将要更改页的映象存储到物理日志的过程。
数据库服务器修改共享内存缓冲池中的某些页之前,它将页的前映象存储在共享内存中的物理日志缓冲区。在该被修改的页从共享内存的页缓冲区刷新到磁盘上之前,该页的“前映象”首先被刷新到磁盘上物理日志中。
该过程有以下6步骤:
(http://publib.boulder.ibm.com/infocenter/idshelp/v10/topic/com.ibm.admin.doc/admin551.htm)
1.将数据页从磁盘读到共享内存中的页缓冲区中(如果数据页已不在共享内存页缓冲区)。
2.将未更改的页复制到物理日志缓冲区。
对存储在物理日志缓冲区中的已修改页的前映象,最终会将其从物理日志缓冲区刷新到磁盘上的物理日志。
3.在应用程序修改数据后在页缓冲区中反映该更改。
4.将物理日志缓冲区清仓到磁盘上的物理日志。
数据库服务器在清仓数据缓冲区之前清仓物理日志缓冲区(这时候并没有清空物理日志,只是清空了物理日志缓冲区)
5.清仓页缓冲区并将其写回到磁盘上。
在清仓物理日志缓冲区后,将共享内存页缓冲区清仓到磁盘,并将数据写入磁盘
6.当出现检查点时,将物理日志缓冲区清仓到磁盘上的物理日志,并清空物理日志。
数据库服务器将物理日志作为循环文件来管理,不断覆盖不需要的数据。检查点过程通过在标记下一组所需前映像开始的物理日志中复位指针来清空物理日志。
可见当在检查点结束时,物理日志被清空。
物理日志在清仓页缓冲区的过程中逐渐被填上发生修改的“前映象”。当再一次检查点操作发生以后的瞬间,这时Online中的数据在物理上是一致的,而此时也就再不需要原来的Online物理日志中的“前映象”了。(如果某一个正在执行的事务需要执行回滚操作,则执行回滚所需的信息都已包含在逻辑日志文件中了。)在检查点操作完成时,Online将逻辑上清空逻辑日志,Online仅仅重置物理日志中的指针,标明下一组“前映象”所存储的起始位置。Online 循环使用物理日志,不断地覆盖那些已过时的数据。检查点操作是唯一可以清空物理日志的机制。
(http://blog.chinaunix.net/u1/36468/showart_435759.html)
注:“缓冲区清仓”是指清仓“缓冲池”、“物理日志缓冲区 ”以及“逻辑日志缓冲区”
(见:http://publib.boulder.ibm.com/infocenter/idshelp/v10/topic/com.ibm.admin.doc/admin291.htm)