您的位置:首页 > 数据库 > Oracle

高级OWI与ORACLE性能调整读书笔记之Select/Select引起的read by other session

2013-06-13 17:15 323 查看
在抽象层次上,为了修改一个行,获得锁存器或者锁的过程如下

1)         为了查找要修改行相对应的块存在的位置(hash chain),请求cache buffers chains锁存器

2)         对载入块的缓冲区请求buffer lock,并释放cache buffers chains锁存器

3)         请求TX锁,修改相应行。若在此过程中,没有获得TX锁。则释放buffer lock并进入等待状态。之后重复过程1

4)         修改相应的行后,释放buffer lock。

为获得buffer lock而等待的期间内,一般会等待buffer busy waits事件。

 

下面进行相关的测试。

Select/Select引起的read by other session

SELECT / SELECT引起的buffer lock争用,发生在将相同块载入到缓冲区的过程中,通过read by other session等待时间观察。

 

测试方案

创建>15w行的表RBOS_TEST

多个进程同时对RBOS_TEST表执行操作

在此过程中,多个进程同时相对同一个块获得buffer lock的过程中,则发生buffer lock竞争。

 

SQL> create table rbos_test(id char(1000));

 

表已创建。

 

SQL> insert into rbos_test select ' ' from dba_objects where rownum<100000;

 

已创建76542行。

SQL> insert into rbos_test select ' ' from dba_objects where rownum<100000;

已创建76542行。

SQL> create or replace procedure rbos_do_select

  2  is

  3  begin

  4    for x in (select * from rbos_test) loop

  5              null;

  6    end loop;

  7  end;

  8  /

 

过程已创建。

 

SQL> var job_no number;

SQL> begin

  2    for idx in 1 .. 50 loop

  3        dbms_job.submit(:job_no,'rbos_do_select;');

  4    end loop;

  5    commit;

  6  end;

  7  /

 

新开一个Session

执行存储过程

SQL> exec rbos_do_select

 

PL/SQL 过程已成功完成。

 

SQL>  select event from v$session_event where sid=(select sid from v$mystat wher

e rownum=1);

 

EVENT

-----------------------------------

Disk file operations I/O

latch: cache buffers chains

buffer busy waits

read by other session

enq: KO - fast object checkpoint

log file sync

db file sequential read

db file scattered read

db file parallel read

direct path read

SQL*Net message to client

 

read by other session是由于物理IO的原因引起,同时会会伴随db file sequential read,db file
scattered read等物理读现象的出现。若以相同的方式再次测试的话,此现象会消失,因为所需要的数据块已经全部在缓冲区了,无需物理读。

 

减少read by other session的等待方法如下:

l  优化SQL,减少物理IO

l  增加SGA的大小(对于目前的硬件水平,大多数情况下不是太大问题了)

 

在ORACLE 11G下测试的同学可能最后看不出read by other session的结果,这是oracle11g的算法改变所致,详细请看Oracle 11g direct path read 等待事件的理解http://blog.csdn.net/guxueliang/article/details/9088315
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: