Oracle 日志原理剖析

这篇文章是参考甲骨论老相老师的教学视频
http://v.youku.com/v_show/id_XMzk0NjYxNzgw.html
所做的学习笔记
 

作为1个DBA, 需要学习许多数据库知识, 但是目的无非两大部分.
1. 保持数据库数据的一致性
2. 优化数据库性能


而日志系统只对应第1点,日志系统就是用来保持数据的一致性的.

我们先回顾下之前讲过的sql语句执行流程
Oracle 日志原理剖析 - 饥民 - 饥民2011

如上图.可以见到:
1. 产生日志的原因是Buffer cache里发生的数据改动.
2. buffer cache里数据改动产生的日志被写入Redo log buffer(日志缓存)里.
3. 后台进程LGWR会将redo log buffer里的日志写入到硬盘上的日志文件(物理IO)



        而且之前我们讲过,Buffer cache是由许多个大小为1个block size 的buffer组成的. 所以buffer cache里的数据改动实际上就是buffer的改动.


       从逻辑上看,我们可以假定Buffer cache存在一名记录者. 这名记录者可以实施地观察出buffer cache哪1个buffer被修改, 在那个时间点被修改, 并 严格按照修改时间顺序把被修改的buffer的改动记录下来.''

如下图:
      3. 并不关心buffer是被哪个session修改的      3. 并不关心buffer是被哪个session修改的 Oracle 日志原理剖析 - 饥民 - 饥民2011

     当然,实际上Database Buffer Cache中是不存在记录者这个东西的.
     不过这两个逻辑也让我们明白三点:

     1. 日志记录的单位是buffer.
     2. 严格按照buffer被修改的时间顺序来记录.
     3. 并不关心buffer是被哪个session修改的

      从实际上看, buffer cache里的buffer是被server process修改的, 一旦server process修改了1个buffer里的数据, server process就同时生成重做日志数据,并放入与该server process对应的PGA中.  然后根据一些触发条件,会将PGA里的日志写入到SGA里面的redo log buffer中,  最后会被后台进程LGWR写入到日志文件中...

      我们也可以分析出
      1. 对小量数据的多次修改可能会产生大量的日志数据.
      2. 大量的日志数据被写入到日志文件会占用大量IO资源


      这一节,老相老师只提到这几个点,  他说以后讲优化数据库时会再详细讲..

转载于:https://www.cnblogs.com/nvd11/archive/2013/04/02/2996795.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值