第十讲--Oracle日志原理剖析

日志关系到数据一致性,日志和性能没有多大关系。

Oracle的日志是严格按照buffer cache里面buffer的改变时间去记录的。

Oracle怎么记录buffer的改变呢?

1.      记录buffer的地址;

2.      记录改变发生的时间;

3.      对数据块做了什么改变,改变就两种,增加和删除,修改数据的本质是删一行数据在添加一行数据,看来修改时增删改中消耗最大的操作,修改一行数据会产生几十K的日志;

Oracle数据块的修改会产生大量的日志,LGWR会把日志从redo logbuffer写到redo log里面,这就会有物理IO,有物理IO就会有性能问题。

每一个连接oracle的会话都会分到一小块内存,这块内存叫做PGA。一个会话就是一个server process,每个server process都可能修改buffer cache里面的buffer。Server process可以将block读到buffer,会从buffer里面读数据到CPU里面,也会修改buffer的数据,当buffer写回block时是DBWR。Server process修改buffer时自己会产生日志,写到自己的PGA里面,当写到一定程度以后,再从PGA写到redo log buffer里面去。最终通过LGWR把redo log buffer的数据写到redo log(磁盘上的文件)。

你可能感兴趣的:(第十讲--Oracle日志原理剖析)