方法論_Oracle 效能最佳化的基本方法概述

來源:互聯網
上載者:User

標籤:des   style   blog   http   ar   io   color   os   使用   

2014-12-18 BaoXinjian

一、摘要

Oracle 效能最佳化的基本方法概述

  • 1)設立合理的效能最佳化目標。
  • 2)測量並記錄當前效能。
  • 3)確定當前Oracle效能瓶頸(Oracle等待什麼、哪些SQL語句是該等待事件的成分)。
  • 4)把等待事件記入追蹤檔案。
  • 5)確定當前的OS瓶頸。
  • 6)最佳化所需的成分(應用程式、資料庫、I/O、爭用、OS等)。
  • 7)跟蹤並實施更改控制過程。
  • 8)測量並記錄當前效能
  • 9)重複步驟3到7,直到滿足最佳化目標

 

二、分析

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

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

方法:目標必須是當前效能和所需效能的的陳述形式的語句。只需填寫下列語句中的空格即可。

        花費了        (時/分/秒),但要求它在 (時/分/秒)內執行。

        使用了        (資源量),  但它不能使用超過。

 

Step2. 測量並記錄當前效能

重點:

  • (1).需要在峰值啟用時間獲得當前系統效能快照
  • (2).關鍵是要在出現效能問題的時間段內採集資訊
  • (3).必須在合理的時間段上採集,一般在峰值期間照幾個為期15分鐘的快照

方法:執行STATSPACK

(1). 建立效能快照資料表空間

sqlplus sys as sysdbacreate tablespace perfstat datafile ‘/u02/oradata/dbnms/perfstat.dbf‘ size 500M extent management local;

(2). 安裝STATSPACK

 @$ORACLE_HOME/rdbms/admin/spcreate.sql;

 

(3). 擷取效能資料,可以產生多個快照

 sqlplus perfstat execute statspack.snap;

(4). 產生效能快照的報表

 sqlplus perfstat select min(snap_id) snapid_min, max(snap_id) snapid_max from stats$snapshot; @$ORACLE_HOME/rdbms/admin/spreport;

(5). 該報告中有關於效能的重要訊息,如前5位的等待事件、cache大小、各種記憶體結構的命中率、每秒及每事務邏輯、物理讀寫資料區塊數、效能最差的sql語句等

 

Step3.確定當前Oracle效能瓶頸

重點:從Oracle 等待介面v$system_event、v$session_event和v$session_wait中獲得等待事件,進而找出影響效能的對象和sql語句

方法:

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

select * from v$system_event

where event in (‘buffer busy waits‘,

         ‘db file sequential read‘,

  ‘db file scattered read‘,

  ‘enqueue‘,

  ‘free buffer waits‘,

  ‘latch free‘,

  ‘log file parallel write‘,

  ‘log file sync‘);

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

select se.sid,s.username,se.event,se.total_waits,se.time_waited,se.average_wait

from v$session s,v$session_event se

where s.sid = se.sid

and se.event not like ‘SQL*Net%‘

and s.status = ‘ACTIVE‘

and s.username is not null;

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

select sw.sid,s.username,sw.event,sw.wait_time,sw.state,sw.seconds_in_wait SEC_IN_WAIT

from v$session s,v$session_wait sw

where s.sid = sw.sid

and sw.event not like ‘SQL*Net%‘

and s.username is not null

order by sw.wait_time desc;

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

select sid,event,p1text,p1,p2text,p2,p3text,p3

from v$session_wait

where sid between &1 and &2

and event not like ‘%SQL%‘

and event not like ‘%rdbms%‘;

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

select owner,segment_name,segment_type,tablespace_name

from dba_extents

where file_id = &fileid_in

and &blockid_in between block_id and block_id + blocks - 1;

-- 獲得操作該段的sql語句:

select sid, getsqltxt(sql_hash_value,sql_address)

from v$session

where sid = &sid_in;

-- getsqltxt函數

create or replace

function GetSQLtxt (hashaddr_in in v$sqltext.hash_value%type,

       addr_in in v$sqltext.address%type)

return varchar2

is

 temp_sqltxt varchar2(32767);

 cursor sqlpiece_cur

 is

  select piece,sql_text

  from v$sqltext

  where hash_value = hashaddr_in

  and address = addr_in

  order by piece;

begin

 for sqlpiece_rec in sqlpiece_cur

 loop

  temp_sqltxt := temp_sqltxt || sqlpiece_rec.sql_text;

 end loop;

 return temp_sqltxt;

end GetSQLtxt;

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

 

Step4. 把等待事件記入追蹤檔案

重點:如果在跟蹤系統上的等待事件時,由於某種原因遇到了麻煩,則可以將這些等待事件記入一個追蹤檔案。

方法:

-- 對於當前會話:

alter session set timed_statistics=true;

alter session set max_dump_file_size=unlimited;

alter session set events ‘10046 trace name context forever, level 12‘;

-- 執行應用程式,然後在USER_DUMP_DEST指出的目錄中找到追蹤檔案。

-- 查看檔案中以詞WAIT開始的所有行。

 

-- 對於其它的會話

-- 確定會話的進程ID(SPID)。下面的查詢識別出名稱以A開始的所有使用者的會話進程ID:

select S.Username, P.Spid from V$SESSION S, V$PROCESS P

where S.PADDR = P.ADDR and S.Username like ‘A%‘;

-- 以 sysdba 進入sqlplus執行

alter session set timed_statistics=true;

alter session set max_dump_file_size=unlimited;

oradebug setospid <SPID>

oradebug unlimit

oradebug event 10046 trace name context forever, level X /* Where X = (1,4,8,12) */

-- 跟蹤某個時間間隔得會話應用程式。

-- 在USER_DUMP_DEST 的值指出的目錄中利用SPID查看追蹤檔案

-- 查看檔案中以詞WAIT開始的所有行。

 

Step5. 確定當前OS瓶頸

(1)Windows NT上的監控

使用控制台-〉管理工具-〉效能即可

 

(2)UNIX上的監控

使用通用性的工具,包括sar、iostat、cpustat、mpstat、netstat、top、osview等。

1) CPU使用方式

sar -u 5 1000

%sys和%wio的數值應該小於百分之10到15

2) 裝置使用方式

sar -d 5 1000

在%busy超過60%時,最佳裝置利用率開始降低;在具有足夠磁碟快取的系統上,認為avserv為100毫秒的值非常高。

3) 虛擬記憶體使用方式

vmstat -S 5 1000

執行隊列(r)應該明確的平均小於(2*CPU數目)

 

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

 

Step7.跟蹤並實施更改控制過程

 

Step8.測量並記錄當前效能

 

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

 

 

轉載 一江水-http://www.cnblogs.com/rootq/archive/2008/09/03/1282690.html

方法論_Oracle 效能最佳化的基本方法概述

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.