[20180906]測試同一會話多個子遊標是否快取.txt
[20180906]測試同一會話多個子遊標是否快取.txt
1.環境:
SCOTT@test01p> @ ver1
PORT_STRING VERSION BANNER CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0 12.1.0.1.0 Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0
SCOTT@test01p> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
234 27 2444:3304 DEDICATED 5148 55 9 alter system kill session '234,27' immediate;
SCOTT@test01p> show parameter optimizer_index_caching
NAME TYPE VALUE
------------------------------------ -------------------- ----------
optimizer_index_caching integer 0
2.測試:
--//session 1:
select * from deptx where deptno=10;
select * from deptx where deptno=10;
select * from deptx where deptno=10;
select * from deptx where deptno=10;
--//確定sql_id=07447rnnn54q7.
--//session 2:
SYS@test> select * from V$OPEN_CURSOR where sid=234 and sql_id='07447rnnn54q7';
SADDR SID USER_NAME ADDRESS HASH_VALUE SQL_ID SQL_TEXT LAST_SQL_ACTIVE_TIM SQL_EXEC_ID CURSOR_TYPE CHILD_ADDRESS CON_ID
---------------- --- --------- ---------------- ---------- ------------- ------------------------------------ ------------------- ----------- --------------------- ---------------- ------
000007FF312D41D8 234 SCOTT 000007FF25F196C8 692228807 07447rnnn54q7 select * from deptx where deptno=10 SESSION CURSOR CACHED 000007FF25F18218 3
--//該語句已經進入游標快取..
SYS@test> @ sharepool/shp4 07447rnnn54q7 0
TEXT KGLHDADR KGLHDPAR C40 KGLHDLMD KGLHDPMD KGLHDIVC KGLOBHD0 KGLOBHD6 KGLOBHS0 KGLOBHS6 KGLOBT16 N0_6_16 N20 KGLNAHSH KGLOBT03 KGLOBT09
-------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
子游標控制程式碼地址 000007FF25F18218 000007FF25F196C8 select * from deptx where deptno=10 1 0 0 000007FF25F18160 000007FF25F18D48 4072 12144 3117 19333 19333 692228807 07447rnnn54q7 0
父遊標控制程式碼地址 000007FF25F196C8 000007FF25F196C8 select * from deptx where deptno=10 1 0 0 000007FF25F19610 00 4072 0 0 4072 4072 692228807 07447rnnn54q7 65535
--//V$OPEN_CURSOR.ADDRESS=000007FF25F196C8 對應父遊標控制程式碼地址.
--//V$OPEN_CURSOR.CHILD_ADDRES=000007FF25F18218,對應子游標控制程式碼地址.
3.繼續測試:
--//session 1:
SCOTT@test01p> alter session set optimizer_index_caching=100;
Session altered.
--//修改會話引數optimizer_index_caching=100,這樣游標不再共享,必須生成新的子游標.
select * from deptx where deptno=10;
select * from deptx where deptno=10;
select * from deptx where deptno=10;
select * from deptx where deptno=10;
--//session 2:
SYS@test> select * from V$OPEN_CURSOR where sid=234 and sql_id='07447rnnn54q7';
SADDR SID USER_NAME ADDRESS HASH_VALUE SQL_ID SQL_TEXT LAST_SQL_ACTIVE_TIM SQL_EXEC_ID CURSOR_TYPE CHILD_ADDRESS CON_ID
---------------- --- --------- ---------------- ---------- ------------- ------------------------------------ ------------------- ----------- --------------------- ---------------- ------
000007FF312D41D8 234 SCOTT 000007FF25F196C8 692228807 07447rnnn54q7 select * from deptx where deptno=10 SESSION CURSOR CACHED 000007FF25F18218 3
000007FF312D41D8 234 SCOTT 000007FF25F196C8 692228807 07447rnnn54q7 select * from deptx where deptno=10 SESSION CURSOR CACHED 000007FF28E627F8 3
--//可以發現同一個會話,相同的sql語句可以快取2個遊標.我一直以為僅僅快取1個.看來親自測試很有必要.
SYS@test> @ sharepool/shp4 07447rnnn54q7 0
TEXT KGLHDADR KGLHDPAR C40 KGLHDLMD KGLHDPMD KGLHDIVC KGLOBHD0 KGLOBHD6 KGLOBHS0 KGLOBHS6 KGLOBT16 N0_6_16 N20 KGLNAHSH KGLOBT03 KGLOBT09
-------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
子游標控制程式碼地址 000007FF25F18218 000007FF25F196C8 select * from deptx where deptno=10 0 0 0 000007FF25F18160 000007FF25F18D48 4072 12144 4565 20781 20781 692228807 07447rnnn54q7 0
子游標控制程式碼地址 000007FF28E627F8 000007FF25F196C8 select * from deptx where deptno=10 1 0 0 000007FF241136C0 000007FF2420BAF8 4072 12144 4565 20781 20781 692228807 07447rnnn54q7 1
父遊標控制程式碼地址 000007FF25F196C8 000007FF25F196C8 select * from deptx where deptno=10 1 0 0 000007FF25F19610 00 4072 0 0 4072 4072 692228807 07447rnnn54q7 65535
--//V$OPEN_CURSOR.ADDRESS=000007FF25F196C8 對應父遊標控制程式碼地址.
--//V$OPEN_CURSOR.CHILD_ADDRES=000007FF25F18218,對應子游標控制程式碼地址(KGLOBT09=0)
--//V$OPEN_CURSOR.CHILD_ADDRES=000007FF28E627F8,對應子游標控制程式碼地址(KGLOBT09=1).
--//順便說一下x$kglob.KGLOBT09 對應的就是child number號.x$kglob.KGLOBT09=65535就是父遊標.
--//可以發現當執行3次以上快取遊標後,實際上類似建立一種快捷方式,直接能定位到子游標控制程式碼地址,
--//有一些文章提到可以定位子游標控制程式碼堆6,執行獲得執行計劃.避免一些latch以及metux的操作.
--//也就是軟軟解析.
--//另外如果已經快取的遊標,新開啟的回話第一次執行也是軟解析,因為執行前V$OPEN_CURSOR檢視在當前sid下沒有記錄.
--//再次執行才是軟軟解析.
--//重新整理共享池重複測試:
--//session 1:
SCOTT@test01p> @spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- -----------------------------------------------
152 9 5460:4376 DEDICATED 5564 22 5 alter system kill session '152,9' immediate;
select * from deptx where deptno=10;
select * from deptx where deptno=10;
select * from deptx where deptno=10;
select * from deptx where deptno=10;
select * from deptx where deptno=10;
--//確定sql_id=07447rnnn54q7.
--//session 2:
SYS@test01p> select * from V$OPEN_CURSOR where sid=152 and sql_id='07447rnnn54q7';
SADDR SID USER_NAME ADDRESS HASH_VALUE SQL_ID SQL_TEXT LAST_SQL_ACTIVE_TIM SQL_EXEC_ID CURSOR_TYPE CHILD_ADDRESS CON_ID
---------------- --- --------- ---------------- ---------- ------------- ------------------------------------ ------------------- ----------- --------------------- ---------------- ------
000007FF312547D8 152 SCOTT 000007FF23E1CC60 692228807 07447rnnn54q7 select * from deptx where deptno=10 SESSION CURSOR CACHED 000007FF257BA640 3
SYS@test01p> @ sharepool/shp4 07447rnnn54q7 0
TEXT KGLHDADR KGLHDPAR C40 KGLHDLMD KGLHDPMD KGLHDIVC KGLOBHD0 KGLOBHD6 KGLOBHS0 KGLOBHS6 KGLOBT16 N0_6_16 N20 KGLNAHSH KGLOBT03 KGLOBT09
-------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
子游標控制程式碼地址 000007FF257BA640 000007FF23E1CC60 select * from deptx where deptno=10 1 0 0 000007FF1F2CCAE0 000007FF2554B638 4072 12144 3117 19333 19333 692228807 07447rnnn54q7 0
父遊標控制程式碼地址 000007FF23E1CC60 000007FF23E1CC60 select * from deptx where deptno=10 1 0 0 000007FF1FD5C898 00 4072 0 0 4072 4072 692228807 07447rnnn54q7 65535
--//session 3:
SCOTT@test01p> @spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
13 157 2340:2536 DEDICATED 4428 56 4 alter system kill session '13,157' immediate;
--//session 2:
SYS@test01p> select * from V$OPEN_CURSOR where sid=13 and sql_id='07447rnnn54q7';
no rows selected
--//sid=13 還沒有快取游標.
--//session 3:
SCOTT@test01p> select * from deptx where deptno=10;
DEPTNO DNAME LOC
---------- -------------------- -------------
10 ACCOUNTING NEW YORK
SCOTT@test01p> select sysdate from dual ;
SYSDATE
-------------------
2018-09-07 22:18:02
--//session 2:
SYS@test01p> select * from V$OPEN_CURSOR where sql_id='07447rnnn54q7';
SADDR SID USER_NAME ADDRESS HASH_VALUE SQL_ID SQL_TEXT LAST_SQL_ACTIVE_TIM SQL_EXEC_ID CURSOR_TYPE CHILD_ADDRESS CON_ID
---------------- --- --------- ---------------- ---------- ------------- ------------------------------------ ------------------- ----------- ------------------------------- ---------------- ------
000007FF31123630 13 SCOTT 000007FF23E1CC60 692228807 07447rnnn54q7 select * from deptx where deptno=10 DICTIONARY LOOKUP CURSOR CACHED 000007FF257BA640 3
000007FF312547D8 152 SCOTT 000007FF23E1CC60 692228807 07447rnnn54q7 select * from deptx where deptno=10 SESSION CURSOR CACHED 000007FF257BA640 3
--//可以發現會話sid=13(session 3)當前的CURSOR_TYPE='DICTIONARY LOOKUP CURSOR CACHED'.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2213822/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 同一會話中的多個 WebRequest會話Web
- 三句話測試你是否懂gitGit
- 話說快取快取
- 儲存過程定義多個遊標多個begin儲存過程
- oracle cursor遊標迴圈比較遊標元素是否相同Oracle
- 遊標屬性介紹.txt
- 多個快取盒子疊加使用快取
- Oracle遊標共享,父遊標和子游標的概念Oracle
- 寫Cache快取物件測試例項快取物件
- [20171109]快取命中率神話.txt快取
- 多臺Mac電腦使用同一個apple開發者賬號開發測試MacAPP
- 白話分散式儲存測試(一)明確測試目標分散式
- 測試2個oracle session會話同時相同記錄持鎖OracleSession會話
- 【專項測試系列】-快取擊穿、穿透、雪崩專項測試快取穿透
- 大話效能測試系列(1)- 效能測試概念與主要指標指標
- php 快取使用監控測試程式碼PHP快取
- Cognos會話快取設定(展現實時資料)會話快取
- [20180627]測試bbed是否支援管道命令.txt
- [20210429]檔案頭塊不會快取.txt快取
- Laravel 啟用多個 work 對同一個佇列進行處理的時候是否會出現同步執行Laravel佇列
- 簡單測試動態遊標(REF CURSOR)的使用
- screen 命令示例:管理多個終端會話會話
- Android -- 與WEB互動在同一個會話Session中通訊AndroidWeb會話Session
- 同一臺手機安裝同一個應用的測試版,正式版
- 快取檢測快取
- 大話效能測試系列(3)- 常用的效能指標指標
- Oracle儲存過程中定義多個遊標Oracle儲存過程
- 在多個檔案中import同一個檔案,webpack會多次打包嗎ImportWeb
- [20190211]簡單測試埠是否開啟.txt
- 判斷一個檔案是否在IE的快取中 (轉)快取
- 手工電子面單-批量儲存同一個收貨地址的多個包裹資訊
- JdonSD框架使用快取提升效能出具測試報告:框架快取測試報告
- junit執行多個測試類
- opencv-python 讀取同一目錄的多個檔案OpenCVPython
- 測試安裝是否成功
- oracle cursor遊標獲取首末元素Oracle
- Go會快取DNS嗎?Go快取DNS
- Google Glass是否會成為旅遊業的下一個大趨勢?Go