逻辑读时的cbc latch(三)
admin
2023-05-12 05:21:37
0

继续验证使用索引时,cbc latch相关情况,使用solaris中的dtrace


编写dtrace脚本

more cbc.d
#!/usr/sbin/dtrace -s -n 
char *memnr;
int latchaddr;
dtrace:::BEGIN
{
        i=1;
        latchaddr=0;
}
pid$1::sskgslcas:entry
{
        memnr=copyin(arg0,12);
        latchaddr=arg0;
        printf("[%2x%2x%2x%2x|%2x%2x%2x%2x|%2x%2x%2x%2x]",memnr[3],memnr[2],memnr[1],memnr[0],memnr[7],memnr[6],memnr[5],memnr[4],memnr
[11],memnr[10],memnr[9],memnr[8]);
        printf("i=%d PID::entry:==%s:%s:%s:%s %x %x %x %x %x %x",i, probeprov, probemod, probefunc, probename,arg0,arg1,arg2,arg3,arg4,arg5);
        i=i+1;
}
pid$1::sskgslcas:return
{
        memnr=copyin(latchaddr,12);
        printf("[%2x%2x%2x%2x|%2x%2x%2x%2x|%2x%2x%2x%2x]",memnr[3],memnr[2],memnr[1],memnr[0],memnr[7],memnr[6],memnr[5],memnr[4],memnr
[11],memnr[10],memnr[9],memnr[8]);
        printf("i=%d PID::entry:==%s:%s:%s:%s %x %x %x",i, probeprov, probemod, probefunc, probename,latchaddr,arg0,arg1);
        i=i+1;
}

先测试非唯一索引:

session1:创建相应对象,并多次执行查询语句

create table a as select * from dba_objects;
create index idx_a on a(object_id);

select owner from a where object_id='30000';
SQL> select c.sid,spid,pid,a.SERIAL# from (select sid from v$mystat where rownum<=1) c,v$session a,v$process b where c.sid=a.sid and a.paddr=b.addr;

       SID SPID                PID    SERIAL#
---------- ------------ ---------- ----------
       159 1355                 15          9

session2:查询出block

set pagesize 50000
set linesize 10000

select file#,dbablk,tch,ba,HLADDR from x$bh a,dba_objects b where a.obj=b.data_object_id and object_name='IDX_A' order by FILE#,DBABLK;
     FILE#     DBABLK        TCH BA       HLADDR
---------- ---------- ---------- -------- --------
         1      60641          0 5A4A8000 5F13949C
         1      60642          0 5A350000 5F0FC938
         1      60642          4 595EA000 5F0FC938
         1      62091          0 58116000 5F14F564
         1      62091          4 58468000 5F14F564

SQL> select segment_name,header_file,header_block from dba_segments where segment_name=upper('IDX_A');

SEGMENT_NAME                                                                      HEADER_FILE HEADER_BLOCK
--------------------------------------------------------------------------------- ----------- ------------
IDX_A                                                                                       1        60641

60641对段头块,60642为索引的root块,62091为leaf块

执行dtrace脚本,做跟踪,然后回到session1中再次执行查询语句

./cbc.d 1355 > logic_read.log

bash-3.2# cat logic_read.log|wc -l

      25

session1:60642对应5F0FC938,在索引扫描时,对root块是共享cbc latch

SQL> oradebug call sskgslcas 0x5f0fc938 0 1
Function returned 1
SQL> select owner from a where object_id='30000';

OWNER
------------------------------
PUBLIC
PUBLIC

SQL> oradebug call sskgsldecr 0x5f0fc938 1
Function returned 1

62091为leaf块,在索引扫描时,对leaf块是一次共享cbc latch,三次独占cbc latch

