ORACLE 日志
保证数据一致性
1 日志原理
buffer地址 时间 什么改变
2 实际日志产生过程
server process 修改一个buffer的时候,会产生日志写在各自的PGA中,在日志到一定
程度的时候在写在LOGBUFFER中,LOGBUFFER中的日志由LGWR进程写入redo.log文件中
3 归档模式
4 如何确保已经提交的事务不会丢失
5 Write-Ahead-Log:日志写入优先
6 LGWR绕过OS缓存直接写入磁盘,但是绕不过存储的写缓存
7 Log Buffer大小设置
9i以前,一般是3M
在10g中ORACLE会自动调整它的值,它遵循这样一个原则,
'Fixed SGA Size'+'Redo Buffer'是granule size的整数倍
select *
from v$sgainfo
where name in ('Fixed SGA Size','Redo Buffers','Granule Size');
select * from v$version where rownum < 2;
8 LGWR触发条件:Write-Ahead-Log:日志写入优先
1 用户提交 commit
2 有1/3重做日志缓冲区未被写入磁盘
3 有大于1M的重做日志缓冲区未被写入磁盘
4 每隔3秒钟
5 DBWR需要写入的数据的SCN大于LGWR记录的SCN,DBWR触发LGWR写入 (重点)
9 Log优化建议:
在OLTP系统上,REDO LOG 文件的写操作主要是小型的,比较频繁
一般写的大小在几K,而每秒钟产生的写IO 次数回答道几十次,数百次
至上千次。因此REDO LOG文件适合存放IOPS较高的转速较快的磁盘上,
IOPS仅能达到熟白菜的SATA盘B不适合存放REDO LOG文件。另外由于
REDO LOG文件的写入时串行的,因此对于REDO LOG 文件所做的底层
条带化处理,对于REDO LOG写性能的提升是十分有限的。
10 REDO LOG切换的时间应该尽可能不低于10-20分钟(一个redo.log文件从开始写到写满尽量控制在10-20分钟之间)
select to_char(FIRST_TIME,'yyyy-mm-dd hh24:mi:ss') f_time,SEQUENCE# from v$log_history;