Redo Log 和Checkpoint not complete

 

 

首先我们来看下 alertSID.log 日志:

 

Mon Nov 30 17:31:54 2009

Thread 1 advanced to log sequence 14214 (LGWR switch)

  Current log# 3 seq# 14214 mem# 0: /u03/oradata/newccs/redo03.log

Mon Nov 30 17:34:29 2009

Thread 1 advanced to log sequence 14215 (LGWR switch)

  Current log# 1 seq# 14215 mem# 0: /u03/oradata/newccs/redo01.log

Mon Nov 30 17:35:54 2009

Thread 1 cannot allocate new log, sequence 14216

Checkpoint not complete

  Current log# 1 seq# 14215 mem# 0: /u03/oradata/newccs/redo01.log

Mon Nov 30 17:35:55 2009

Thread 1 advanced to log sequence 14216 (LGWR switch)

  Current log# 2 seq# 14216 mem# 0: /u03/oradata/newccs/redo02.log

Mon Nov 30 17:40:25 2009

Thread 1 advanced to log sequence 14217 (LGWR switch)

  Current log# 3 seq# 14217 mem# 0: /u03/oradata/newccs/redo03.log

Mon Nov 30 17:44:22 2009

Thread 1 advanced to log sequence 14218 (LGWR switch)

  Current log# 1 seq# 14218 mem# 0: /u03/oradata/newccs/redo01.log

 

 

我们先来分析下它的原因和后果:

当我们进行redo 切换的时候,会触发checkpoint 事件。 触发该事件有5个条件。 下文有说明。 Checkpoint做的事情之一是触发DBWnbuffer cache中的Dirty cache磁盘。另外就是把最近的系统的SCN更新到datafile headercontrol file(每一个事务都有一个SCN),做第一件事的目的是为了减少由于系统突然宕机而需要的恢复时间,做第二件事实为了保证数据库的一致性。

      

       Checkpoint will flush dirty block to datafile, 从而触发DBWn书写dirty buffer,等到redo log覆盖的dirty block全部被写入datafile后才能使用redo log(循环使用),如果DBWn写入过慢,LGWR必须等待DBWn完成,则这时会出现“checkpoint not completed 所以当出现checkpoint  not competed的时候,还会伴随cannot allocate new log的错误。

      

       如果遇到这个问题,可以增加日志组和增大日志文件,当然也可以修改 checkpoint参数使得检查点变频繁一些。

       在出现这个错误的时候,数据库是短暂hang住的,等待checkpoint的完成。 hang住的时候,没有日志产生。

 

 

Tom 同学对这个问题的解释如下:

 

the infamous "checkpoint not complete, cannot allocate new log" message.

 

this occurrs when Oracle attempts to reuse a log file but the checkpoint that would flush

the blocks that may have redo in this log file has not yet completed -- we must wait

until that checkpoint completes before we can reuse that file -- thats when this message is printed.  during this time (when we cannot allocate a new log) processing is suspended in the database while the checkpoint is made to complete ASAP.

-- 我们必须等待checkpoint 的完成, 在这个过程中, 数据库是短暂的hang住的。

 

The major way to relieve this is to have sufficient log to carry you through peak times.  that way, we can complete the  checkpoint while you are not busy.  also make sure your checkpoints happen as fast as they can (eg: enable ASYNC IO or configure >1 DBWR if ansyc IO cannot be used, make sure disks are not contending with other apps and so on)

 

Another way is to make the log files smaller, hence increasing the frequency with which we checkpoint (log checkpoint interval and other init.ora parameters achieve the same effect btw).

 

 

 

这个主题使DBA能对checkpointcheckpoint优化的参数有一个较好的理解:

- FAST_START_MTTR_TARGET
- LOG_CHECKPOINT_INTERVAL

- LOG_CHECKPOINT_TIMEOUT
- LOG_CHECKPOINTS_TO_ALERT

 

它也解释了怎样解释和处理出现在ALERT<sid>.LOG file中的checkpoint的错误"'Checkpoint not Complete' and 'Cannot Allocate New Log"

 

什么是checkpoint

Checkpoint是为了内存中已经被修改的数据块与磁盘数据文件同步的一种数据库事件。它提供了一种保持事务提交以后数据一致的手段。往Oracle磁盘写脏数据的机制与事务提交不是同步的。

 

checkpoint有两个目的:

1、确保数据一致性。

2、使数据库能快速地恢复。

 

怎样快速恢复

因为数据库会把所有的改变都在数据文件上设置checkpoint并一直增加,它不需要请求checkpoint之前的重做日志,Checkpoint能保证所有在缓存区的数据写到相应的数据文件,防止因为意外的实例失败导致的数据丢失。

 

Oracle写这个脏数据只在一定的条件下:
1DBWR 超时,大约3秒时间
2系统中没有多的空缓冲区来存放数据
3CKPT进程(产生新的checkpoint) 触发DBWR

 

一个checkpoint5中事件类型:
1、每次重做日志的切换;
2LOG_CHECKPOINT_TIMEOUT 这个延迟参数的到达;
3、相应字节(LOG_CHECKPOINT_INTERVAL* size of IO OS blocks)被写到当前的重做日志;
4ALTER SYSTEM SWITCH LOGFILE 这个命令会直接导致checkpoint发生
5ALTER SYSTEM CHECKPOINT

 

Checkpoint期间会有下面进程发生:
1. DBWR写所有脏数据到数据文件;
2. LGWR更新控制文件和数据文件的SCN

 

Checkpoints和优化:
Checkpoints是一个数据库优化的难点。频繁的Checkpoints可以实现快速的恢复,但也会使性能下降。怎样处理这个问题呢?

依赖于数据库数据文件的数量,一个Checkpoint可能是高速的运行。因为所有的数据文件在Checkpoint期间都会被冻结。更频繁的Checkpoints可以快速恢复数据库。这也客户对不按规定系统宕机的容忍的原因。然而,在一些特殊情况下,频繁的Checkpoints也不能保证可以快速恢复。我们假设数据库在95%的时间内是正常运行,5%由于实例失败导致不可用,要求恢复。对大多数客户而言,他们更希望调整95%的性能而不是5%的宕机时间。这个假设表明,性能是摆在第一位的所以我门的目标就是在优化期间减少Checkpoints的频繁度。

 

优化Checkpoints包括4个关键的初始化参数:

- FAST_START_MTTR_TARGET
- LOG_CHECKPOINT_INTERVAL
- LOG_CHECKPOINT_TIMEOUT
 - LOG_CHECKPOINTS_TO_ALERT

 

详细介绍每个参数:

FAST_START_MTTR_TARGET

Oracle9i以来FAST_START_MTTR_TARGET 参数是调整checkpoint的首选的方法。FAST_START_MTTR_TARGET 可以指定单实例恢复需要的秒数。基于内部的统计,增长的checkpoint会自动调整的checkpint的目标以满足FAST_START_MTTR_TARGET 的需求。

V$INSTANCE_RECOVERY.ESTIMATED_MTTR 显示当前估计需要恢复的秒数。这个值会被显示即使FAST_START_MTTR_TARGET 没有被指定。
V$INSTANCE_RECOVERY.TARGET_MTTR 表明在短时间内MTTR的目标。
V$MTTR_TARGET_ADVICE 显示这个当前MTTR设置的工作量产生的I/O数量和其他I/O。这个视图帮助用户评定这个在优化和恢复之前的平衡。

 

LOG_CHECKPOINT_INTERVAL

LOG_CHECKPOINT_INTERVAL 参数指定这个最大的重做块的间隔数目。如果FAST_START_MTTR_TARGET被指定,LOG_CHECKPOINT_INTERVAL不能被设置为0
在大多数Unix系统的OS块大小是512字节。设置LOG_CHECKPOINT_INTERVAL=10000意味着这个增长的checkpoint不能追加到当前日志,因为多于5M。如果你的重做日志是20M,你将发出4checkpoint对每个重做日志。


