我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:双彩网 > 争用时间间隔 >

合理控制检查点发生的频繁程度

归档日期:06-01       文本归类:争用时间间隔      文章编辑:爱尚语录

  当用户更新或者插入数据的时候,系统首先会将数据保存到数据缓存中,而不是直接存储到硬盘上的数据文件中。而等到满足一定条件的时候,系统就会降数据缓存中的内容保存到硬盘上的数据文件上。

  CIO如何化解IT团队人际冲突?抱守与放弃:CIO该如何抉择如何重塑政府CIO职能?2009年CIO面临的挑战以及应对策略

  三个教训 我亲历的战略转型故事远离CEO“直觉决策” CIO如何把握时机?

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

  当数据库系统执行了一个检查点之后,系统会将所有的已经提交事务对数据库所做的全部写入到硬盘之中。也就是说,此时硬盘上的数据文件已经反映了数据库的一个完整的状态,用户先前对数据库所做的更改已经全部保存到了数据文件之中。此时如果发生了什么变故,但是数据库系统崩溃。由于数据库所的变化都已经保存到了数据文件之中,为此在进行数据恢复时只需要将数据库恢复到上一个检查点执行时刻即可。而不需要进行复杂的恢复操作。所以说,如果将这个检查点设置的比较短一点,即两个检查点发生的时间比较短,那么就可以减少数据库恢复所需要的时间。但是这个检查点并不是设置的越短越好。如果检查点为0,即数据库的任何更改都及时保存到数据文件中。那么数据库系统的性能会大打折扣。因为此时会产生很多的I/O操作。而在数据库优化时,I/O操作是数据库性能的一个瓶颈。所以说,这个检查点设置也并不是越短越好。如果检查点执行间隔太短,会导致I/O争用,影响数据库性能。而如果时间间隔设置的太长的话,又会影响数据库的遇到故障时的恢复时间。为此,数据库管理就需要在数据库性能与数据库恢复时间之间取得一个均衡。

  一是数据库检查点。当数据库的重做日志发生切换时,就会触发这个数据库检查点事件。此时数据库写写进程会将所有的数据高速脏缓存中的数据写入到数据文件中。由于重组日志的切换主要跟重做日志文件的大小有关。在数据库更新操作相同的情况下,当重做日志文件比较小时,其检查点的时间间隔就比较小。而当重做日志文件比较大时,就可能需要比较长的时间才能够触发这个检查点。所以对于数据库检查点来说,则可以通过调整重做日志文件的大小来设置执行检查点的时间间隔。不过由于数据库在不同时段更新的数据不同,写入到重做日志文件中的内容也不同。为此其检查点的执行时间间隔也往往是不同的。在重做日志文件大小相同的情况下,如果数据库更新频繁,那么可能每个几分钟、甚至几秒钟就会执行一个检查点。而当数据库更新操作比较少时,可能几个小时触发一个检查点也说不定。所以从这个特点也引出了另外一个改善数据库性能的建议。即当数据库涉及到比较频繁的更新操作,此时可以将重做日志文件设置的比较大一点,以延长检查点的执行时间,从而提高Update等更新操作的执行效率。二是表空间检查点。在Oracle数据库中,表空间是数据文件的一个逻辑存储单位。由于表空间的存在,使得Oracle数据库管理更加的方便。如可以将Oracle数据库的某个表空间单独设置为只读或者脱机,然后对其进行维护。此时不会影响到其他表空间的使用。笔者现在要谈的这个表空间检查点就是跟这个特性有关。当数据库管理员将一个表空间从联机设置为脱机的时候,数据库系统就会立即执行一个检查点。此时数据库写进程会将数据库高速缓存中跟这个表空间相关的脏缓存写入到数据文件中。注意这里不会把所有的脏缓存写入到数据库,而只是跟这个表空间相关的脏缓存。由于表空间检查点是在表空间脱机时才触发,为此其执行的时间间隔也使不一定的。笔者想没有哪个数据库管理员回闲着没事隔一段时间去将表空间脱机一次。

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

  除了可以通过调整重做日志来设置执行检查点的时间间隔外,在Oracle数据库中还可以通过一些初始化参数来调整检查点执行时间间隔。跟这个检查点相关的初始化参数主要有三个,分别为LOG_CHECKPOINT_TIMEOUT、LOG_CHECKPOINT_INTERVAL以及LOG_CHECKPOINT_ALERT。参数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这个参数,让数据库在重做日志切换的中间时刻补上一个检查点,以缩短数据库恢复所需要的时间。而对于时间检查点的话,最好慎用。

本文链接:http://textandcandy.com/zhengyongshijianjiange/3.html

上一篇:罗马全面战争攻击间隔有什么用

下一篇:没有了