九大Oracle效能最佳化基本方法詳解(1)

來源:互聯網
上載者:User

BKJIA資料庫頻道向您推薦《Oracle資料庫調試與效能最佳化》專題,以便於您更好的理解本文。

Oracle效能最佳化基本方法包括一下幾個步驟,包括:

1)設立合理的Oracle效能最佳化目標。

2)測量並記錄當前的Oracle效能。

3)確定當前Oracle效能瓶頸Oracle等待什麼、哪些SQL語句是該等待事件的成分)。

4)把等待事件記入追蹤檔案。

5)確定當前的OS瓶頸。

6)最佳化所需的成分應用程式、資料庫、I/O、爭用、OS等)。

7)跟蹤並實施更改控制過程。

8)測量並記錄當前效能

9)重複步驟3到7,直到滿足最佳化目標

下面來一一詳述。

1.設立合理的Oracle效能最佳化目標

重點:關於設立目標的最重要的一點是它們必須是可量化和可達到的。

方法:目標必須是當前效能和所需效能的的陳述形式的語句。

2.測量並記錄當前Oracle效能重點:

1)需要在峰值啟用時間獲得當前系統效能快照

2)關鍵是要在出現效能問題的時間段內採集資訊

3)必須在合理的時間段上採集,一般在峰值期間照幾個為期15分鐘的快照

3.確定當前Oracle效能瓶頸重點:從Oracle 等待介面v$system_event、v$session_event和v$session_wait中獲得等待事件,進而找出影響效能的對象和sql語句。方法如下:

1)首先,利用v$system_event視圖執行下面的查詢查看資料庫中某些常見的等待事件:

 
  1. select * from v$system_event  
  2. where event in ('buffer busy waits',  
  3. 'db file sequential read',  
  4. 'db file scattered read',  
  5. 'enqueue',  
  6. 'free buffer waits',  
  7. 'latch free',  
  8. 'log file parallel write',  
  9. 'log file sync'); 

2)接著,利用下面對v$session_event和v$session視圖進行的查詢,研究具有對上面顯示的內容有貢獻的等待事件的會話:

 
  1. select se.sid,s.username,se.event,se.total_waits,se.time_waited,se.average_wait  
  2. from v$session s,v$session_event se  
  3. where s.sid = se.sid  
  4. and se.event not like 'SQL*Net%' 
  5. and s.status = 'ACTIVE' 
  6. and s.username is not null; 

3)使用下面查詢找到與所串連的會話有關的當前等待事件。這些資訊是動態,為了查看一個會話的等待最多的事件是什麼,需要多次執行此查詢。

 
  1. select sw.sid,s.username,sw.event,sw.wait_time,sw.state,sw.seconds_in_wait SEC_IN_WAIT  
  2. from v$session s,v$session_wait sw  
  3. where s.sid = sw.sid  
  4. and sw.event not like 'SQL*Net%' 
  5. and s.username is not null 
  6. order by sw.wait_time desc; 

4)查詢會話等待事件的詳細資料

 
  1. select sid,event,p1text,p1,p2text,p2,p3text,p3  
  2. from v$session_wait  
  3. where sid between &1 and &2  
  4. and event not like '%SQL%' 
  5. and event not like '%rdbms%'; 

5)利用P1、P2的資訊,找出等待事件的相關的段

 
  1. select owner,segment_name,segment_type,tablespace_name  
  2. from dba_extents  
  3. where file_id = &fileid_in  
  4. and &blockid_in between block_id and block_id + blocks - 1; 

6)獲得操作該段的sql語句:

 
  1. select sid, getsqltxt(sql_hash_value,sql_address)  
  2. from v$session  
  3. where sid = &sid_in; 

7)getsqltxt函數

8)至此已經找到影響效能的對象和sql語句,可以有針對性地最佳化


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.