v$sql,v$sqlarea,v$sqltext區別
v$sqltext中有記憶體中完整的sql語句(SQL被分割為多行儲存),而其他兩個檢視都是部分sql語句。
但v$sqltext中儲存的比較簡單,沒有該語句的統計資訊,比如執行次數等。
v$sqltext 的欄位如下:
ADDRESS RAW(4 | 8) Used with HASH_VALUE to uniquely identify a cached cursor
HASH_VALUE NUMBER Used with ADDRESS to uniquely identify a cached cursor
SQL_ID VARCHAR2(13) SQL identifier of a cached cursor
COMMAND_TYPE NUMBER Code for the type of SQL statement (SELECT, INSERT, and so on)
PIECE NUMBER Number used to order the pieces of SQL text
SQL_TEXT VARCHAR2(64) A column containing one piece of the SQL text
其中piece表示SQL語句分片之後的順序編號,比如三行的值為0,1,2, 按照順序連線起來就是一個完成的SQL語句。
sql_text 表示分片後的sql語句的一部分,注意它的長度只有64 bytes . 欄位HASH_VALUE 和 address 一起唯一標誌一條sql 。
v$sql : 儲存的是具體的SQL 和執行計劃相關資訊。
v$sqlarea : 儲存SQL語句的前1000個bytes和一些相關的統計資訊,比如累計的執行次數,邏輯讀,物理讀等統計資訊
V$SQLAREA 在Oracle9i, Oracle10.1 和Oracle10.2 版本中欄位定義都不太一樣,Oracle10.2 中會多出sql_fulltext欄位,
是一個CLOB欄位。
實際上,v$sqlarea 可以看做 v$sql 根據 sqltext 等 做了 group by 之後的資訊 。
--------------------------------------------------------------------------------------------------------------
1、可以透過以下語句查一下這些檢視的定義,可以看出v$sql及v$sqlarea的源表比較接近 。
SELECT view_definition FROM v$fixed_view_definition WHERE view_name='GV$SQL';
SELECT view_definition FROM v$fixed_view_definition WHERE view_name='GV$SQLAREA';
SELECT view_definition FROM v$fixed_view_definition WHERE view_name='GV$SQLTEXT';
-- V$SQL 在Oracle10.2.0.4 中的定義:
select inst_id,kglnaobj,kglfnobj,kglobt03, kglobhs0+kglobhs1+kglobhs2+kglobhs3+kglobhs4+kglobhs5+kglobhs6+kglobt16,
kglobt08+kglobt11, kglobt10, kglobt01, decode(kglobhs6,0,0,1), decode(kglhdlmd,0,0,1), kglhdlkc, kglobt04, kglobt05,
kglobt48, kglobt35, kglobpc6, kglhdldc, substr(to_char(kglnatim,'YYYY-MM-DD/HH24:MI:SS'),1,19), kglhdivc, kglobt12,
kglobt13, kglobwdw, kglobt14, kglobwap, kglobwcc, kglobwcl, kglobwui, kglobt42, kglobt43, kglobt15, kglobt02,
decode(kglobt32, 0, 'NONE', 1, 'ALL_ROWS', 2, 'FIRST_ROWS', 3, 'RULE', 4, 'CHOOSE',
'UNKNOWN'), kglobtn0, kglobcce, kglobcceh, kglobt17, kglobt18, kglobts4, kglhdkmk, kglhdpar, kglobtp0, kglnahsh, kglobt46,
kglobt30, kglobt09, kglobts5, kglobt48, kglobts0, kglobt19, kglobts1, kglobt20, kglobt21, kglobts2, kglobt06, kglobt07,
decode(kglobt28, 0, to_number(NULL), kglobt28), kglhdadr, kglobt29, decode(bitand(kglobt00,64),64, 'Y', 'N'),
decode(kglobsta, 1, 'VALID', 2, 'VALID_AUTH_ERROR',3, 'VALID_COMPILE_ERROR', 4,
'VALID_UNAUTH', 5, 'INVALID_UNAUTH', 6, 'INVALID'), kglobt31, substr(to_char(kglobtt0,'YYYY-MM-DD/HH24:MI:SS'),1,19),
decode(kglobt33, 1, 'Y', 'N'), kglhdclt, kglobts3, kglobt44, kglobt45, kglobt47, kglobt49, kglobcla, kglobcbca, kglobt22
from x$kglcursor_child
--V$SQLAREA 在Oracle10.2.0.4 中的定義:
select inst_id, kglnaobj, kglfnobj, kglobt03, kglobhs0+kglobhs1+kglobhs2+kglobhs3+kglobhs4+kglobhs5+kglobhs6, kglobt08+kglobt11,
kglobt10, kglobt01, kglobccc, kglobclc, kglhdlmd, kglhdlkc, kglobt04, kglobt05, kglobt48, kglobt35, kglobpc6, kglhdldc,
substr(to_char(kglnatim,'YYYY-MM-DD/HH24:MI:SS'),1,19), kglhdivc, kglobt12, kglobt13, kglobwdw, kglobt14, kglobwap,
kglobwcc, kglobwcl, kglobwui, kglobt42, kglobt43, kglobt15, kglobt02, decode(kglobt32, 0, 'NONE',1, 'ALL_ROWS', 2, 'FIRST_ROWS',
3, 'RULE', 4, 'CHOOSE', 'UNKNOWN'), kglobtn0, kglobcce, kglobcceh, kglobt17, kglobt18, kglobts4, kglhdkmk, kglhdpar, kglnahsh,
kglobt46, kglobt30, kglobts0, kglobt19, kglobts1, kglobt20, kglobt21, kglobts2, kglobt06, kglobt07,
decode(kglobt28, 0, NULL, kglobt28), kglhdadr, decode(bitand(kglobt00,64),64, 'Y', 'N'),
decode(kglobsta,1, 'VALID', 2, 'VALID_AUTH_ERROR',3, 'VALID_COMPILE_ERROR', 4, 'VALID_UNAUTH', 5, 'INVALID_UNAUTH',6, 'INVALID'),
kglobt31, kglobtt0, decode(kglobt33, 1, 'Y', 'N'), kglhdclt, kglobts3, kglobt44, kglobt45, kglobt47, kglobt49, kglobcla,
kglobcbca, kglobt22
from x$kglcursor_child_sqlid
where kglobt02 != 0
--V$SQLTEXT 在Oracle10.2.0.4 中的定義:
select inst_id,kglhdadr, kglnahsh, kglnasqlid, kgloboct, piece, name
from x$kglna
where kgloboct != 0
2、v$sql與v$sqlarea的區別與聯絡 :
a、v$sqlarea相當於是按INST_ID, KGLNAOBJ, KGLHDPAR, KGLNAHSH, KGLNATIM, GLOBTS0,GLOBT19, KGLOBTS1, KGLOBT20,DECODE(KGLOBT33, 1, 'Y', 'N'),
KGLHDCLT這些列的自v$sql的group by,也就是說v$sql的每一行表示的是每一個sql語句的一個version,而v$sqlarea存放的是相同語句不同version一個彙總
(相同語句只有一行記錄,但是version_count記錄了次數)。
b、實際調優中建議使用v$sql, 相對來說比v$sqlarea快,而且還不會產生share pool latch的爭用。
3、因v$sql及v$sqlarea存放著統計資訊在調優時使用居多,但其sql是不全的,如果想獲得完整的sql就要用v$sqltext了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2156539/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle9i中v$sql、v$sqlarea、v$sqltext、v$sql_plan的聯絡與區別OracleSQL
- v-html 、v-text({{}}) 、v-model的區別HTML
- v-if和v-show的區別
- android之support-v4、v7、v13的區別Android
- [vue] 常見用法之 v-html、v-text、v-model區別VueHTML
- v-if和v-show區別+元件通訊問題元件
- 前端【VUE】02-vue指令【v-html 、v-show、 v-if 、v-else、v-on、v-bind、v-for、v-model】前端VueHTML
- 手機充電器5V2A和5V1A的區別,5V2A和5V1A充電器可以通用嗎?
- vue v-text,v-html,v-once,v-pre,v-cloak的使用VueHTML
- V1.0和V1.1開發版有什麼區別呀?用哪個好呢?
- vue_o6_v-once、v-html、v-text、v-pre、v-cloak指令的使用VueHTML
- EMQ 文件 V1.0 V2.0 V3.0MQ
- v-if和v-show
- vue中v-model和.sync修飾符區別Vue
- CANoe C-V2X Demo(V2I+V2V)演示視訊
- 維數定理(手推!):證明dim(v1)+dim(v2) = dim(v1+v2) + dim(v1∩v2)
- 1V升壓3V,1V升壓3.3V晶片,1V升壓5V升壓IC晶片
- v
- 1V升3V,1V升3.3V,1V升5V高電流,低功耗升壓晶片晶片
- 24v轉120v,24V轉150v/350v隔離變壓電源模組
- vue 的v-on與v-bindVue
- v-for,v-bink,綜合案例
- SQL語法提示工具SQL Prompt 釋出v10.6SQL
- 1V升5V晶片,1V升5V電路圖規格書晶片
- v-for
- (精華2020年5月4日更新) vue教程篇 v-text,v-html,v-once,v-pre,v-cloak的使用VueHTML
- Vue v-if以及 v-else 的使用Vue
- React Router從V2/V3到V4的變化React
- v-if/v-show 條件渲染指令
- ESXI 遷移至KVM (V2V遷移)
- 1V轉5V,1V轉3.3V升壓極大電流晶片,外圍極少晶片
- 12V轉80V/150V/350V電容充電隔離電源升壓模組
- V$LOCK(zt)
- 10.29 V$SESSMETRICSSM
- 10.30 V$SESSTAT
- 10.97 V$SYSSTAT
- 8.1.1 V$ ViewsView
- 10.17 V$SESSIONSession