latch:shared pool
发布日期:2021-05-14 18:13:00 浏览次数:18 分类:精选文章

本文共 1308 字,大约阅读时间需要 4 分钟。

数据库版本

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
CORE 12.2.0.1.0 - Production


创建对象

drop table HDP.T;  
create table hdp.t as select * from all_objects;

确定HDP.T表第一行所在的文件和数据块号

select DBMS_ROWID.ROWID_RELATIVE_FNO(rowid), DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid)  
from hdp.t where rownum=1 -- rowid: 7,19043

寻找HDP.T表第一行LATCH所在的地址

select * from x$bh where file#=7 and dbablk=19043 -- 000000006C6F0F00

获取缓冲区链中的LATCH对象及其相关信息

select b.OBJECT_ID, a.file#, b.OWNER, b.OBJECT_NAME, a.DBABLK  
from x$bh a, dba_objects b
where a.obj=b.object_id and a.hladdr='000000006C6F0F00'

通过.Channel%20name类查询Latch相关 Informationen

select sid, serial#, event, p1raw, p2raw  
from v$session where wait_class!='Idle';

上述脚本用于测试Latch竞争情况。在Oracle 12c中,Latch等待事件的名称可能与之前的版本有所不同。


使用DBMS_ROWID.ROWID_CREATE函数获取Latch所在的RowID

select DBMS_ROWID.ROWID_CREATE(1,18,1,16502,1) from dual;

修改的代码示例

以下代码用于测试Latch竞争

代码1

declare number r_count;  
begin
for i in 1..1000000 loop
select count(*) into r_count from sys.obj$ where rowid='AAAAASAABAAAEB2AAB';
end loop;
end;
/

代码2

declare number r_count;  
begin
for i in 1..1000000 loop
select count(*) into r_count from hdp.t where rownum=1;
end loop;
end;
/

测试Latch竞争的效果

通过以上代码,可以观察Oracle database在Latch资源下的竞争情况。

上一篇:RAC集群宕机案例1
下一篇:增加 /dev/shm

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月27日 12时04分50秒