您好,登錄后才能下訂單哦!
v$sql,v$sqlarea,v$sqltext的區(qū)別是什么,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
v$sqltext中有內(nèi)存中完整的sql語(yǔ)句(SQL被分割為多行存儲(chǔ)),而其他兩個(gè)視圖都是部分sql語(yǔ)句。
但v$sqltext中存儲(chǔ)的比較簡(jiǎn)單,沒(méi)有該語(yǔ)句的統(tǒng)計(jì)信息,比如執(zhí)行次數(shù)等。
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語(yǔ)句分片之后的順序編號(hào),比如三行的值為0,1,2, 按照順序連接起來(lái)就是一個(gè)完成的SQL語(yǔ)句。
sql_text 表示分片后的sql語(yǔ)句的一部分,注意它的長(zhǎng)度只有64 bytes . 字段HASH_VALUE 和 address 一起唯一標(biāo)志一條sql 。
v$sql : 存儲(chǔ)的是具體的SQL 和執(zhí)行計(jì)劃相關(guān)信息。
v$sqlarea : 存儲(chǔ)SQL語(yǔ)句的前1000個(gè)bytes和一些相關(guān)的統(tǒng)計(jì)信息,比如累計(jì)的執(zhí)行次數(shù),邏輯讀,物理讀等統(tǒng)計(jì)信息
V$SQLAREA 在Oracle9i, Oracle10.1 和Oracle10.2 版本中字段定義都不太一樣,Oracle10.2 中會(huì)多出sql_fulltext字段,
是一個(gè)CLOB字段。
實(shí)際上,v$sqlarea 可以看做 v$sql 根據(jù) sqltext 等 做了 group by 之后的信息 。
--------------------------------------------------------------------------------------------------------------
1、可以通過(guò)以下語(yǔ)句查一下這些視圖的定義,可以看出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的區(qū)別與聯(lián)系 :
a、v$sqlarea相當(dāng)于是按INST_ID, KGLNAOBJ, KGLHDPAR, KGLNAHSH, KGLNATIM, GLOBTS0,GLOBT19, KGLOBTS1, KGLOBT20,DECODE(KGLOBT33, 1, 'Y', 'N'),
KGLHDCLT這些列的自v$sql的group by,也就是說(shuō)v$sql的每一行表示的是每一個(gè)sql語(yǔ)句的一個(gè)version,而v$sqlarea存放的是相同語(yǔ)句不同version一個(gè)匯總
(相同語(yǔ)句只有一行記錄,但是version_count記錄了次數(shù))。
b、實(shí)際調(diào)優(yōu)中建議使用v$sql, 相對(duì)來(lái)說(shuō)比v$sqlarea快,而且還不會(huì)產(chǎn)生share pool latch的爭(zhēng)用。
3、因v$sql及v$sqlarea存放著統(tǒng)計(jì)信息在調(diào)優(yōu)時(shí)使用居多,但其sql是不全的,如果想獲得完整的sql就要用v$sqltext了。
看完上述內(nèi)容,你們掌握v$sql,v$sqlarea,v$sqltext的區(qū)別是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。