这篇文章是参考甲骨论老相老师的教学视频
http://v.youku.com/v_show/id_XMzk0NjYxNzgw.html
所做的学习笔记
作为1个DBA, 需要学习许多数据库知识, 但是目的无非两大部分.
1. 保持数据库数据的一致性
2. 优化数据库性能
而日志系统只对应第1点,日志系统就是用来保持数据的一致性的.
我们先回顾下之前讲过的sql语句执行流程
如上图.可以见到:
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修改的
从实际上看, buffer cache里的buffer是被server process修改的, 一旦server process修改了1个buffer里的数据, server process就同时生成重做日志数据,并放入与该server process对应的PGA中. 然后根据一些触发条件,会将PGA里的日志写入到SGA里面的redo log buffer中, 最后会被后台进程LGWR写入到日志文件中...
我们也可以分析出
1. 对小量数据的多次修改可能会产生大量的日志数据.
2. 大量的日志数据被写入到日志文件会占用大量IO资源
这一节,老相老师只提到这几个点, 他说以后讲优化数据库时会再详细讲..
http://v.youku.com/v_show/id_XMzk0NjYxNzgw.html
所做的学习笔记
作为1个DBA, 需要学习许多数据库知识, 但是目的无非两大部分.
1. 保持数据库数据的一致性
2. 优化数据库性能
而日志系统只对应第1点,日志系统就是用来保持数据的一致性的.
我们先回顾下之前讲过的sql语句执行流程
如上图.可以见到:
1. 产生日志的原因是Buffer cache里发生的数据改动.
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修改的
当然,实际上Database Buffer Cache中是不存在记录者这个东西的.
不过这两个逻辑也让我们明白三点:
1. 日志记录的单位是buffer.
2. 严格按照buffer被修改的时间顺序来记录.
当然,实际上Database Buffer Cache中是不存在记录者这个东西的.
不过这两个逻辑也让我们明白三点:
1. 日志记录的单位是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资源
这一节,老相老师只提到这几个点, 他说以后讲优化数据库时会再详细讲..