为什么要合理设置检查点
2009-06-30 05:48:00 来源:WEB开发网
参数LOG_CHECKPOINT_TIMEOUT主要用来设置检查点执行的最大时间间隔。一般情况下这个参数以秒为单位。如系统管理员想让数据库系统10分钟执行一次检查点,则就可以将这个参数设置为600。那么设置为0,是不是表示数据库一有变化,就执行检查点呢?不是。如果设置为0的话,表示禁用时间检查点。此时只有通过重做日志切换或者其他手段才能够触发检查点操作。如果重做日志大小设置的比较合适,这个时间检查点确实没有使用的必要。数据库管理员可以根据实际情况将这个参数设置为0,禁用时间检查点。
参数LOG_CHECKPOINT_INTERVAL主要是根据操作系统块的数量来触发检查点。也就是说,这个参数用于指定出现检查点之前,必须写入重做日志文件中操作系统的块的数量。注意这里指的不是Oracle数据库块的数量。跟时间检查点一样,无论这个参数设置为什么值,在重做日志切换和表空间脱机操作时都会触发检查点。为此如果这个参数设置的不合适的话,那么就可能会出现问题。如现在有一个Oracle数据库系统,其重做日志的大小为3M。而操作系统块的大小为4KB。此时如果将这个参数设置为600MB的话,那会发生什么情况呢?首先根据这个参数的设置,当数据块达到600MB的时候,就会触发一个检查点。此时系统会将2.4MB的数据写入到数据文件中。这个时候重做日志文件的大小也在2.4M左右。而当重做日志的文件达到3M时,就会发生日志切换。此时又发生了一次检查点操作。也就是说,仅仅更新了0.6M数据的时候,就发生了检查点。当数据更新比较频繁时,这两个检查点可以说是同时发生的。此时就会给数据库的性能带来很大的负面效应。所以,设置这个参数时,要同时考虑重做日志文件的大小。由于重做日志文件切换时必定会触发检查点的操作。为此笔者的意见是在设置检查点时,应该以数据库检查点为主。然后有必要的情况下,在在重做日志切换中间的时刻,再次执行一个检查点操作。由于这个参数也使根据数据块,即数据的大小来触发检查点的。所以管理员综合考虑重做日志文件的大小和操作系统数据块的大小,一般都可以为这个参数推算出一个合适的值。让其刚好在重做日志切换的中间那个时刻触发这个检查点。
参数LOG_CHECKPOINT_ALERT跟检查点的执行时间无关。这个参数只是告诉数据库系统当检查点发生时是否需要将相关的信息记录到警告日志文件中。在进行检查点测试的时候,这个参数很有用。因为数据库管理员可以查看这个警告日志文件,来判断检查点执行的是否过于频繁,或者要经过很长时间才会触发检查点。管理员就可以凭着这个信息来判断检查点的执行时间间隔是否跟自己的设想一致。如果不一致的话,那么就需要通过以上手段来来调整检查点的执行间隔。
根据笔者的经验,如果没有特殊的用途,那么只需要启用数据库检查点即可。即通过调整重做日志文件的大小来控制检查点执行的时间间隔。另外在有必要的情况下,可是合理设置LOG_CHECKPOINT_INTERVAL这个参数,让数据库在重做日志切换的中间时刻补上一个检查点,以缩短数据库恢复所需要的时间。而对于时间检查点的话,最好慎用。
更多精彩
赞助商链接