真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

邏輯讀時(shí)的cbclatch(二)

繼續(xù)驗(yàn)證,使用solaris中的dtrace

成都創(chuàng)新互聯(lián)公司成都網(wǎng)站建設(shè)定制網(wǎng)站設(shè)計(jì),是成都網(wǎng)站制作公司,為成都石雕提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺程序開發(fā)等。成都網(wǎng)站設(shè)計(jì)熱線:028-86922220

session1:編寫dtrace腳本

more test.d
#!/usr/sbin/dtrace -s -n
dtrace:::BEGIN
{
        i=1;
}
pid$1:::entry
{
        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;
}

session2:多執(zhí)行幾次rowid查詢,使查詢走邏輯讀

create table a as select * from scott.emp;
create index ind_a on a(empno);
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 1154                 15          3
       
select * from a where rowid='AAAMjsAABAAAOs6AAA';

session1:運(yùn)行dtrace腳本,并輸出到日志

./test.d 1154 > logic_read1.log

session2:再次執(zhí)行一次,此時(shí)為邏輯讀

select * from a where rowid='AAAMjsAABAAAOs6AAA';

session1:查詢文件,文件內(nèi)容為語句執(zhí)行期間做的跟蹤

cat logic_read1.log|wc -l
1393

session2:

select dbms_rowid.ROWID_RELATIVE_FNO('AAAMjsAABAAAOs6AAA'),dbms_rowid.rowid_block_number('AAAMjsAABAAAOs6AAA') from dual;
1 60218

select file#,dbablk,tch,lower(HLADDR) from x$bh where file#=1 and dbablk=60218;
     FILE#     DBABLK        TCH LOWER(HL
---------- ---------- ---------- --------
         1      60218          8 5f0f596c

1號文件60218號塊,是受地址為5f0f596c的Latch保護(hù)

session1:

cat logic_read1.log|grep 5f0f596c
  1 113271                  sskgslcas:entry i=637 PID::entry:==pid1154:oracle:sskgslcas:entry 5f0f596c 0 2000000f fdc1a128 fdc1a0d0 fdc1a128
  1 113274                 sskgsldecr:entry i=646 PID::entry:==pid1154:oracle:sskgsldecr:entry 5f0f596c 2000000f fdc1a128 fdc1a0d0 fdc1a128 804534c
  1 113271                  sskgslcas:entry i=687 PID::entry:==pid1154:oracle:sskgslcas:entry 5f0f596c 0 2000000f 1 fdc1a0c0 5854e074
  1  59436                     kcbzar:entry i=692 PID::entry:==pid1154:oracle:kcbzar:entry 5f181bcc 5f0f596c 108000 8045268 1 fdc1a0c0
  1 103456                   slmxnoop:entry i=693 PID::entry:==pid1154:oracle:slmxnoop:entry 587ed578 fdc1a130 5f0f596c 8045238 a9ef965 c4a88d0
  1 103456                   slmxnoop:entry i=694 PID::entry:==pid1154:oracle:slmxnoop:entry 587ed578 fdc1a130 5f0f596c 8045238 a9ef965 c4a88d0
  1 103456                   slmxnoop:entry i=695 PID::entry:==pid1154:oracle:slmxnoop:entry 587ed578 fdc1a130 5f0f596c 8045238 a9ef965 c4a88d0
  1 103456                   slmxnoop:entry i=696 PID::entry:==pid1154:oracle:slmxnoop:entry 587ed578 fdc1a130 5f0f596c 8045238 a9ef965 c4a88d0
  1 103456                   slmxnoop:entry i=697 PID::entry:==pid1154:oracle:slmxnoop:entry 587ed578 fdc1a130 5f0f596c 8045238 a9ef965 c4a88d0
  1 103456                   slmxnoop:entry i=699 PID::entry:==pid1154:oracle:slmxnoop:entry 587ed578 fdc1a130 5f0f596c 8045238 a9ef965 c4a88d0
  1 113274                 sskgsldecr:entry i=701 PID::entry:==pid1154:oracle:sskgsldecr:entry 5f0f596c 2000000f 1 fdc1a0c0 5854e074 8045410
  1  54264                     k***mf:entry i=703 PID::entry:==pid1154:oracle:k***mf:entry 5f181ba8 5f0bcc2c 587ed578 2000000f 5f0f596c 5f181bcc

