v$sql,v$sqlarea,v$sqltext有什麼區別

來源:https://zhidao.baidu.com/question/1382950893572331580.html

共同點:
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


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          // 父遊標產生的時間戳
PARSE_CALLS           //解析調用的次數 
DISK_CALLS             //讀磁盤的次數
DIRECT_WRITES           //直接寫的次數
BUFFER_GETS           //直接從buffer中得到數據的次數
APPLICATION_WAIT_TIME          // 應用等待時間,毫秒
CONCURRENCY_WAIT_TIME           //併發等待時間,毫秒
USER_IO_WAIT_TIME           //用戶IO等待時間
ROWS_PROCESSED SQL           //解析sql返回的總行數
OPTIMIZER_MODE           //優化器模式
OPTIMIZER_COST           //優化器對於sql給出的成本
PARSING_USER_ID           //第一個創建這個子游標的用戶id
HASH_VALUES           //解析產生的哈希值
CHILD_NUMBER           //該子游標的數量
SERVICE           //服務名
CPU_TIME           //該子游標解析,執行和獲取數據使用的CPU時間毫秒
ELAPSED_TIME           //sql的執行時間,毫秒
INVALIDATIONS           //該子游標的無效次數
MODULE       //第一次解析該語句時,通過DBMS_APPLICAITON_INFO.SET_ACTION設置的模塊名
ACTION      //第一次解析該語句時,通過DBMS_APPLICAITON_INFO.SET_ACTION設置的動作名 
IS_OBSOLETE           //標記該子游標過期與否,當子游標過大時會發生這種情況
is_bind_sensitive           //不僅指出是否使用綁定變量窺測來生成執行計劃,而且指出這個執行計劃是否依賴於窺測到的值。如果是,這個字段會被設置爲Y,否則會被設置爲N。
is_bind_aware           //表明遊標是否使用了擴展的遊標共享。如果是,這個字段會被設置爲Y,如果不是,這個字段會被設置爲N。如果是設置爲N,這個遊標將被廢棄,不再可用。
is_shareable           //表明遊標能否被共享。如果可以,這個字段會被設置爲Y,否則,會被設置爲N。如果被設置爲N,這個遊標將被廢棄,不再可用。






SQL> desc v$sqlarea 
Name Null? Type
SQL_TEXT VARCHAR2(1000) 
SHARABLE_MEM NUMBER 
PERSISTENT_MEM NUMBER 
RUNTIME_MEM NUMBER 
SORTS NUMBER 
VERSION_COUNT NUMBER 
LOADED_VERSIONS NUMBER 
OPEN_VERSIONS NUMBER 
USERS_OPENING NUMBER 
FETCHES NUMBER 
EXECUTIONS NUMBER 
USERS_EXECUTING NUMBER 
LOADS NUMBER 
FIRST_LOAD_TIME VARCHAR2(38) 
INVALIDATIONS NUMBER 
PARSE_CALLS NUMBER 
DISK_READS NUMBER 
BUFFER_GETS NUMBER 
ROWS_PROCESSED NUMBER 
COMMAND_TYPE NUMBER 
OPTIMIZER_MODE VARCHAR2(25) 
PARSING_USER_ID NUMBER 
PARSING_SCHEMA_ID NUMBER 
KEPT_VERSIONS NUMBER 
ADDRESS RAW(4) 
HASH_VALUE NUMBER 
MODULE VARCHAR2(64) 
MODULE_HASH NUMBER 
ACTION VARCHAR2(64) 
ACTION_HASH NUMBER 
SERIALIZABLE_ABORTS NUMBER 
CPU_TIME NUMBER 
ELAPSED_TIME NUMBER 
IS_OBSOLETE VARCHAR2(1) 
CHILD_LATCH NUMBER







v$sqltext
本視圖包括Shared pool中SQL語句的完整文本,一條SQL語句可能分成多個塊被保存於多個記錄內。
注:V$SQLAREA和v$sql中的SQL_TEXT字段只包括頭1000個字符, SQL_FULLTEXT以CLOB方式包含了所有的字符
V$SQLTEXT列說明
HASH_VALUE           SQL語句的Hash值
ADDRESS           sql語句在SGA中的地址
SQL_TEXT           SQL文本。
PIECE           SQL語句塊的序號
SQL_ID           SQL id
COMMAND_TYPE             命令類型,如selectinsert

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章