oracle redo wait较高,oracle 体系结构及内存管理 09_redo log

一、Oracle日志原理:数据库将buffer cache中的每个buffer(包括DML,DDL数据块对索引的改变、对回滚段数据块的改变、对临时表

空间的临时段的改变等)的改过程严格按照时间顺序记录到redo log buffer中,再由lgwr写入到redo log文件;

日志记录(矢量)方式:buffer 地址,时间,改变方式(增,删)。

可能存在的状况:修改了一行数据,产生了几十K的日志。

redo log做用:记录数据库的改变过程,实例恢复,配合归档实现介质恢复。html

二、实际日志产生过程:会话的server process修改buffer,先产生日志写入本身的PGA,在某种触发的条件下,再由PGA写入log

buffer,最后由LGWr写入log files;

Server Process:干的事情:将block读入buffer cache,将buffer读入cpu,修改buffer,将修改日志记入本身的PGA,再由

PGA写入redo log buffer.

三、LGWr触发条件:

1.用户提交或回滚

2.有1/3(_log_io_size默认是0)重作日志缓冲区未被写入磁盘

select * from x$ksppcv where  indx in  (select indx from x$ksppi where ksppinm ='_log_io_size');

3.有大于1M的重作日志缓冲区未被写入磁盘

4.每隔3秒钟

5.DBWR须要写入的数据的SCN大于LGWR记录的SCN,DBWR触发LGWR写入

6.发生日志切换时触发LGWR

四、如何确保已经提交的事务不会丢失:commit触发LGWr将log buffer中的日志所有写入磁盘日志文件,Write-Ahead-Log:日志写入

优先,脏的buffer在写入磁盘前,buffer的改变过程必定已经写入log日志。

五、oracle快速提交

读缓存:块读入缓存,cpu能够读缓存中的数据,修改仍是修改磁盘上的数据,不能直接修改缓存中数据,没有负责将缓存中数据写

入磁盘的功能。

写缓存:oracle实现了写缓存,buffer cache中的buffer修改后,产生日志写入日志文件,实现了写缓存,日志写入存储,因存储有

写缓存功能(存储后本身的电池),提升了数据库的性能。

日志是连续的顺序,批量写入日志文件,减小寻道时间,由于日志文件存在存储上,LGWr绕过OS缓存直接写入存储的缓存中。

六、Log buffer大小设置

9i之前,通常是3M在10g中ORACLE的ASMM会自动调整它的值,他遵循这样一个原则,'Fixed SGA Size'+ 'Redo Buffers'是

granule size(粒度) 的整数倍,oracle中分配空间是按照granule size为粒度,空间都是guanule size的整数倍。

select * from v$sgainfo where name in ('Fixed SGA Size','Redo Buffers','Granule Size');

查看日志缓冲区大小 show parameter log_buffer;

在10.2.0.3 中Log Buffer 默认值是14M,在10.2.0.4中,默认值是15M,修改log_buffer的大小不能指定单位和scope不能为both

alter system set log_buffer=10240 scope=spfile

数据库的版本信息

select * from v$version

redo log的IO块大小通常与操做系统块统一致

select max(lebsz) from x$kccle;

log buffer不足的表现:

REDO NOWAIT #小于100%

redo log space wait time #较大

redo allocation,redo copy、redo writing #等闩锁等待较为严重

log file sync  #发生在提交或回滚后,等待日志缓冲写入日志文件,代表过多的提交或短事务

七、REDO LOG 切换的时间应该尽量的不低于10-20 分钟

一个日志文件从开始写,到写满的时间是10-20分钟,设置日志文件的大小,

select to_char(FIRST_TIME,'yyyy-mm-dd hh24:mi:ss') f_time,SEQUENCE# from v$log_history;--查询日志切换时间信息

awr报告load profile,查看每秒产生的redo,再乘以你要的多少时间切换一次就出来了REDO的大小

SELECT optimal_logfile_size   FROM   v$instance_recovery; --利用系统功能查询日志组推荐的大小单位是M

日志组的大小标准:不出现明显的日志等待,DG的日志不宜设置过大

八、LOG buffer优化建议

在OLTP 系统上,REDO LOG 文件的写操做主要是小型的,比较频繁,通常的写大小在几K,而每秒钟产生的写IO次数会达到几

十次,数百次甚至上千次。所以REDO LOG文件适合存放于IOPS 较高的转速较快的磁盘上,IOPS 仅能达到数百次的SATA 盘不适合

存放REDO LOG 文件。另外因为REDO LOG 文件的写入是串行的,所以对于REDO LOG文件所作的底层条带化处理,对于REDO LOG写

性能的提高是十分有限的。

LGWR:每次写入的量小,写入次数比较多,IOPS:每秒中磁盘的IO操做次数,tps:磁盘每秒的请求次数

SATA,SAS,FC,固态盘

九、日志组及成员文件相关的相关操做

日志组大小调整,建立新大小的日志组,切换使用后删除原来日志组,current,active日志组不能删

ALTER DATABASE ADD LOGFILE GROUP 4 ('/u01/app/flashback/ipemsdb/onlinelog/redolog4_01.log') SIZE 50M REUSE ;

ALTER DATABASE DROP LOGFILE GROUP 4;

移动日志到新目录,将日志组的状态切至inactive,再将新路径和文件放好,执行命令修改

ALTER DATABASE RENAME FILE '/u01/app/flashback/ipemsdb/onlinelog/o1_mf_2_bw56d062_.log' TO '/u01/app/flashback/ipemsdb/redolog/o1_mf_2_bw56d062_.log';

日志组成员增长(无状态限制)和删除(只能删除非current和非最后一个成员)实体文件还需手动删除

