日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle父游标和子游标,诊断Oracle high version count(高版本游标)问题

發布時間:2024/1/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle父游标和子游标,诊断Oracle high version count(高版本游标)问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是high version cursor(高版本游標)?對于一個特定的游標有多少個版本就屬于高版本游標是沒有明確定義的.對于不同的系統有不同

什么是high version cursor(高版本游標)?

對于一個特定的游標有多少個版本就屬于高版本游標是沒有明確定義的.對于不同的系統有不同的數量界定.然而在awr報告中對于一個父游標超過20個子游標個數時就會被報告出來

然而當一個游標的版本數據達到成百上千,那么這些絕對是高版本游標.所以要檢查這些sql有高版本的原因要盡量使用這些sql能夠被共享.

什么是共享sql?

首先要記住的是所有sql語句都是式共享的.當一個sql語句被輸入時,Oracle將會對一個語句的文本創建一個hash value,oracle將使用這個hash value很容易地在共享池中查找是否已經存在有相同hash value的sql存在.

例如:select count*) from emp語句有一個hash value為 4085390015

那么oracle就會對這個sql語句創建一個父游標和一個子游標.如果一個sql語句永遠也不會被共享也沒關系-當它第一次被解析時會創建一個父游標和一個子游標.可以簡單地認為這個父游標代表這個hash value,子游標代表sql的元數據.

--------------------------------------分割線 --------------------------------------

Oracle PL/SQL基礎 游標

Oracle數據庫中游標的使用

PL/SQL中三種游標循環效率對比

Oracle高級顯式游標的使用

在CentOS 6.4下安裝Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虛擬機中安裝步驟

Debian 下 安裝 Oracle 11g XE R2

--------------------------------------分割線 --------------------------------------

什么是元數據?

元數據是能讓sql語句運行的所有信息.例如,在上面的例子中給定的emp表屬于scott用戶,因此它有一個object_id來指示這個emp表.當scott用戶登錄時,對于運行這個語句的會話優化器參數會被初始化,所以優化器的使用也屬于元數據.

當scott用戶重新登錄后運行相同的命令(相同的sql語句),這時在共享池中已經存在相同的sql,(但是我們是不知道的),將對這個sql生成hash value并且在共享池搜索這個hash value.如果找到這個hash value,就會通過子游標來進行搜索來判斷是否存在子游標可以被重用(元數據相同).如果是那么就可以共享這個sql語句.

現在在共享池中這個sql語句只有一個子游標,因為元數據相同能讓我們使用已經存在的子游標來共享sql語句.父游標不是判斷能不能共享的基礎子游標才能決定是否共享.

現在如果另一個用戶test也有一個emp表.如果這個用戶也運行上面的查詢語句將會發生什么:

1. 會對這個語句創建一個hash value.它的hash value為4085390015

2. 這個sql在共享池中被找到

3. 搜索子游標(在這時已經有一個子游標了)

4. 因為test用戶的emp表的object_id與scott用戶的emp表的object_id是不同的所以會有一個’mismatch’

