Oracle中SQL語句執行效率的查詢與解決 (1)

idba發表於2008-05-10
Oracle中SQL語句執行效率問題的查詢與解決:

一、識別佔用資源較多的語句的方法(4種方法)

1.測試組和終端使用者反饋的與反應緩慢有關的問題。

2.利用V_$SQLAREA檢視提供了執行的細節。(執行、讀取磁碟和讀取緩衝區的次數)

• 資料列

EXECUTIONS:執行次數

DISK_READS:讀盤次數

COMMAND_TYPE:命令型別(3:select,2:insert;6:update;7delete;47:pl/sql程式單元)

OPTIMIZER_MODE:優化方式

SQL_TEXT:Sql語句

SHARABLE_MEM:佔用shared pool的記憶體多少

BUFFER_GETS:讀取緩衝區的次數

• 用途

1、幫忙找出效能較差的SQL語句

2、幫忙找出最高頻率的SQL

3、幫忙分析是否需要索引或改善聯接

監控當前Oracle:family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的session,如出現時鐘的標誌,表示此程式中的sql執行時間較長。

4. Trace工具:

a)檢視資料庫服務的初始引數:timed_statistics、user_dump_dest和max_dump_file_size

b)Step 1: alter session set sql_trace=true

c)Step 2: run sql;

d)Step 3: alter session set sql_trace=false

e)Step 4:使用 “TKPROF”轉換跟蹤檔案

f)Parse,解析數量大通常表明需要增加資料庫伺服器的共享池大小,

query或current提取數量大表明如果沒有索引,語句可能會執行得更有效,

disk提取數量表明索引有可能改進效能,

library cache中多於一次的錯過表明需要一個更大的共享池大小

二、如何管理語句處理和選項

•基於成本(Cost Based) 和基於規則(Rule Based) 兩種優化器, 簡稱為CBO 和RBO

•Optimizer Mode引數值:

Choose:如果存在訪問過的任何表的統計資料 ,則使用基於成本的Optimizer,目標是獲得最優的通過量。如果一些表沒有統計資料,則使用估計值。如果沒有可用的統計資料,則將使用基於規則的Optimizer。

All_rows:總是使用基於成本的Optimizer,目標是獲得最優的通過量。

First_rows_n:總是使用基於成本的Optimizer,目標是對返回前N行(“n”可以是1,10,100或者1000)獲得最優的響應時間。

First_rows:用於向後相容。使用成本與試探性方法的結合,以便快速傳遞前幾行。

RULE:總是使用基於規則的Optimizer

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

相關文章