通過Oracle動態效能檢視採集查詢調優數

tolywang發表於2007-11-14
對於現在的一些發行版本,DBA(Database Administrator,資料庫管理員)和開發員可以訪問的已經有三種動態效能檢視了,分別為V$SQL、V$SQLAREA,還有V$SQLTEXT。

這些檢視可以用來採集有關SQL命令執行的統計資訊。在Oracle 10g, Release 2中,還增加了第四個動態效能檢視,V$SQLSTATS,通過它能更方便地訪問這類資料。

和靜態資料字典檢視(static dictionary view,也就是字首為USER_、ALL_,或者DBA_的檢視)不同,動態效能檢視會隨著系統的執行而不斷更新。這使得有可能在SQL語句執行之時監視其效能。

和靜態檢視一樣的是,要使用它們你要先獲得許可。對於非資料庫管理員使用者(如典型的開發環境下)可賦予SELECT_CATALOG_ROLE許可權,讓他們可以從中選擇它們。

下面是各個檢視所提供功能的一些簡要描述。要獲得更多資訊,請參考Oracle Database 10g 指南, 第7章。

  • 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實現。

這四個檢視工具合到一起,共同為你提供了原始資料,幫助你檢測你的SQL資料庫執行狀況如何。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-85011/,如需轉載,請註明出處,否則將追究法律責任。

相關文章