ALTER DATABASE ADD LOGFILE MEMBER '+DG1/ora55/onlinelog_bak/group_2_02.log' TO GROUP 2;

ALTER DATABASE DROP LOGFILE MEMBER '+DG1/ora55/onlinelog_bak/group_1_03.log';

切换日志,使新建日志联机使用

alter system switch logfile --不等归档完成就进行switch logfile操做,速度快,尤为在非归档模式下适用,对当前实例生效。

alter system archive log current --等待归档完成才操做,对全部实例生效。

ALTER SYSTEM CHECKPOINT;  --切到inactive状态

清空日志文件的内容。主要用于数据库没法进行有效恢复的时候。如标识为current日志组的全部文件都坏了

等。只有非active 和非current状态的组才能被清空

ALTER DATABASE CLEAR LOGFILE group 1;--已归档

ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 1; --未归档

查询日志切换时间

SELECT N.RECID  AS RECID ,N.FIRST_TIME  AS FIRST_TIME ,M.FIRST_TIME AS END_TIME ,

ROUND((M.FIRST_TIME - N.FIRST_TIME) * 24 * 60, 2)AS MINUTES

FROM V$LOG_HISTORY M, V$LOG_HISTORY N WHERE M.RECID = N.RECID + 1 ORDER BY M.RECID

相关视图

SELECT * FROM V$LOG;

SELECT * FROM V$LOGFILE;

SELECT * FROM V$ARCHIVED_LOG;

SELECT * FROM V$RECOVER_FILE;

SELECT * FROM V$LOG_HISTORY;  --控制文件中日志的历史信息

SELECT * FROM V$LOGHIST;

十、日志组及日志文件状态v$log

日志文件组的状态通常有INACTIVE、ACTIVE、CURRENT、UNUSED、CLEARING、CLEARING_CURRNT等六种状态:

UNUSED : 重作日志文件组对应的文件还从未被写入过数据,刚建立的日志文件组会显示成这一状态。

CURRENT: 正在使用的日志文件组。当前Oracle数据库正在使用的联机重作日志文件组。

ACTIVE : 是活动的但不是当前组,实例恢复时须要这组日志。表示虽然当前并未使用,但该文件未归档或

对应的数据没有所有写入数据文件,实例恢复必须借助该文件中保存的内容。

INACTIVE:日志文件中的内容已被妥善处理,处于空闲状态。

CLEARING:日志文件正被重建(重建后该状态会变成UNUSED)。

CLEARING_CURRENT:表示该组重作日志重建时出现错误。

v$log.ARCHIVED列值为YES表示已经归档,NO表示未归档。

v$log.SEQUENCE列值表示日志序列号,每进行一第二天志切换就+1。

v$log.FIRST_CHANGE# 列值为日志的SCN号,下一个日志号即上一个日志的next SCN

日志文件的状态有STALE,INVALID 、DELETED、NULL 四种状态。能够经过v$logfile视图查询

INVALID : 文件是不能够被访问的。

STALE : 文件中的内容是不彻底的。

NULL : 文件正在使用。

DELETED : 文件已再也不有用了。

十一、异步提交技术:未等LGWr将日志写完就完成提交

系统级

ALTER SYSTEM SET COMMIT_WRITE = IMMEDIATE, WAIT

会话级

ALTER SESSION SET COMMIT_WRITE = IMMEDIATE, NOWAIT

语句级

COMMIT WRITE BATCH WAIT

COMMIT WRITE BATCH NOWAIT

十二、日志与性能

减小日志量:nologing,临时表

redo 性能改进:加大批次提交的量,BULK DML

1三、归档

关归档:(设置的归档目录依然存在)

确认日志组都已归档,除current外其余日志组为inactive状态;

startup mount;

alter database noarchivelog;

alter database open;

开归档:

shutdown immediate;

startup mount;

alter databae archivelog;

alter database open;

配置归档目录:

归档目录能够配置本地和远程两种方式,且两种方式互不兼容,同时为了与闪回目录区分统一采用方案2

MANADATORY归档必须成功复制到目的路径以后,联机重作日志才能被复用,OPTIONAL正好相反。经过archive

log list确认归档目录与闪回分开

alter system set log_archive_dest = '' scope = spfile; --若是log_archive_dest有值先置空

alter system set log_archive_dest_1 = 'location=/u01/arc_dir/' scope = spfile; --能够设置多个

log_archive_dest_2 = 'SERVICE=standby1';  --远程 SERVICE 指定远程数据库的网络服务名

自动归档参数LOG_ARCHIVE_START 10g已经废弃,只要开启归档就自动归档。

ALTER SYSTEM SET LOG_ARCHIVE_START=TRUE SCOPE=SPFILE;

归档进程调整,结合业务状况设置,默认为2,oracle也会根据系统要求自动调整

ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3;

归档相关信息查询

查询归档目录

select dest_name,status,archiver,destination,log_sequence,reopen_secs,transmit_mode,process from v$archive_dest;

查询已归档信息

select RECID,NAME,DEST_ID,SEQUENCE#,RESETLOGS_CHANGE#,ARCHIVED,STATUS ,BACKUP_COUNT from v$archived_log;

select * from v$recovery_file_dest;

select * From v$flash_recovery_area_usage;

show parameter db_

清除归档日志,归档日志保留时间越久越好

进入ORACLE数据备份工具

rman target /

DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

若是物理文件被删除

crosscheck archivelog all;

delete expired archivelog all;     数据库

参考文档:

http://www.233.com/oracle/zhonghe/20070316/1327386.html

http://blog.csdn.net/leshami/article/details/5784713缓存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值