九大Oracle性能優(yōu)化基本方法詳解
51CTO數(shù)據(jù)庫頻道向您推薦《Oracle數(shù)據(jù)庫調(diào)試與性能優(yōu)化》專題,以便于您更好的理解本文。
Oracle性能優(yōu)化基本方法包括一下幾個(gè)步驟,包括:
1)設(shè)立合理的Oracle性能優(yōu)化目標(biāo)。
2)測量并記錄當(dāng)前的Oracle性能。
3)確定當(dāng)前Oracle性能瓶頸(Oracle等待什么、哪些SQL語句是該等待事件的成分)。
4)把等待事件記入跟蹤文件。
5)確定當(dāng)前的OS瓶頸。
6)優(yōu)化所需的成分(應(yīng)用程序、數(shù)據(jù)庫、I/O、爭用、OS等)。
7)跟蹤并實(shí)施更改控制過程。
8)測量并記錄當(dāng)前性能
9)重復(fù)步驟3到7,直到滿足優(yōu)化目標(biāo)
下面來一一詳述。
1.設(shè)立合理的Oracle性能優(yōu)化目標(biāo)
重點(diǎn):關(guān)于設(shè)立目標(biāo)的最重要的一點(diǎn)是它們必須是可量化和可達(dá)到的。
方法:目標(biāo)必須是當(dāng)前性能和所需性能的的陳述形式的語句。
2.測量并記錄當(dāng)前Oracle性能重點(diǎn):
1)需要在峰值活動(dòng)時(shí)間獲得當(dāng)前系統(tǒng)性能快照
2)關(guān)鍵是要在出現(xiàn)性能問題的時(shí)間段內(nèi)采集信息
3)必須在合理的時(shí)間段上采集,一般在峰值期間照幾個(gè)為期15分鐘的快照
3.確定當(dāng)前Oracle性能瓶頸重點(diǎn):從Oracle 等待接口v$system_event、v$session_event和v$session_wait中獲得等待事件,進(jìn)而找出影響性能的對(duì)象和sql語句。方法如下:
1)首先,利用v$system_event視圖執(zhí)行下面的查詢查看數(shù)據(jù)庫中某些常見的等待事件:
- 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');
2)接著,利用下面對(duì)v$session_event和v$session視圖進(jìn)行的查詢,研究具有對(duì)上面顯示的內(nèi)容有貢獻(xiàn)的等待事件的會(huì)話:
- 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;
3)使用下面查詢找到與所連接的會(huì)話有關(guān)的當(dāng)前等待事件。這些信息是動(dòng)態(tài)的,為了查看一個(gè)會(huì)話的等待最多的事件是什么,需要多次執(zhí)行此查詢。
- 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;
4)查詢會(huì)話等待事件的詳細(xì)信息
- 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%';
5)利用P1、P2的信息,找出等待事件的相關(guān)的段
- 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;
6)獲得操作該段的sql語句:
- select sid, getsqltxt(sql_hash_value,sql_address)
- from v$session
- where sid = &sid_in;
7)getsqltxt函數(shù)
8)至此已經(jīng)找到影響性能的對(duì)象和sql語句,可以有針對(duì)性地優(yōu)化
#p#
4.把等待事件記入跟蹤文件
重點(diǎn):如果在跟蹤系統(tǒng)上的等待事件時(shí),由于某種原因遇到了麻煩,則可以將這些等待事件記入一個(gè)跟蹤文件。方法如下:
1)對(duì)于當(dāng)前會(huì)話:
- 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';
2)執(zhí)行應(yīng)用程序,然后在USER_DUMP_DEST指出的目錄中找到跟蹤文件。
3)查看文件中以詞WAIT開始的所有行。
4)對(duì)于其它的會(huì)話
5)確定會(huì)話的進(jìn)程ID(SPID)。下面的查詢識(shí)別出名稱以A開始的所有用戶的會(huì)話進(jìn)程ID:
- select S.Username, P.Spid from V$SESSION S, V$PROCESS P
- where S.PADDR = P.ADDR and S.Username like 'A%';
6)以sysdba進(jìn)入sqlplus執(zhí)行
- alter session set timed_statistics=true;
- alter session set max_dump_file_size=unlimited;
- oradebug setospid
- oradebug unlimit
- oradebug event 10046 trace name context forever, level X /* Where X = (1,4,8,12) */
7)跟蹤某個(gè)時(shí)間間隔得會(huì)話應(yīng)用程序。
8)在USER_DUMP_DEST 的值指出的目錄中利用SPID查看跟蹤文件
9)查看文件中以詞WAIT開始的所有行。
5.確定當(dāng)前OS瓶頸1)Windows NT上的監(jiān)控
使用控制面板-〉管理工具-〉性能即可
2)UNIX上的監(jiān)控
使用通用性的工具,包括sar、iostat、cpustat、mpstat、netstat、top、osview等。
6.Oracle性能優(yōu)化所需的成分(應(yīng)用程序、數(shù)據(jù)庫、I/O、爭用、OS等)。
7.跟蹤并實(shí)施更改控制過程。
8.測量并記錄當(dāng)前Oracle性能
9.重復(fù)步驟3到7,直到滿足優(yōu)化目標(biāo)
【編輯推薦】
- 簡單概述Oracle性能測試
- Oracle性能在調(diào)整中的要點(diǎn)介紹
- 使用資源管理器優(yōu)化Oracle性能
- Oracle性能優(yōu)化借助分區(qū)技術(shù)實(shí)現(xiàn)
- 淺談Oracle性能優(yōu)化可能出現(xiàn)的問題