Oracle資料庫優化

梓沐發表於2016-02-15

一、資料庫優化規範
1.不同用途的資料放在不同的tablespace避免資源爭用
2.不同的tablespace放在不同的物理驅動器調高I/O併發能力
3.日誌檔案放在速度快的磁碟上,資料檔案可以放在速度慢的磁碟上
4.日誌檔案的同組中不同成員放在不同的物理磁碟

二、通過物理檔案的讀寫次數來調優
Select d.tablespace_name,d.file_name,f.phyrds,f.phywrts from v$filestat f,dba_data_files d
where f.file#=d.file_id;

三、可以通過設定Oracle讀寫塊的大小提高I/O效率,引數:DB_FILE_MULTIBLOCK_READ_COUNT

四、配置多個DBWn
Alter system db_writer_precesses //作業系統必須支援非同步I/O,多cpu使用
1.開啟非同步I/O
2.在不支援非同步I/O的情況下,修改dbwr_io_slaves數量也可以達到增加DBWn的效果

五、LGWR是使效能下將
select sid,event,seconds_in_wait,state from v$session_wait where event='log buffer space'
語句執行後應該沒有為空,即沒有log buffer space wait

select name,value from v$sysstat where name in ('redo entries','redo buffer allocation retries')
語句執行後,如果redo buffer allocation retries此值過大說明redo buffer太小


六、歸檔引起
1.增加redo log 組和成員
2.archive檔案太多,沒地方寫歸檔檔案,可以刪除檔案
3.增加歸檔程式 log_archive_max_proceses

七、執行計劃
必須在同一個視窗執行這2條語句
1.explain plan for select * from gy_gdxm;
2.select * from table(dbms_xplan.display());

八、索引壓縮
壓縮索引可以提高索引的查詢效率,節約空間
1.當建立索引時使用:
create index emp_last_idx on hr.employees(last name,first_name) compress;
2.重建索引時使用:
alter index emp_last_name_idx rebuild compress;

九、索引判斷回滾段競爭的SQL語句
select rn.name, rs.GETS, rs.WAITS, (rs.WAITS / rs.GETS) * 100 ratio
from v$rollstat rs, v$rollname rn where rs.USN = rn.usn;
當Ration>2時存在回滾段競爭,則需增加更多的回滾段


十、判斷恢復日誌競爭的SQL語句    
select name,(t.IMMEDIATE_MISSES /decode((t.IMMEDIATE_GETS + t.IMMEDIATE_MISSES),0,-1,
(t.IMMEDIATE_GETS + t.IMMEDIATE_MISSES))) * 100 immediate_contention,
(t.MISSES / decode((t.GETS + t.MISSES), 0, -1, (t.GETS + t.MISSES))) * 100 wait_contention
from v$latch t where name in ('redo copy', 'redo allocation');

mmediate_contention或wait_contention的值大於1時存在競爭


十一、判斷表空間碎片
select t.tablespace_name,sum(t.bytes),max(t.bytes),count(*),max(t.bytes)/sum(t.bytes) radio
from dba_free_space t
group by t.tablespace_name order by t.tablespace_name;

如果最大空閒空間佔總空間很大比例則可能不存在碎片,如果比例較小,且有許多空閒空間,則可能碎片很多

十二、確定高速緩衝區命中率
select 1-sum(decode(name, 'physical reads', value, 0))/(sum(decode(name, 'db block gets', value, 0)) +
sum(decode(name, 'consistent gets', value, 0))) hit_ratio
from v$sysstat t where name in ('physical reads', 'db block gets', 'consistent gets');

如果命中率低於70%,則應該加大init.ora引數中的DB_BLOCK_BUFFER的值


十三、確定共享池命中率
select sum(pins) pins,sum(reloads) reloads ,(sum(reloads)/sum(pins) )* 100 ratio1 from v$librarycache ;
select sum(gets) gets,sum(getmisses) getmisses,(sum(getmisses) / sum(gets)) * 100 ratio2 from v$rowcache;

如果ratio1大於1時,需要加大共享池,如果ratio2大於10%時,需要加大共享池SHARED_POOL_SIZE



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

相關文章