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