LOG_CHECKPOINT_INTERVAL 会发生影响当一个checkpoint发生时,小心设置这个参数,保持它随着重做日志文件大小变化而变化。checkpoint频繁是这个影响数据库恢复的原因之一。短的checkpoint间隔意味数据库将快速恢复,也增加了资源的利用。这个参数也影响数据库向前回滚的时间。实际的恢复时间是基于这个时间,当然还有失败的类型和需要归档日志的数量。

 

 

LOG_CHECKPOINT_TIMEOUT
这个参数指定checkpoint发出的时间间隔。换句话说,它指定一次脏数据多少时间写出一次。checkpoint频率会影响这个数据库恢复的时间。长时间的间隔会要求数据库恢复要求更久。Oracle建议用LOG_CHECKPOINT_interval去控制checkpoint而不用LOG_CHECKPOINT_TIMEOUTLOG_CHECKPOINT_TIMEOUTn秒发一次checkpoint,不顾事务提交的频率。这可能会导致一些没有必要的checkpoint在事务已经变化的情况下。不必要的checkpoint必须被避免。还有一个容易误解的地方:LOG_CHECKPOINT_TIMEOUT 会间隔性地发出log switch。而Log switch会触发一个checkpoint,但checkpoint不会导致一个log switch。唯一手工方式alter system switch logfile或者重新设置redo logs大小可以导致频繁switch