bash-3.2# cat logic_read.log|grep -i 5F14F564
  1  53243                  sskgslcas:entry [ 0 0 0 0| 0 0 6 8| 0 0 07a]i=5 PID::entry:==pid1355:oracle:sskgslcas:entry 5f14f564 0 1 fdc4d278 fdc4d270 fdc4d134
  1  53244                 sskgslcas:return [ 0 0 0 1| 0 0 6 8| 0 0 07a]i=6 PID::entry:==pid1355:oracle:sskgslcas:return 5f14f564 16 1
  1  53243                  sskgslcas:entry [ 0 0 0 0| 0 0 6 9| 0 0 07a]i=11 PID::entry:==pid1355:oracle:sskgslcas:entry 5f14f564 0 2000000f ffffffff fdc4d278 fdc4d130
  1  53244                 sskgslcas:return [20 0 0 f| 0 0 6 9| 0 0 07a]i=12 PID::entry:==pid1355:oracle:sskgslcas:return 5f14f564 16 1
  1  53243                  sskgslcas:entry [ 0 0 0 0| 0 0 6 a| 0 0 07a]i=13 PID::entry:==pid1355:oracle:sskgslcas:entry 5f14f564 0 2000000f c4a89cc fdc4d134 fdc4d270
  1  53244                 sskgslcas:return [20 0 0 f| 0 0 6 a| 0 0 07a]i=14 PID::entry:==pid1355:oracle:sskgslcas:return 5f14f564 16 1
  1  53243                  sskgslcas:entry [ 0 0 0 0| 0 0 6 b| 0 0 07a]i=15 PID::entry:==pid1355:oracle:sskgslcas:entry 5f14f564 0 2000000f 0 fdc4d278 fdc4d26c
  1  53244                 sskgslcas:return [20 0 0 f| 0 0 6 b| 0 0 07a]i=16 PID::entry:==pid1355:oracle:sskgslcas:return 5f14f564 16 1

上面是索引为非唯一索引时,cbc latch相关情况下面过程为测试


再测试唯一索引:

create table a as select * from dba_objects;
create unique index idx_a on a(object_id);
SQL> select c.sid,spid,pid,a.SERIAL# from (select sid from v$mystat where rownum<=1) c,v$session a,v$process b where c.sid=a.sid and a.paddr=b.addr;

       SID SPID                PID    SERIAL#
---------- ------------ ---------- ----------
       147 1374                 16         12
select owner from a where object_id='30000';

SQL> select file#,dbablk,tch,ba,HLADDR from x$bh a,dba_objects b where a.obj=b.data_object_id and object_name='IDX_A' order by FILE#,DBABLK;

     FILE#     DBABLK        TCH BA       HLADDR
---------- ---------- ---------- -------- --------
         1      60641          1 595EA000 5F13949C
         1      60642          4 5A752000 5F0FC938
         1      61343          3 584A0000 5F122270

SQL> /

     FILE#     DBABLK        TCH BA       HLADDR
---------- ---------- ---------- -------- --------
         1      60641          1 595EA000 5F13949C
         1      60642          6 5A752000 5F0FC938
         1      61343          5 584A0000 5F122270

SQL> select segment_name,header_file,header_block from dba_segments where segment_name=upper('IDX_A');

SEGMENT_NAME
--------------------------------------------------------------------------------
HEADER_FILE HEADER_BLOCK
----------- ------------
IDX_A
          1        60641

60642为root块,61343为leaf块
bash-3.2# cat logic_read1.log
CPU     ID                    FUNCTION:NAME
  0  53243                  sskgslcas:entry [ 0 0 0 0| 0 0 074| 0 0 0 0]i=1 PID::entry:==pid1374:oracle:sskgslcas:entry 5ceb6fe8 0 930001 5d76abac 5ceb6fe8 5f8c4c6c
  0  53244                 sskgslcas:return [ 093 0 1| 0 0 074| 0 0 0 0]i=2 PID::entry:==pid1374:oracle:sskgslcas:return 5ceb6fe8 16 1
  0  53243                  sskgslcas:entry [ 0 0 0 0| 0 0 5db| 0 0 07a]i=3 PID::entry:==pid1374:oracle:sskgslcas:entry 5f0fc938 0 1 804510c 8045104 fdc18bf8
  0  53244                 sskgslcas:return [ 0 0 0 1| 0 0 5db| 0 0 07a]i=4 PID::entry:==pid1374:oracle:sskgslcas:return 5f0fc938 16 1
  0  53243                  sskgslcas:entry [ 0 0 0 0| 0 0 5 2| 0 0 07a]i=5 PID::entry:==pid1374:oracle:sskgslcas:entry 5f122270 0 1 804510c 8045104 fdc18bf8
  0  53244                 sskgslcas:return [ 0 0 0 1| 0 0 5 2| 0 0 07a]i=6 PID::entry:==pid1374:oracle:sskgslcas:return 5f122270 16 1
  0  53243                  sskgslcas:entry [ 0 0 0 0| 0 0 698| 0 0 07a]i=7 PID::entry:==pid1374:oracle:sskgslcas:entry 5f106340 0 1 fdc18f60 fdc18f58 fdc18f00
  0  53244                 sskgslcas:return [ 0 0 0 1| 0 0 698| 0 0 07a]i=8 PID::entry:==pid1374:oracle:sskgslcas:return 5f106340 16 1
  0  53243                  sskgslcas:entry [ 0 0 0 1| 0 0 075| 0 0 0 0]i=9 PID::entry:==pid1374:oracle:sskgslcas:entry 5ceb6fe8 1 930000 c4a88d0 5ceb6fe8 5f8c4c6c
  0  53244                 sskgslcas:return [ 093 0 0| 0 0 075| 0 0 0 0]i=10 PID::entry:==pid1374:oracle:sskgslcas:return 5ceb6fe8 16 1

bash-3.2# cat logic_read1.log|grep -i 5F0FC938
  0  53243                  sskgslcas:entry [ 0 0 0 0| 0 0 5db| 0 0 07a]i=3 PID::entry:==pid1374:oracle:sskgslcas:entry 5f0fc938 0 1 804510c 8045104 fdc18bf8
  0  53244                 sskgslcas:return [ 0 0 0 1| 0 0 5db| 0 0 07a]i=4 PID::entry:==pid1374:oracle:sskgslcas:return 5f0fc938 16 1
bash-3.2# cat logic_read1.log|grep -i 5F122270
  0  53243                  sskgslcas:entry [ 0 0 0 0| 0 0 5 2| 0 0 07a]i=5 PID::entry:==pid1374:oracle:sskgslcas:entry 5f122270 0 1 804510c 8045104 fdc18bf8
  0  53244                 sskgslcas:return [ 0 0 0 1| 0 0 5 2| 0 0 07a]i=6 PID::entry:==pid1374:oracle:sskgslcas:return 5f122270 16 1
bash-3.2# cat logic_read1.log|grep -i 5F106340
  0  53243                  sskgslcas:entry [ 0 0 0 0| 0 0 698| 0 0 07a]i=7 PID::entry:==pid1374:oracle:sskgslcas:entry 5f106340 0 1 fdc18f60 fdc18f58 fdc18f00
  0  53244                 sskgslcas:return [ 0 0 0 1| 0 0 698| 0 0 07a]i=8 PID::entry:==pid1374:oracle:sskgslcas:return 5f106340 16 1


唯一索引扫描时,对root块与leaf块都是一次共享cbc latch,对表块也是一次共享cbc latch


逻辑读时的cbc latch(一):http://qhd2004.blog.51cto.com/629417/1576554


逻辑读时的cbc latch(二):http://qhd2004.blog.51cto.com/629417/1576579


参考:http://blog.itpub.net/321157/viewspace-730936/


相关内容

热门资讯

以军士兵集体丢掉武器抗命,大喊... 据凤凰卫视报道,以色列国防军一军事基地7月30日发生士兵抗命事件,约120名士兵抗议指挥官做法,将武...
蒋成华任商务部副部长 国务院任免国家工作人员。任命蒋成华为商务部副部长。免去蒋成华的商务部国际贸易谈判副代表职务。
伊朗驻华大使:在军事威胁下,不... 新华社北京7月31日电(记者刁慧琳) 伊朗驻华大使法兹里7月28日表示,伊美回到谈判桌的前提是美国必...
伊朗革命卫队在霍尔木兹海峡击中... 当地时间31日,伊朗伊斯兰革命卫队发布声明称,革命卫队海军当天在霍尔木兹海峡击中并扣留了两艘违反禁令...
美媒:特朗普,遇到了一个更强硬... 据《纽约时报》7月29日报道,就在特朗普总统看似放弃战事升级计划几天后,美国再次与伊朗交火。上周末,...
女子做气管镜时不幸身亡,丈夫称... 7月29日,西安刘先生反映妻子在当地医院做支气管镜检查时死亡,看监控时发现医生疑有违规操作。刘先生表...
全网“帮卖西瓜”,然后呢? 近日,河南部分地区西瓜滞销的消息在网上热度很高。很多地方也伸出援手:有景区收购千斤西瓜、免费赠予游客...
美媒:乌克兰袭击伊朗船只,险引... 据《纽约时报》7月28日报道,据伊朗和西方官员称,伊朗曾考虑攻击乌克兰的一个港口,以报复乌克兰对一艘...
20年里,他只画美女,用东方风... 迈进KIM在上海的工作室,迎面是一整墙的美女们。她们像是刚从一场时髦的沙龙里退场,或倚或立,眉宇间是...
Google在港推出AI代理G... 观点网讯:7月29日,Google在香港推出AI代理Gemini Spark,该代理可全天候在后台运...