buffer busy waits:读不堵塞写,写堵塞读。
一个会话读、另个会话写这个buffer,写的同时又有个会话读这个buffer产生等待buffer busy waits
oracle修改一个buffer的步骤。
减少2-7步骤的时间可以减少buffer busy waits。
期间主要工作就是 生成redo和修改buffer中的内容。修改buffer内容是调用系统函数memcpy完成,几乎没优化空间。主要是在生成redo上。
生成redo简单流程是:
在pga中记录后映象数据,传到共享池,然后传到log buffer中,如果log buffer没空间,进程会先等LGWR刷新log buffer中的空间,腾出空间后才能继续(此时等待为log buffer space)。
产生redo遭遇log buffer没空间的情况有时候还是存在的,产生redo花费时间大大增加。因此,保证log buffer有空间可以减少buffer pin锁的持有时间。
Log buffer没空间的原因是产生的redo太多或者LGWR写的太慢。redo过多为应用问题,无法改变。LGWR写的慢是IO慢,加快IO写的性能,可以提高log buffer中空闲空间比例,可以增加redo产生的速度,减少独占buffer pin锁的持有时间。
所以把redo放在更快的存储设备上,可以减少buffer busy waits时间。
buffer busy wait
1.抬高高水位线
2.buffer busy wait主要由写堵塞写或者写堵塞读,减少写操作的持有buffer pin(X独占)锁的时间,整体上buffer busy wait会下来。