如何用Oracle動(dòng)態(tài)視圖采集查詢調(diào)優(yōu)數(shù)
初學(xué)者對(duì)于Oracle動(dòng)態(tài)視圖可能會(huì)很陌生,這里就簡(jiǎn)單概述下Oracle動(dòng)態(tài)性能視圖的數(shù)據(jù)字典。以數(shù)據(jù)庫(kù)管理員和開發(fā)員身份可以訪問(wèn)Oracle動(dòng)態(tài)視圖,分別為V$SQL、V$SQLAREA,還有V$SQLTEXT。
這些視圖可以用來(lái)采集有關(guān)SQL命令執(zhí)行的統(tǒng)計(jì)信息。在Oracle 10g, Release 2 中,還增加了第四個(gè)動(dòng)態(tài)性能視圖,V$SQLSTATS,通過(guò)它能更方便地訪問(wèn)這類數(shù)據(jù)。和靜態(tài)數(shù)據(jù)字典視圖(static dictionary view,也就是前綴為USER_、ALL_,或者DBA_的視圖)不同,Oracle動(dòng)態(tài)視圖會(huì)隨著系統(tǒng)的運(yùn)行而不斷更新。這使得有可能在SQL語(yǔ)句執(zhí)行之時(shí)監(jiān)視其性能。
和靜態(tài)視圖一樣的是,要使用它們你要先獲得許可。對(duì)于非數(shù)據(jù)庫(kù)管理員用戶(如典型的開發(fā)環(huán)境下)可賦予SELECT_CATALOG_ROLE權(quán)限,讓他們可以從中做出選擇。
下面是各個(gè)視圖所提供功能的一些簡(jiǎn)要描述:
V$SQL:
這個(gè)視圖使用一個(gè)CLOB(character large object,字符型巨對(duì)象)column(欄,也就是視圖中的屬性字段),以提供SQL語(yǔ)句的完整文本,此外還有一列最多存放1000個(gè)VARCHAR2字符(存放SQL語(yǔ)句的前1000個(gè)字符)的對(duì)象,這方便了使用。可訪問(wèn)的統(tǒng)計(jì)數(shù)據(jù)相當(dāng)廣泛:包括解析語(yǔ)句(parse)和非法語(yǔ)句的數(shù)目、磁盤的讀寫次數(shù)、運(yùn)行時(shí)間、等待時(shí)間,還有optimizer(優(yōu)化器)數(shù)據(jù)。你還可以從中知道創(chuàng)建語(yǔ)句的用戶和schema(部署對(duì)象),以及當(dāng)前有多少用戶正在執(zhí)行它。
V$SQLAREA:
這個(gè)視圖包含許多和V$SQL相同的統(tǒng)計(jì)信息。可是,V$SQL對(duì)每條初始SQL語(yǔ)句及其子語(yǔ)句(child)都要包含一行統(tǒng)計(jì)信息,而這個(gè)視圖只對(duì)實(shí)際輸入的SQL字串產(chǎn)生一條統(tǒng)計(jì)信息。
V$SQLSTATS:這是10gR2版中新加入的視圖,這個(gè)視圖比V$SQL和V$SQLAREA更快更方便,它只包含其它視圖column的子集。一般來(lái)說(shuō),它不連接用戶信息。它的每一行對(duì)應(yīng)一條SQL語(yǔ)句及其執(zhí)行計(jì)劃的hash value(雜湊值)。它的額外的優(yōu)點(diǎn)是,這個(gè)視圖中的紀(jì)錄入口比其它視圖更為持久。因此,雖然某一條語(yǔ)句已經(jīng)在共享池中過(guò)期失效(這導(dǎo)致它從V$SQLAREA中消失),但你仍然可以通過(guò)該視圖找到它。
V$SQLTEXT:
有時(shí)候你會(huì)想得到分開的每一行SQL語(yǔ)句,而不是V$SQL中給出的一個(gè)巨對(duì)象;那么V$SQL可以讓你如愿。你可以通過(guò)COMMAND_TYPE欄中的代號(hào)選擇特定的某種類型的語(yǔ)句(比如,選擇INSERT語(yǔ)句,或者SELECT語(yǔ)句)。SQL_TEXT column中存放的是單個(gè)語(yǔ)句,而PIECE column則給語(yǔ)句編上號(hào)碼,以便通過(guò) ORDER BY來(lái)排序。另外有一個(gè)叫V$SQLTEXT_WITH_NELINES的變量會(huì)保留原來(lái)的換行符以改善可讀性(V$SQLTEXT會(huì)用空格替代換行符)。V$SQLTEXT和V$SQLTEXT_WITH_NEWLINES都不會(huì)告訴你是誰(shuí)執(zhí)行了這條語(yǔ)句,或者是誰(shuí)在提供給你這些統(tǒng)計(jì)信息。如果要獲得那類信息,你還得通過(guò)V$SQL和V$SQLAREA視圖中的ADDRESS和HASH_VALUE column實(shí)現(xiàn)。
有效的應(yīng)用這些Oracle動(dòng)態(tài)視圖工具,可以很好的幫助你檢測(cè)SQL數(shù)據(jù)庫(kù)執(zhí)行狀況如何。
【編輯推薦】