全部博文(389)
分类: Oracle
2011-08-29 21:38:24
只读模式的CACHE BUFFERS CHAINS
虽然从ORACLE 9I里边引入了只读模式的CACHE BUFFERS CHAINS,但是在获取BUFFER LOCK的时候,还是会请求CACHE BUFFERS CHAINS,但是情形没有8I里边那么严重了,测试一把,
1,首先建一个表,
create table test (a int,b varchar2(20));
2,往这个表里INSERT 50000行数据;
declare
i int;
begin
for i in 1..50000
loop
insert into test values(i,'adsfsafsa');
end loop;
end;
3,在A的栏位上创建一个INDEX;
create index test_i on test(i);
4,编一个存储过程;进行大量的索引扫描操作
create or replace procedure test_k is
begin
for i in (select /*+ INDEX(TEST TEST_I) */ * from test where a>20000)
loop
null;
end loop;
end;
5,打开2000个会话来执行这个存储过程;
var i number;
begin
for j in 1..2000
loop
dbms_job.submit(:i,'TEST_K;');
commit;
end loop;
end;
6,查询等待事情发现latch: cache buffers chains等待很严重,CPU运大部分时间都运行在SYS模式下
Cpu(s): 16.3%us, 83.7%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
结论:就算以只读模式获取cache buffers chains LATCH并不能完全解决这个LATCH争用的问题,只是争用程度不那么严重了.