v$sql,v$sqlarea,v$sqltext有什麼區別
共同點:
1)都儲存了sql內容
2) 記錄的都是位於記憶體中的sql內容
3) 因為是記憶體,所以都不保留歷史記錄
不同點:
1)儲存的為止不都是相同。其中v$sql和v$sqlarea儲存的sql都是位於shared sql area中的sql,而v$sqltext是位於sga中的sql。但文件沒有明確說明這裡的sga是否還包含了psa(私有sql區域--共享伺服器模式下)。 2)儲存sql的方式也不同,v$sql和v$sqlarea都是用一行來儲存sql全文,而v$sqltext用一行儲存sql的一行。
3)v$sql不儲存包含
group
by
的sql語句。通常這個檢視,在每個查詢執行完成後更新,但對於執行很久的sql,它是每5秒更新一次,這點對於檢視sql執行狀態是有意義的。
4)儲存的明細不同--這是最基本的。
V$SQL在子游標級別上列出了在共享sql區域的統計資訊,他將原始sql文字展現為一行。V$SQL中的檢視資訊一般在sql執行的最後進行更新。然而,對於長時間執行的sql,每5秒會更新一次v$sql檢視。這使得很容易檢視長時間執行的sql在執行過程中帶來的影響。 v$sql列說明,如沒有特別說明,均指子游標,儲存的是具體的SQL 和執行計劃相關資訊,實際上,v$sqlarea 可以看做 v$sql 根據 sqltext 等 做了
group
by
之後的資訊
SQL>
desc
v$sql
Name
Null ? Type
----------------------------------------- -------- ----------------------------
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
SQL_TEXT
//當前正在執行的遊標的sql文字的前1000個字元
SQL_FULLTEXT
//CLOB型別 整個sql文字,不用藉助於V$SQL_TEXT檢視來檢視整個文字
SQL_ID
//庫快取中的SQL父遊標的標誌
SHARABLE_MEM
//子游標使用的共享記憶體的大小,bytes
PERSISTENT_MEM
//子游標生存時間中使用的固定記憶體的總量,bytes
RUNTIME_MEM
//在子游標執行過程中需要的固定記憶體大小,bytes
SORTS
//子游標發生的排序數量
LOADED_VERSIONS
// 顯示上下文堆是否載入,1是,0否
USERS_OPENING
// 執行這個sql的使用者數
FETCHES
// sql取資料的次數
EXECUTIONS
//自從被載入共享池後,sql執行的次數
FIRST_LOAD_TIME
|