程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 如何了解Oracle生成執行計劃

如何了解Oracle生成執行計劃

編輯:Oracle數據庫基礎

Oracle還是比較常用的,於是我研究了一下Oracle生成執行計劃,在這裡拿出來和大家分享一下,希望對大家有用。如何Oracle生成執行計劃?要為一個語句Oracle生成執行計劃,可以有3種方法:

1.最簡單的辦法

執行完語句後,會顯示explain plan 與 統計信息。這個語句的優點就是它的缺點,這樣在用該方法查看執行時間較長的sql語句時,需要等待該語句執行成功後,才返回執行計劃,使優化的周期大大增長。

這樣,就只會列出執行計劃,而不會真正的執行語句,大大減少了優化時間。雖然也列出了統計信息,但是因為沒有執行語句,所以該統計信息沒有用處,如果執行該語句時遇到錯誤,解決方法為:
(1)在要分析的用戶下
(2) 用sys用戶登陸

2.用explain plan命令
(1) sqlplus > @ ?\rdbms\admin\utlxplan.sql
(2) sqlplus > explain plan set statement_id =’???’ for select ………………

注意,用此方法時,並不執行sql語句,所以只會列出執行計劃,不會列出統計信息,並且執行計劃只存在plan_table中。所以該語句比起set autotrace traceonly可用性要差。需要用下面的命令格式化輸出,所以這種方式我用的不多。

上面這2種方法只能為在本會話中正在運行的語句產生執行計劃,即我們需要已經知道了哪條語句運行的效率很差,我們是有目的只對這條SQL語句去優化。其實,在很多情況下,我們只會聽一個客戶抱怨說現在系統運行很慢,而我們不知道是哪個SQL引起的。此時有許多現成的語句可以找出耗費資源比較多的語句。

從而對找出的語句進行進一步優化。當然我們還可以為一個正在運行的會話中運行的所有SQL語句生成執行計劃,這需要對該會話進行跟蹤,產生 trace文件,然後對該文件用tkprof程序格式化一下,這種得到執行計劃的方式很有用,因為它包含其它額外信息,如SQL語句執行的每個階段(如 Parse、Execute、Fetch)分別耗費的各個資源情況(如CPU、DISK、elapsed等)。

3.用dbms_system存儲過程Oracle生成執行計劃

因為使用dbms_system存儲過程可以跟蹤另一個會話發出的sql語句,並記錄所使用的執行計劃,而且還提供其它對性能調整有用的信息。因其使用方式與上面2種方式有些不太一樣,所以在附錄中單獨介紹。這種方法是對SQL進行調整比較有用的方式之一,有些情況下非它不可。具體內容參見附錄。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved