为什么要合理设置检查点


当用户更新或者插入数据的时候,系统首先会将数据保存到数据缓存中,而不是直接存储到硬盘上的数据文件中。而等到满足一定条件的时候,系统就会降数据缓存中的内容保存到硬盘上的数据文件上。促使将数据缓存中的信息保存到数据文件中的条件有很多,不过最重要的就是检查点了。在Oracle数据库中,检查点是一个事件,或者说是一个触发器。当满足一定的条件时就会触发这个事件。然后数据高速缓存中的脏缓存块中的数据就会被写入到数据文件之中。为此合理设置这个检查点,是非常必要的。因为其直接关系到数据的安全与数据库系统的性能。

  一、合理设置检查点的必要性。

  当数据库系统执行了一个检查点之后,系统会将所有的已经提交事务对数据库所做的全部写入到硬盘之中。也就是说,此时硬盘上的数据文件已经反映了数据库的一个完整的状态,用户先前对数据库所做的更改已经全部保存到了数据文件之中。此时如果发生了什么变故,但是数据库系统崩溃。由于数据库所的变化都已经保存到了数据文件之中,为此在进行数据恢复时只需要将数据库恢复到上一个检查点执行时刻即可。而不需要进行复杂的恢复操作。所以说,如果将这个检查点设置的比较短一点,即两个检查点发生的时间比较短,那么就可以减少数据库恢复所需要的时间。

  但是这个检查点并不是设置的越短越好。如果检查点为0,即数据库的任何更改都及时保存到数据文件中。那么数据库系统的性能会大打折扣。因为此时会产生很多的I/O操作。而在数据库优化时,I/O操作是数据库性能的一个瓶颈。所以说,这个检查点设置也并不是越短越好。如果检查点执行间隔太短,会导致I/O争用,影响数据库性能。而如果时间间隔设置的太长的话,又会影响数据库的遇到故障时的恢复时间。为此,数据库管理就需要在数据库性能与数据库恢复时间之间取得一个均衡。

  二、了解Oracle数据库检查点的类型以及触发时机。

  在Oracle数据库中,根据执行时刻的不同,主要分为三种检查点。

  一是数据库检查点。当数据库的重做日志发生切换时,就会触发这个数据库检查点事件。此时数据库写写进程会将所有的数据高速脏缓存中的数据写入到数据文件中。由于重组日志的切换主要跟重做日志文件的大小有关。在数据库更新操作相同的情况下,当重做日志文件比较小时,其检查点的时间间隔就比较小。而当重做日志文件比较大时,就可能需要比较长的时间才能够触发这个检查点。所以对于数据库检查点来说,则可以通过调整重做日志文件的大小来设置执行检查点的时间间隔。不过由于数据库在不同时段更新的数据不同,写入到重做日志文件中的内容也不同。为此其检查点的执行时间间隔也往往是不同的。在重做日志文件大小相同的情况下,如果数据库更新频繁,那么可能每个几分钟、甚至几秒钟就会执行一个检查点。而当数据库更新操作比较少时,可能几个小时触发一个检查点也说不定。所以从这个特点也引出了另外一个改善数据库性能的建议。即当数据库涉及到比较频繁的更新操作,此时可以将重做日志文件设置的比较大一点,以延长检查点的执行时间,从而提高Update等更新操作的执行效率。

  二是表空间检查点。在Oracle数据库中,表空间是数据文件的一个逻辑存储单位。由于表空间的存在,使得Oracle数据库管理更加的方便。如可以将Oracle数据库的某个表空间单独设置为只读或者脱机,然后对其进行维护。此时不会影响到其他表空间的使用。笔者现在要谈的这个表空间检查点就是跟这个特性有关。当数据库管理员将一个表空间从联机设置为脱机的时候,数据库系统就会立即执行一个检查点。此时数据库写进程会将数据库高速缓存中跟这个表空间相关的脏缓存写入到数据文件中。注意这里不会把所有的脏缓存写入到数据库,而只是跟这个表空间相关的脏缓存。由于表空间检查点是在表空间脱机时才触发,为此其执行的时间间隔也使不一定的。笔者想没有哪个数据库管理员回闲着没事隔一段时间去将表空间脱机一次。

  三是时间检查点,即每隔多少时间来执行一次检查点。当设置了时间检查点之后,每隔一段时间就会执行一次检查点。不过需要注意的是,这个设置并不影响上面两个检查点。即即使设置的时间检查点还没到触发的时候,只要重做日志发生切换或者管理员将表空间设置为脱机,都会执行检查点操作。通过设置合理的时间检查点,可以在一个重做日志切换的周期内多次执行检查点操作。

  三、通过初始化参数来设置检查点以及可能产生的问题。

  除了可以通过调整重做日志来设置执行检查点的时间间隔外,在Oracle数据库中还可以通过一些初始化参数来调整检查点执行时间间隔。跟这个检查点相关的初始化参数主要有三个,分别为LOG_CHECKPOINT_TIMEOUT、LOG_CHECKPOINT_INTERVAL以及LOG_CHECKPOINT_ALERT。


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3