好记性,不如记 博客,多做笔记,多勤学。
在一个并发系统中,用户进程都需要向Redo Log Buffer写入重做数据,Oracle 通过Latch来保护和协调Redo Log Buffer的工作,同时还有Redo copy latch 、redo allocation latch等。Redo copy latch负责写redo内容到Redo log buffer过程的保护,redo allocation latch用户管理Log buffer内存空间的分配。
一个进程在修改数据时就会产生redo,redo首先在PGA中保存,当进程需要将Redo信息Copy进入Redo log buffer时需要获得redo copy latch的保护,获得了该latch以后才能把redo拷贝到log buffer中。redo copy latch 表明正在把redo拷贝到log buffer中,在此过程中,LGWR应该等待直到进程拷贝完成才能把目标log buffer block写入磁盘。
select name,gets,immediate_gets,immediate_misses,spin_gets from v$latch where name='redo copy';
NAME GETS IMMEDIATE_GETS IMMEDIATE_MISSES SPIN_GETS
--------------- ---------- -------------- ---------------- ----------
redo copy 79 293346 18 0
Redo copy latch获取以后,进程紧跟着需要获取redo allocation latch,分配redo空间,空间分配完成后,redo allocation latch会立刻释放,进程把PGA里临时存放的redo信息copy到redo log buffer,copy完成后,redo copy latch也会释放。
在完成redocopy以后,进程可能需要通知LGWR去执行写出。为了避免LGWR被不必要的通知,进程需要先获取redo writting latch 去检查LGWR是否已经激活或者被通知,如果LGWR已经被激活或者通知,redo writing latch将被释放。
SQL> select addr,latch#,name,gets,misses,immediate_gets,immediate_misses from v$latch where name='redo writing';
ADDR LATCH# NAME GETS MISSES IMMEDIATE_GETS IMMEDIATE_MISSES
---------------- ---------- --------------- ---------- ---------- -------------- ----------------
000000000822B7E0 180 redo writing 40901 0 0 0
如果redo writing latch竞争过多,可能以为着提交过于频繁,会导致log file sync等待事件。在执行redo copy 的过程中,进程以log file sync 事件处于等待,当进程从log file sync中等待中唤醒以后,进程需要重新获得redo allocation latch检查是否相应的redo已经写入redo log file,如果尚未写入,进程必须继续等待 。
当进程需要向redo log buffer 写入redo信息时需要获得redo allocation latch,分配redo log buffer空间。所以,如果数据库处于比较繁忙状态,那么redo allocation latch通常也是竞争比较激烈的latch之一。
SQL> select addr,latch#,name,gets,misses,immediate_gets,immediate_misses from v$latch_children wh
name = 'redo allocation';
ADDR LATCH# NAME GETS MISSES IMMEDIATE_GETS IMMEDIATE_MISSES
---------------- ---------- --------------- ---------- ---------- -------------- ----------------
000007FC6DDB0F70 182 redo allocation 27 0 0 0
000007FC6DDB0ED0 182 redo allocation 27 0 0 0
000007FC6DDB0E30 182 redo allocation 27 0 0 0
000007FC6DDB0D90 182 redo allocation 27 0 0 0
000007FC6DDB0CF0 182 redo allocation 27 0 0 0
000007FC6DDB0C50 182 redo allocation 27 0 0 0
000007FC6DDB0BB0 182 redo allocation 27 0 0 0
000007FC6DDB0B10 182 redo allocation 27 0 0 0
000007FC6DDB0A70 182 redo allocation 27 0 0 0
000007FC6DDB09D0 182 redo allocation 27 0 0 0
000007FC6DDB0930 182 redo allocation 27 0 0 0
ADDR LATCH# NAME GETS MISSES IMMEDIATE_GETS IMMEDIATE_MISSES
---------------- ---------- --------------- ---------- ---------- -------------- ----------------
000007FC6DDB0890 182 redo allocation 27 0 0 0
000007FC6DDB07F0 182 redo allocation 27 0 0 0
000007FC6DDB0750 182 redo allocation 27 0 0 0
000007FC6DDB06B0 182 redo allocation 27 0 0 0
000007FC6DDB0610 182 redo allocation 27 0 0 0
000007FC6DDB0570 182 redo allocation 27 0 0 0
000007FC6DDB04D0 182 redo allocation 27 0 0 0
000007FC6DDB0430 182 redo allocation 27 0 0 0
000007FC6DDB0390 182 redo allocation 27 0 0 0
000007FC6DDB02F0 182 redo allocation 27 0 0 0
000007FC6DDB0250 182 redo allocation 27 0 0 0
redo 的内容
Oracle通过redo来实现快速提交,一方面是因为redo log file可以连续、顺序的快速写出,另一方面也会redo记录的精简内容 有关。
在一个并发系统中,用户进程都需要向Redo Log Buffer写入重做数据,Oracle 通过Latch来保护和协调Redo Log Buffer的工作,同时还有Redo copy latch 、redo allocation latch等。Redo copy latch负责写redo内容到Redo log buffer过程的保护,redo allocation latch用户管理Log buffer内存空间的分配。
一个进程在修改数据时就会产生redo,redo首先在PGA中保存,当进程需要将Redo信息Copy进入Redo log buffer时需要获得redo copy latch的保护,获得了该latch以后才能把redo拷贝到log buffer中。redo copy latch 表明正在把redo拷贝到log buffer中,在此过程中,LGWR应该等待直到进程拷贝完成才能把目标log buffer block写入磁盘。
select name,gets,immediate_gets,immediate_misses,spin_gets from v$latch where name='redo copy';
NAME GETS IMMEDIATE_GETS IMMEDIATE_MISSES SPIN_GETS
--------------- ---------- -------------- ---------------- ----------
redo copy 79 293346 18 0
Redo copy latch获取以后,进程紧跟着需要获取redo allocation latch,分配redo空间,空间分配完成后,redo allocation latch会立刻释放,进程把PGA里临时存放的redo信息copy到redo log buffer,copy完成后,redo copy latch也会释放。
在完成redocopy以后,进程可能需要通知LGWR去执行写出。为了避免LGWR被不必要的通知,进程需要先获取redo writting latch 去检查LGWR是否已经激活或者被通知,如果LGWR已经被激活或者通知,redo writing latch将被释放。
SQL> select addr,latch#,name,gets,misses,immediate_gets,immediate_misses from v$latch where name='redo writing';
ADDR LATCH# NAME GETS MISSES IMMEDIATE_GETS IMMEDIATE_MISSES
---------------- ---------- --------------- ---------- ---------- -------------- ----------------
000000000822B7E0 180 redo writing 40901 0 0 0
如果redo writing latch竞争过多,可能以为着提交过于频繁,会导致log file sync等待事件。在执行redo copy 的过程中,进程以log file sync 事件处于等待,当进程从log file sync中等待中唤醒以后,进程需要重新获得redo allocation latch检查是否相应的redo已经写入redo log file,如果尚未写入,进程必须继续等待 。
当进程需要向redo log buffer 写入redo信息时需要获得redo allocation latch,分配redo log buffer空间。所以,如果数据库处于比较繁忙状态,那么redo allocation latch通常也是竞争比较激烈的latch之一。
SQL> select addr,latch#,name,gets,misses,immediate_gets,immediate_misses from v$latch_children wh
name = 'redo allocation';
ADDR LATCH# NAME GETS MISSES IMMEDIATE_GETS IMMEDIATE_MISSES
---------------- ---------- --------------- ---------- ---------- -------------- ----------------
000007FC6DDB0F70 182 redo allocation 27 0 0 0
000007FC6DDB0ED0 182 redo allocation 27 0 0 0
000007FC6DDB0E30 182 redo allocation 27 0 0 0
000007FC6DDB0D90 182 redo allocation 27 0 0 0
000007FC6DDB0CF0 182 redo allocation 27 0 0 0
000007FC6DDB0C50 182 redo allocation 27 0 0 0
000007FC6DDB0BB0 182 redo allocation 27 0 0 0
000007FC6DDB0B10 182 redo allocation 27 0 0 0
000007FC6DDB0A70 182 redo allocation 27 0 0 0
000007FC6DDB09D0 182 redo allocation 27 0 0 0
000007FC6DDB0930 182 redo allocation 27 0 0 0
ADDR LATCH# NAME GETS MISSES IMMEDIATE_GETS IMMEDIATE_MISSES
---------------- ---------- --------------- ---------- ---------- -------------- ----------------
000007FC6DDB0890 182 redo allocation 27 0 0 0
000007FC6DDB07F0 182 redo allocation 27 0 0 0
000007FC6DDB0750 182 redo allocation 27 0 0 0
000007FC6DDB06B0 182 redo allocation 27 0 0 0
000007FC6DDB0610 182 redo allocation 27 0 0 0
000007FC6DDB0570 182 redo allocation 27 0 0 0
000007FC6DDB04D0 182 redo allocation 27 0 0 0
000007FC6DDB0430 182 redo allocation 27 0 0 0
000007FC6DDB0390 182 redo allocation 27 0 0 0
000007FC6DDB02F0 182 redo allocation 27 0 0 0
000007FC6DDB0250 182 redo allocation 27 0 0 0
redo 的内容
Oracle通过redo来实现快速提交,一方面是因为redo log file可以连续、顺序的快速写出,另一方面也会redo记录的精简内容 有关。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30430420/viewspace-1802196/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30430420/viewspace-1802196/