初學者對於Oracle動態視圖可能會很陌生,這裡就簡單概述下Oracle動態性能視圖的數據字典。以數據庫管理員和開發員身份可以訪問Oracle動態視圖,分別為V$SQL、V$SQLAREA,還有V$SQLTEXT。
這些視圖可以用來采集有關SQL命令執行的統計信息。在Oracle 10g, Release 2 中,還增加了第四個動態性能視圖,V$SQLSTATS,通過它能更方便地訪問這類數據。和靜態數據字典視圖(static dictionary vIEw,也就是前綴為USER_、ALL_,或者DBA_的視圖)不同,Oracle動態視圖會隨著系統的運行而不斷更新。這使得有可能在SQL語句執行之時監視其性能。
和靜態視圖一樣的是,要使用它們你要先獲得許可。對於非數據庫管理員用戶(如典型的開發環境下)可賦予SELECT_CATALOG_ROLE權限,讓他們可以從中做出選擇。
下面是各個視圖所提供功能的一些簡要描述:
V$SQL:
這個視圖使用一個CLOB(character large object,字符型巨對象)column(欄,也就是視圖中的屬性字段),以提供SQL語句的完整文本,此外還有一列最多存放1000個VARCHAR2字符(存放SQL語句的前1000個字符)的對象,這方便了使用。可訪問的統計數據相當廣泛:包括解析語句(parse)和非法語句的數目、磁盤的讀寫次數、運行時間、等待時間,還有optimizer(優化器)數據。你還可以從中知道創建語句的用戶和schema(部署對象),以及當前有多少用戶正在執行它。
V$SQLAREA:
這個視圖包含許多和V$SQL相同的統計信息。可是,V$SQL對每條初始SQL語句及其子語句(child)都要包含一行統計信息,而這個視圖只對實際輸入的SQL字串產生一條統計信息。
V$SQLSTATS:這是10gR2版中新加入的視圖,這個視圖比V$SQL和V$SQLAREA更快更方便,它只包含其它視圖column的子集。一般來說,它不連接用戶信息。它的每一行對應一條SQL語句及其執行計劃的hash value(雜湊值)。它的額外的優點是,這個視圖中的紀錄入口比其它視圖更為持久。因此,雖然某一條語句已經在共享池中過期失效(這導致它從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都不會告訴你是誰執行了這條語句,或者是誰在提供給你這些統計信息。如果要獲得那類信息,你還得通過V$SQL和V$SQLAREA視圖中的ADDRESS和HASH_VALUE column實現。
有效的應用這些Oracle動態視圖工具,可以很好的幫助你檢測SQL數據庫執行狀況如何。