(本質上這里會依次搜索子游標鏈表,使用所有的子游標與當前sql的元數據進行比較.如果已經搜索了100個子游標直到找到一個可以共享的子游標為止.如果沒有找到可以共享的子游標那么就會重新創建一個子游標

5. 因此創建一個新的子游標所以現在有1個父游標和2個子游標.

為什么要關注high version cursor(高版本游標)

可以共享但沒有被共享的sql和合成版本的sql是造成library cache競爭的主要原因.競爭會降低數據庫的性能.在極端情況下會使用數據庫hang住.當一個游標有太多個不必要的版本時,每次游標被執行時,這個解析引擎為了找到你所想要的游標不得不搜索整個游標鏈表.這是非常消耗CPU資源的.

怎樣查看high version cursor(高版本游標)以及為何不能被共享

一種最簡單查看high version cursor(高版本游標)的方法是使用腳本High SQL Version Counts - Script to determine reason(s) (文檔 ID 438755.1)

現在這個腳本的版本為 version_rpt3_23.sql

下載這個腳本后需要進行安裝

SQ>conn / as sysdba

SQL>@F:\ version_rpt3_23.sql

使用方法如下:

對于10g及以后的版本來收集version超過100的所有游標

SQL> set pages 2000 lines 100

SQL>

SQL> SELECT b.*

2 FROM v$sqlarea a ,

3 TABLE(version_rpt(a.sql_id)) b

4 WHERE loaded_versions >=100;

COLUMN_VALUE

---------------------------------------------------------------------

根據hash value來收集version超過100的所有游標

SQL> set pages 2000 lines 100

SQL> SELECT b.*

2 FROM v$sqlarea a ,

3 TABLE(version_rpt(NULL,a.hash_value)) b

4 WHERE loaded_versions>=100;

COLUMN_VALUE

---------------------------------------------------------------------

使用sql_id來收集游標報告

SQL> set pages 2000 lines 100

SQL> SELECT * FROM TABLE(version_rpt('g7vpupcuqd9zz'));

COLUMN_VALUE

--------------------------------------------------------------------------------

Note:438755.1 Version Count Report Version 3.2.3 -- Today's Date 22-4月 -14 15:44

RDBMS Version :10.2.0.4.0 Host: IBMP740-1 Instance 1 : RLZY

==================================================================

Addr: 070000066F6659E8 Hash_Value: 895920127 SQL_ID g7vpupcuqd9zz

Sharable_Mem: 135775 bytes Parses: 110924 Execs:621954

Stmt:

0 insert into mt_fee( hospital_id,serial_no,serial_fee,stat_type,f

1 ee_batch,medi_item_type,item_code,item_name,his_item_code,his_it

2 em_name,serial_apply,fee_date,model,factory,standard,unit,price,

3 dosage,money,reduce_money,usage_flag,usage_days,opp_serial_fee,i

4 nput_staff,input_man,input_date,calc_flag,frozen_flag,frozen_ser

5 ial_fee,trans_date,recipe_no,hos_serial,doctor_no,doctor_name,au

6 dit_flag,trans_flag,defray_type ) values ( :1,:2,:3,:4,:5,:6,:7,

7 :8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20,:21,:22,:23,:2

8 4,:25,:26,:27,:28,:29,:30,:31,:32,:33,:34,:35,:36,:37)

9

Versions Summary

----------------

AUTH_CHECK_MISMATCH :1

BIND_MISMATCH :13

TRANSLATION_MISMATCH :1

ROLL_INVALID_MISMATCH :3

Total Versions:12

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

cursor_sharing = exact

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Plan Hash Value Summary

-----------------------

Plan Hash Value Count

=============== =====

0 8

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Details for AUTH_CHECK_MISMATCH :

# of Ver PARSING_USER_ID PARSING_SCHEMA_ID PARSING_SCHEMA_NAME

========== =============== ================= ===================

8 211 211 INSUR_CHANGDE

~~~~~~~~~~~~~~~~~~~~~~~~~~~

Details for BIND_MISMATCH :

Consolidated details for BIND* columns:

BIND_MISMATCH,USER_BIND_PEEK_MISMATCH,BIND_UACS_DIFF,BIND_LENGTH_UPGRADEABLE,etc

BIND_EQUIV_FAILURE (Mislabled as ROW_LEVEL_SEC_MISMATCH BY bug 6964441 in 11gR1)

from v$sql_bind_capture

COUNT(*) POSITION MIN(MAX_LENGTH) MAX(MAX_LENGTH) DATATYPE BIND GRADUATION (PREC

======== ======== =============== =============== ======== =============== =====

13 1 32 32 1 No (,)

13 2 32 32 1 No (,)

13 3 32 32 1 No (,)

13 4 32 32 1 No (,)

13 5 32 32 1 No (,)

13 6 32 32 1 No (,)

13 7 32 32 1 No (,)

13 8 32 128 1 Yes (,)

13 9 32 128 1 Yes (,)

13 10 32 128 1 Yes (,)

13 11 32 32 1 No (,)

13 12 11 11 180 No (,)

13 13 32 32 1 No (,)

13 14 32 128 1 Yes (,)

13 15 32 128 1 Yes (,)

13 16 32 128 1 Yes (,)

9 17 32 128 1 Yes (,)

4 17 22 22 2 No (,)

13 18 32 128 1 Yes (,)

13 19 32 32 1 No (,)

13 20 32 32 1 No (,)

13 21 32 32 1 No (,)

13 22 32 32 1 No (,)

13 23 32 32 1 No (,)

13 24 32 32 1 No (,)

13 25 32 32 1 No (,)

13 26 11 11 180 No (,)

13 27 32 32 1 No (,)

13 28 32 32 1 No (,)

13 29 32 32 1 No (,)

13 30 7 7 12 No (,)

13 31 32 32 1 No (,)

13 32 32 128 1 Yes (,)

13 33 32 32 1 No (,)

13 34 32 32 1 No (,)

13 35 32 32 1 No (,)

13 36 32 32 1 No (,)

13 37 32 32 1 No (,)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Details for TRANSLATION_MISMATCH :

No objects in the plans with same name and different owner were found.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Details for ROLL_INVALID_MISMATCH :

No details available

####

To further debug Ask Oracle Support for the appropiate level LLL.

alter session set events

'immediate trace name cursortrace address 895920127, level LLL';

To turn it off do use address 1, level 2147483648

================================================================

如果不能使用這個腳本可以使用下面的方法從基本視圖中來查詢相同的信息

下面使用scott用戶來運行select count(*) from emp 語句,并運行下面的查詢來查看這個語句的父游標和它的hash value和address

SQL>select sql_text, hash_value,address from v$sqlarea where sql_text like 'select count(*) from emp%';

本文原創發布php中文網,轉載請注明出處,感謝您的尊重!

總結

以上是生活随笔為你收集整理的oracle父游标和子游标,诊断Oracle high version count(高版本游标)问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。