學習動態效能表 第三篇-(1)-v$sql
V$SQL中儲存具體的SQL語句。
一條語句可以映射多個cursor,因為對象所指的cursor可以有不同使用者(如例1)。如果有多個cursor(子遊標)存在,在V$SQLAREA為所有cursor提供集合資訊。
例1:
這裡介紹以下child cursor
user A: select * from tbl
user B: select * from tbl
大家認為這兩條語句是不是一樣的啊,可能會有很多人會說是一樣的,但我告訴你不一定,那為什麼呢?
這個tblA看起來是一樣的,但是不一定哦,一個是A使用者的, 一個是B使用者的,這時他們的執行計畫分析代碼差別可能就大了哦,改下寫法大家就明白了:
select * from A.tbl
select * from B.tbl
在個別cursor上,v$sql可被使用。該視圖包含cursor層級資料。當試圖定位session或使用者以分析cursor時被使用。
PLAN_HASH_VALUE列儲存的是數值表示的cursor執行計畫。可被用來對比執行計畫。PLAN_HASH_VALUE讓你不必一行一行對比即可輕鬆鑒別兩條執行計畫是否相同。
V$SQL中的列說明:
SQL_TEXT:SQL文本的前1000個字元
SHARABLE_MEM:佔用的共用記憶體大小(單位:byte)
PERSISTENT_MEM:生命期內的固定記憶體大小(單位:byte)
RUNTIME_MEM:執行期內的固定記憶體大小
SORTS:完成的排序數
LOADED_VERSIONS:顯示上下文堆是否載入,1是0否
OPEN_VERSIONS:顯示子遊標是否被鎖,1是0否
USERS_OPENING:執行語句的使用者數
FETCHES:SQL語句的fetch數。
EXECUTIONS:自它被載入緩衝庫後的執行次數
USERS_EXECUTING:執行語句的使用者數
LOADS:對象被載入過的次數
FIRST_LOAD_TIME:初次載入時間
INVALIDATIONS:無效的次數
PARSE_CALLS:解析調用次數
DISK_READS:讀磁碟次數
BUFFER_GETS:讀緩衝區次數
ROWS_PROCESSED:解析SQL語句返回的總列數
COMMAND_TYPE:命令類型代號
OPTIMIZER_MODE:SQL語句的最佳化器模型
OPTIMIZER_COST:最佳化器給出的本次查詢成本
PARSING_USER_ID:第一個解析的使用者ID
PARSING_SCHEMA_ID:第一個解析的計劃ID
KEPT_VERSIONS:指出是否當前子遊標被使用DBMS_SHARED_POOL包標記為常駐記憶體
ADDRESS:當前遊標父控制代碼地址
TYPE_CHK_HEAP:當前堆類型檢查說明
HASH_VALUE:緩衝庫中父語句的Hash值
PLAN_HASH_VALUE:數值表示的執行計畫。
CHILD_NUMBER:子遊標數量
MODULE:在第一次解析這條語句是通過調用DBMS_APPLICATION_INFO.SET_MODULE設定的模組名稱。
ACTION:在第一次解析這條語句是通過調用DBMS_APPLICATION_INFO.SET_ACTION設定的動作名稱。
SERIALIZABLE_ABORTS:事務未能序列化次數
OUTLINE_CATEGORY:如果outline在解釋cursor期間被應用,那麼本列將顯示出outline各類,否則本列為空白
CPU_TIME:解析/執行/取得等CPU使用時間(單位,毫秒)
ELAPSED_TIME:解析/執行/取得等消耗時間(單位,毫秒)
OUTLINE_SID:outline session標識
CHILD_ADDRESS:子遊標地址
SQLTYPE:指出當前語句使用的SQL語言版本
REMOTE:指出是否遊標是一個遠程映象(Y/N)
OBJECT_STATUS:對象狀態(VALID or INVALID)
IS_OBSOLETE:當子遊標的數量太多的時候,指出遊標是否被廢棄(Y/N)