SQL> alter system set log_checkpoint_timeout=300;[单位是秒

 

log_checkpoint_to_alert

设置为真,可以在告警日志中观察到增量检查点的触发

SQL> alter system set log_checkpoints_to_alert=true; 

 

对于优化和恢复在线重做日志的大小是关键的。

 

修改Redo log 大小的操作方法:

查看当前日志组状态:

SQL> select group#,sequence#,bytes,members,status from v$log;

 

    GROUP#  SEQUENCE#  BYTES    MEMBERS STATUS

    ---------- ----------    ----------    ---------- ----------------

         1      14230   52428800          1    ACTIVE

         2      14231   52428800          1    CURRENT

         3      14229   52428800          1    INACTIVE

 

CURRENT: 表示是当前的日志。

INACTIVE:脏数据已经写入数据块。该状态可以drop

ACTIVE: 脏数据还没有写入数据块。

 

查看当前日志组成员:

SQL> select member from v$logfile;

 

MEMBER

--------------------------------------------------------------------------------

/u03/oradata/newccs/redo03.log

/u03/oradata/newccs/redo02.log

/u03/oradata/newccs/redo01.log

 

 

添加online redo log组:

SQL> alter database add logfile group 4 ('/u03/oradata/newccs/redo04.log') size 100m reuse;

SQL> alter database add logfile group 5 ('/u03/oradata/newccs/redo05.log') size 100m reuse;

SQL> alter database add logfile group 6 ('/u03/oradata/newccs/redo06.log') size 100m reuse;

 

 

切换归档日志:

SQL> alter system switch logfile;

 

 

查看归档文件的状态,因为只有Inactive的我们才可以drop它的数据块已经写入了数据块。如果是Active状态,表示这里的脏数据还没有写入写入数据库,手工加个全局检查点,督促CKPT马上唤醒DBWR写入脏数据


SQL>alter system checkpoint;

SQL> select group#,sequence#,bytes,members,status from v$log;

    GROUP#  SEQUENCE#  BYTES    MEMBERS STATUS

    ---------- ----------    ----------    ---------- ----------------

         1      14230   52428800          1    ACTIVE

         2      14231   52428800          1    ACTIVE

         3      14229   52428800          1    INACTIVE

   4      14229   52428800          1    CURRENT

 5      14229   52428800          1    UNUSED

   6      14229   52428800          1    UNUSED

 

因为5我们还没有用,所以显示为UNUSED

 

删除redo log组:

SQL> alter database drop logfile group 1;

Database altered.

或者:

SQL> alter database drop logfile '/u03/oradata/newccs/redo01.log';

 

在添加redo log group 1. 

SQL> alter database add logfile group 1 ('/u03/oradata/newccs/redo01.log') size 100m reuse;

 

通过删除在添加,达到对redo log group resize. 

 

注意两点
1. 单纯加redo log group单个文件的大小没有作用,同一个group里,文件大小都是一致的。

2. 如果是归档模式的话,确保已经自动归档,如果手动归档的话,需要在alter system switch logfile锁死的时候,用alter system log current 来手动归档。或者通过alter system archive log start打开自动归档。否则的话,当redo log group切换完整个groups的时候,会一直等待状态(******). 

 

3. 《Oracle DBA必备技能详解》(Robert G.Freeman),上面建议redo log 最好是15分钟切换一次

 

转载于:https://www.cnblogs.com/Hiberniane/archive/2009/11/30/2488772.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

组合数学中的项链计数

给c种不同颜色宝石能穿成多少种长度为s的宝石项链&#xff08;本质不同&#xff09; Burnside定理的应用&#xff1a; 当n为奇数时&#xff0c;有n种翻转&#xff0c;每种翻转都是以一个顶点和该顶点对边的中点对称。有k^(n/21)*n种。 当n为偶数时&#xff0c;有n种翻转&#x…

蓝桥杯 算法训练(四)结点选择(树形动态规划)

结点选择&#xff08;树形动态规划&#xff09;C语言 问题描述 有一棵 n 个节点的树&#xff0c;树上每个节点都有一个正整数权值。如果一个点被选择了&#xff0c;那么在树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少&#xff1f; 输入格式 第一行包含一个整数…

SCVMM

通过SCVMM实现并管理虚拟机高可用性 1、 添加群集主机2、 创建虚拟网络3、 创建虚拟机并实现高可用性接着上一篇文章&#xff0c;这次我们来看一下&#xff0c;如果通过SCVMM R2来实现虚拟机的高可用性。首先将群集主机添加到SCVMM 1、 登陆到计算机Win2008R2&#xff0c;打开S…

机器学习统计学相关书籍

1. 《统计学完全教程》 All of statistics 卡耐基梅隆 沃塞曼 2. 第四版《概率论与数理统计》 莫里斯。德格鲁特&#xff08;Morris H.DeGroot&#xff09;和马克。舍维什&#xff08;Mark J.Shervish&#xff09; 3. 《线性代数导论》 吉尔伯特。斯特朗--网上视频教程堪称经…

序列化包含多种不明类型的集合

序列化包含多种不明类型的集合 代码&#xff1a;/Files/zhuqil/Kirin.rar 导言: 你是否曾经想过序列化构造对象&#xff0c;它里面有一个集合&#xff0c;这个集合包含接口或者抽象类&#xff1f;你是否不知道所有的你要序列化的类型&#xff1f;好吧&#xff0c;如果这样&…

机器学习入门方法推荐(少走弯路)入门视频推荐

入门可以看看下列的几个课程。第一第二个公认的经典了。1、首先当然是吴恩达的经典机器学习了&#xff0c; 可以在万能的b站搜&#xff0c;也可以在网易公开课搜 吴恩达机器学习http://study.163.com/course/courseMain.htm?courseId10045700292、台大林轩田教授的机器学习基石…

NLP大神推荐的机器学习入门书单(附大量百度网盘电子书)

转载自&#xff1a;http://blog.csdn.net/surgent777/article/details/53895048 继NLP之后&#xff0c;我又开了ML这个大坑。这是因为NLP涉及到太多的ML模型&#xff0c;仅仅拿过来用的话&#xff0c;我实现的HanLP已经快到个人极限了。而模型背后的原理、如何优化、如何并行化…

$HOME/$user/.权限导致用户无法登陆图形界面

在redhat linux下&#xff0c;用户登陆图形界面时将在$HOME/$user/.目中添加隐藏文件&#xff08;以.开头的文件&#xff09;&#xff0c;如果在无意中将$HOME/$user/.的写权限去除&#xff0c;将会导致用户无法成功登陆gnome&#xff0c;在正确输入用户名和密码的情况下&#…

想要入坑机器学习?这是MIT在读博士的AI心得

从科研社区中汲取营养找论文AI 领域的论文可以在 arXiv 上找到和发布。现在的论文数量非常令人振奋。社区中的许多人降低了从噪声中分辨出信号的难度。Andrej Karpathy 开发了 arXiv sanity preserver&#xff0c;帮助分类、搜索和过滤特征。Miles Brundage 每晚都在推特上发布…

修改EIGRP 路径cost 值,以及分析和实现等价与非等价负载均衡

一、拓扑图&#xff1a;二、配置各路由器的IP和EIGRP 协议&#xff0c;并保证邻接关系的形成。1、我要达到的目的是要让R2到192.168.14.0/24这个网段能在R2和R1断开之后&#xff0c;形成网网络的快速收敛。因为根据EIGRP 的次优路径进拓扑关系的形成条件是要满足FC&#xff08;…

C++函数的用法:erase函数

前面的文章中提到过如何向容器中添加元素&#xff0c;这里介绍一个如何删除容器中元素的函数&#xff0c;包括顺序容器和关联容器。 就是这个erase函数&#xff0c;基本用法如下&#xff1a; c.erase(p)------------------------------从c中删除迭代器p指定的元素&#xff0c;…

关注BLUEBEE的浏览器发展

其实我并不认识蓝峰这个人。只是偶尔发现这个人在我的博客中转了一下。怀着好奇的心情回访了一下。发现此人正在开发浏览器。目前IE内核的浏览器实在太多了。除了IE本身如遨游&#xff0c;世界之窗&#xff0c;包括360&#xff0c;还有腾讯的TT。。。。。但我为什么要关注蓝峰的…

Ubuntu 9.10 升级到ext4

最近一直在使用ubuntu系统&#xff0c;当时升级到9&#xff0c;04的时候&#xff0c;也没有在意系统的文件系统变了&#xff1b;当使用一段时间之后&#xff0c;发现系统没有8.10时使用的顺畅&#xff0c;这时才发现9.04之后心内核都支持ext4文件系统&#xff0c;该文件系统要比…

史上最简单的软件破解——5行脚本代码完美破解99%的过期软件

如果你看到了这篇博文&#xff0c;绝对保证不虚此行。仅仅5行脚本代码&#xff0c;即可破解99%的过期软件。 这件事的背景&#xff1a;最近在找了一些学习资料&#xff0c;其中有Rational Rose画的图&#xff0c;好久没用过它了。今天安装好&#xff0c;导入许可文件&#xff…

Jquery getJSON方法分析(二)

getJSON与aspx准备工作Customer类publicclassCustomer{ publicintUnid { get; set; } publicstringCustomerName { get; set; } publicstringMemo { get; set; } publicstringOther { get; set; }}&#xff08;一&#xff09;ashxCustomer customer newCustomer …

自适应阈值算法(大津阈值法)

最大类间方差法是由日本学者大津于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU。它是按图像的灰度特性,将图像分成背景和目标2部分。背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致2部分差…

数据在链路层传播相关时间计算

本来很懵逼的 看到这篇文章基本全懂了 一般这种题目会让我感觉很是煎熬&#xff0c;不知道怎么算。终于打通这类题目&#xff0c;总结到这里。 先看这类题目的常见表述&#xff1a;如图所示&#xff0c;图中路由器采用存储–转发的方式&#xff0c;所有链路的传播速率均为100…

多年以后重发:多线程安全的变量模板

大家好&#xff0c;这里是我以xghome这个用户名&#xff0c;02年在CSDN上发布的《多线程安全的变量模板》&#xff0c;这次在《0bug -- C/C商用工程之道》一书中&#xff0c;作为“资源锁”和多线程通信核心示例&#xff0c;也再次出现。这个模板我当初大约写了19遍&#xff0c…

高等数学的函数连续,可导,可微和偏导数连续的关系(多元)

最近在自学机器学习 顺便把高数捡回来 结论&#xff08;一元函数范畴内&#xff09; 可导与连续的关系&#xff1a;可导必连续&#xff0c;连续不一定可导&#xff1b; 可微与连续的关系&#xff1a;可微与可导是一样的&#xff1b; 可积与连续的关系&#xff1a;可积不一定连续…