高级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
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
相关文章推荐
- select/select 引起的read by other session
- Select/Update 引起的read by other session
- 大量read by other session导致oracle性能低
- 10g wait event: read by other session
- Read by other session 等待说明
- AWR实战分析之---- read by other session
- WAIT EVENT:read by other session
- gdb调试之--read by other session 等待事件的重现
- 一次 read by other session 的处理过程--数据走索引需要看索引字段的数据分布情况
- 系统遇到read by other session等待事件
- read by other session 等待事件。
- gdb调试之--read by other session 等待事件的重现
- buffer cache —— buffer busy waits/read by other session
- 高级OWI与ORACLE性能调整读书笔记之UPDATE/UPADTE引起的buffer busy wait
- 等待事件read by other session
- Read by other session
- read by other session等待事件
- 等待事件:read by other session
- read by other session