和這個(gè)地址(5f0f596c)相關(guān)的有這十幾行。在這里,有一點(diǎn)編程習(xí)慣再說一下,要申請某一個(gè)地址處的Latch,這個(gè)Latch的地址,是這個(gè)函數(shù)的最重要的參數(shù),

因此,Oracle會把它排在第一位,也就是說,以上這十幾行中,第一個(gè)參數(shù)不是8ea1d750的,基本可以排除掉了。

所以,我們只剩這些行需要關(guān)注:

  1 113271                  sskgslcas:entry i=637 PID::entry:==pid1154:oracle:sskgslcas:entry 5f0f596c 0 2000000f fdc1a128 fdc1a0d0 fdc1a128
  1 113274                 sskgsldecr:entry i=646 PID::entry:==pid1154:oracle:sskgsldecr:entry 5f0f596c 2000000f fdc1a128 fdc1a0d0 fdc1a128 804534c
  1 113271                  sskgslcas:entry i=687 PID::entry:==pid1154:oracle:sskgslcas:entry 5f0f596c 0 2000000f 1 fdc1a0c0 5854e074
  1 113274                 sskgsldecr:entry i=701 PID::entry:==pid1154:oracle:sskgsldecr:entry 5f0f596c 2000000f 1 fdc1a0c0 5854e074 8045410

這四行,兩個(gè)函數(shù)調(diào)用,sskgslcas、sskgsldecr,

第一個(gè)參數(shù)都是Latch的地址:5f0f596c 我相信這不是巧合,它們肯定是申請、釋放Latch的函數(shù)。

i=637這行,Oracle調(diào)用sskgslcas持有Latch,在i=646這行,調(diào)用sskgsldecr釋放,

接下來在i=687又一次調(diào)用sskgslcas持有Latch,在i=701處調(diào)用sskgsldecr釋放。

一次邏輯讀對應(yīng)兩次Latch調(diào)用。

結(jié)果是這樣嗎,讓我們繼續(xù)驗(yàn)證,Oracle的Oradebug可以調(diào)用某個(gè)Oracle自身的函數(shù),就有它來驗(yàn)證吧:

session2:

SQL> oradebug setmypid
Statement processed.
SQL> oradebug call sskgslcas 0x5f0f596c 0 0x2000000f 0xfdc1a128
Function returned 1

SQL>select * from a where rowid='AAAMjsAABAAAOs6AAA';
Hang住了

session3:查看等等事件,并釋放latch

SQL> select sid,event,p1raw,p2 from v$session where sid=159;

       SID EVENT
---------- ----------------------------------------------------------------
P1RAW            P2
-------- ----------
       159 latch: cache buffers chains
5F0F596C        122

SQL> oradebug setospid 1154
Oracle pid: 15, Unix process pid: 1154, p_w_picpath: oracle@sol (TNS V1-V3)
SQL> oradebug call sskgsldecr 0x5f0f596c 0x2000000f
Function returned 2000000F

在session2中查看,此時(shí)結(jié)果出來了。說明被Hang的會話,已經(jīng)可以順利執(zhí)行下去了。說明Latch已經(jīng)被釋放。

結(jié)論:一次邏輯讀,兩次cbc latch,cbc latch的申請函數(shù)為sskgslcas,釋放函數(shù)為sskgsldecr

邏輯讀時(shí)的cbc latch(一):http://qhd2004.blog.51cto.com/629417/1576554

邏輯讀時(shí)的cbc latch(三): http://qhd2004.blog.51cto.com/629417/1577532

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


分享標(biāo)題:邏輯讀時(shí)的cbclatch(二)
鏈接分享:http://weahome.cn/article/ihjpgs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部