|
導讀數據庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。所謂“數據庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應... 數據庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。所謂“數據庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應用程序彼此獨立的數據集合。 以下的文章主要是對Oracle 性能優化基本方案的概述,Oracle 性能優化基本方案在實際中的應用比例還是占為多數的,如果你對這一技術,心存好奇的話,以下的文章將會揭開它的神秘面紗。 1)設立合理的Oracle 性能優化目標。 2)測量并記錄當前性能。 3)確定當前Oracle性能瓶頸(Oracle等待什么、哪些SQL語句是該等待事件的成分)。 4)把等待事件記入跟蹤文件。 5)確定當前的OS瓶頸。 6)優化所需的成分(應用程序、數據庫、I/O、爭用、OS等)。 7)跟蹤并實施更改控制過程。 8)測量并記錄當前性能 9)重復步驟3到7,直到滿足優化目標 1.設立合理的Oracle 性能優化目標 重點:關于設立目標的最重要的一點是它們必須是可量化和可達到的。 方法:目標必須是當前性能和所需性能的的陳述形式的語句。只需填寫下列語句中的空格即可。 花費了 (時/分/秒),但要求它在 (時/分/秒)內執行。 使用了 (資源量),但它不能使用超過 。 2. 測量并記錄當前性能 重點: (1)需要在峰值活動時間獲得當前系統性能快照 (2)關鍵是要在出現性能問題的時間段內采集信息 (3)必須在合理的時間段上采集,一般在峰值期間照幾個為期15分鐘的快照 方法:執行STATSPACK 建立Oracle 性能快照表空間 1.sqlplus sys as sysdba 2.create tablespace perfstat datafile '/u02/oradata/dbnms/perfstat.dbf' size 500M extent management local; 安裝STATSPACK 1.@$ORACLE_HOME/rdbms/admin/spcreate.sql; 獲取性能數據,可以生成多個快照 1.sqlplus perfstat 2.execute statspack.snap; 生成性能快照的報表 1.sqlplus perfstat 2.select min(snap_id) snapid_min, max(snap_id) snapid_max from stats$snapshot; 3.@$ORACLE_HOME/rdbms/admin/spreport; 該報告中有關于性能的重要信息,如前5位的等待事件、cache大小、各種內存結構的命中率、每秒及每事務邏輯、物理讀寫數據塊數、性能最差的sql語句等 3. 確定當前Oracle性能瓶頸 重點:從Oracle 等待接口v$system_event、v$session_event和v$session_wait中獲得等待事件,進而找出影響性能的對象和sql語句 方法: 首先,利用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'); 接著,利用下面對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; 使用下面查詢找到與所連接的會話有關的當前等待事件。這些信息是動態的,為了查看一個會話的等待最多的事件是什么,需要多次執行此查詢。 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; 查詢會話等待事件的詳細信息 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%'; 利用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; 獲得操作該段的sql語句: 1.select sid, getsqltxt(sql_hash_value,sql_address) 2.from v$session 3.where sid = &sid_in; getsqltxt函數 1.create or replace 2.function GetSQLtxt (hashaddr_in in v$sqltext.hash_value%type, 3.addr_in in v$sqltext.address%type) 4.return varchar2 5.is 6.temp_sqltxt varchar2(32767); 7.cursor sqlpiece_cur 8.is 9.select piece,sql_text 10.from v$sqltext 11.where hash_value = hashaddr_in 12.and address = addr_in 13.order by piece; 14.begin 15.for sqlpiece_rec in sqlpiece_cur 16.loop 17.temp_sqltxt := temp_sqltxt || sqlpiece_rec.sql_text; 18.end loop; 19.return temp_sqltxt; 20.end GetSQLtxt; 至此已經找到影響Oracle 性能的對象和sql語句,可以有針對性地優化 4. 把等待事件記入跟蹤文件 重點:如果在跟蹤系統上的等待事件時,由于某種原因遇到了麻煩,則可以將這些等待事件記入一個跟蹤文件。 方法: 對于當前會話: 1.alter session set timed_statistics=true; 2.alter session set max_dump_file_size=unlimited; 3.alter session set events '10046 trace name context forever, level 12'; 執行應用程序,然后在USER_DUMP_DEST指出的目錄中找到跟蹤文件。 查看文件中以詞WAIT開始的所有行。 對于其它的會話 確定會話的進程ID(SPID)。下面的查詢識別出名稱以A開始的所有用戶的會話進程ID: 1.select S.Username, P.Spid from V$SESSION S, V$PROCESS P 2.where S.PADDR = P.ADDR and S.Username like 'A%'; 以 sysdba 進入sqlplus執行 1.alter session set timed_statistics=true; 2.alter session set max_dump_file_size=unlimited; 3.oradebug setospid <SPID> 4.oradebug unlimit 5.oradebug event 10046 trace name context forever, level X /* Where X = (1,4,8,12) */ 跟蹤某個時間間隔得會話應用程序。 在USER_DUMP_DEST 的值指出的目錄中利用SPID查看跟蹤文件 查看文件中以詞WAIT開始的所有行。 5. 確定當前OS瓶頸 (1)Windows NT上的監控 使用控制面板-〉管理工具-〉Oracle 性能即可 (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數目) 6.優化所需的成分(應用程序、數據庫、I/O、爭用、OS等)。 7.跟蹤并實施更改控制過程。 8.測量并記錄當前Oracle 性能 9.重復步驟3到7,直到滿足優化目標 全新的路由器不僅讓你更穩定快速地連接無線網絡,更可以讓家中的智能設備連接在一起。 |
溫馨提示:喜歡本站的話,請收藏一下本站!