oracle提高io,【转】Oracle性能优化调整--调整磁盘I/O
一.雖然通過調整SGA組件可以最大限度地減少物理I/O的發(fā)生
但是我們在某些活動中還是不可避免的將會產(chǎn)生磁盤I/O。需要注意的是在內(nèi)存中的I/O活動是邏輯的,在磁盤上的I/O活動是物理的。邏輯I/O比物理I/O快數(shù)千倍。
二.產(chǎn)生磁盤I/O的來源:
Database Writer(DBWO)--寫Database Buffer Cache中的緩存區(qū)到數(shù)據(jù)庫中的數(shù)據(jù)文件。
Database Writer(DBWO)--寫數(shù)據(jù)到回退段以維護讀一致性
用戶Server Process--讀取數(shù)據(jù)塊到Database Buffer Cache中
Log Writer(LGWR)--從Redo Log Buffer中寫事務恢復信息到Online Redo Log上
Archiver(ARC0)--讀取重做日志的內(nèi)容,并寫到存檔目標上臨時的大型排序寫盤操作
三.調整物理I/O的2個目標:
適當?shù)腟GA大小
盡可能快地執(zhí)行物理I/O
四.提高磁盤I/O需要調整的數(shù)據(jù)庫物理結構
1.數(shù)據(jù)文件 2.DBWO 3.單個段數(shù)據(jù)塊 4.排序操作和臨時段 5.回退段
五.調整表空間與數(shù)據(jù)文件
select s.FILE#||'D' "FILE#+TYPE" , d.NAME "DATAFILE",
s.PHYRDS,s.PHYWRTS,s.AVGIOTIM,s.MINIOTIM,s.MAXIOWTM,s.MAXIORTM
from v$filestat s,v$datafile d
where s.FILE#=d.FILE#
union
select s.FILE#||'T' "FILE#+TYPE" , t.NAME "DATAFILE",
s.PHYRDS,s.PHYWRTS,s.AVGIOTIM,s.MINIOTIM,s.MAXIOWTM,s.MAXIORTM
from v$filestat s,v$tempfile t
where s.FILE#=t.FILE#
order by 1;
PHYRDS--該數(shù)據(jù)文件上發(fā)生的物理讀次數(shù)
PHYWRTS--該數(shù)據(jù)文件上發(fā)生的物理寫次數(shù)
AVGIOTIM--平均花費的I/O時間
MINIOTIM--花費的最短時間
MAXIOWTM--寫操作花費的最長時間
MAXIORTM--讀操作花費的最長時間
我們能夠做的工作就是 :
不要將非Oracle文件放在與Oracle文件相同的磁盤上,避免引起對磁盤資源的潛在爭用!
創(chuàng)建局部管理表空間(LMT Locally Managed Tablespace)
均衡數(shù)據(jù)文件I/O--不要把數(shù)據(jù)庫的段集中放在某一個表空間,如:system.另外如果可能的話,將高頻率的I/O數(shù)據(jù)文件放在不同的磁盤或者控制器上面
調整init.ora參數(shù)的DB_FILE_MULTIBLOCK_READ_COUNT--指定一個用戶Server Process在執(zhí)行全表掃描的時候,讀取的最多數(shù)據(jù)塊個數(shù),默認是8
select name,value from v$sysstat
where name='table scans (long tables)'
如果統(tǒng)計數(shù)據(jù)很大,說明經(jīng)常執(zhí)行全表掃描,這樣的話增大這個參數(shù)是有收獲的
六.調整DBW0的性能
DBW0是負責寫Database Buffer Cache中的緩存區(qū)到數(shù)據(jù)庫中的數(shù)據(jù)文件。 由于數(shù)據(jù)文件可能駐留在一個速度比較慢的設備上或者DBW0寫臟緩沖區(qū)的效率不高,早成了等待事件。
select event,total_waits,average_wait
from v$system_event where event in('buffer busy waits','db file parallel
write','free buffer waits','write complete waits' )
如果發(fā)現(xiàn)等待次數(shù)過多,可能就需要調整 (1)參數(shù)DBWR_IO_SLAVES --啟動Database Writer從屬進程 默認0 (2)參數(shù)DB_WRITER_PROCESSES --啟動額外Database Writer進程 與DBWR_IO_SLAVES相比可以DBWO的全部功能 默認1,最大10
七.調整段I/O ORACLE存儲體系結構
數(shù)據(jù)庫包含一個或多個表空間 --表空間使用數(shù)據(jù)文件來存儲段 --段由一個或多個范圍組成 --范圍由連續(xù)的ORACLE塊組成
ORACLE塊由連續(xù)的操作系統(tǒng)塊組成 :
塊 SYSTEM和TEMP表空間使用的是主塊,由DB_BLOCK_SIZE參數(shù)設定 其他表空間可以使用BLOCKSIZE關鍵字指定塊的大小,不指定就默認為主塊的大小
范圍.
不要將應用程序的表和索引放在system表空間中。
設置合理的范圍大小 通過參數(shù)DB_FILE_MULTIBLOCK_READ_COUNT 大范圍的缺點是表空間的空間可能被浪費,但是讀取I/O的次數(shù)就可能會減少。
設置合理的塊大小
create table col_cust
(
cust_id varchar2(20),
cust_name varchar2(20)
)
PCTFREE 20 PCTUSED 30
INITTRANS 5
STORAGE (initial 250K
next 250K
pctincrease 0
freelists 1)
TABLESPACE aap1_data;
上面那段SQL中,范圍=32塊*8KB/塊=250K
PCTFREE 20--每個塊預留20%的空間用于保存行更新信息
八.調整排序I/O
會導致排序的操作
ORDER BY
GROUP BY
SELECT DISTINCT
UNION
INTERSECT
MINUS
ANALYZE
CREATE INDEX
1.盡量在內(nèi)存中完成排序 SORT_AREA_SIZE(不推薦更改默認值) ,建議95%以上都在內(nèi)存中排序
SORT_AREA_RETAINED_SIZE
PGA_AGGREGRATE_TAGET
WORKAREA_SIZE_POLICY
select mem.NAME,mem.VALUE /(disk.VALUE+mem.VALUE) "In-memory Sort Ratio"
from v$sysstat mem,v$sysstat disk
where mem.NAME='sorts (memory)'
and disk.NAME='sorts (disk)'
2.減少或者避免磁盤排序
UNION ALL取代UNION 避免INTERSECT/MINUS/DISTINCT
對ORDER BY和GROUP BY所引用的列盡量使用index
CREATE INDEX時增加NOSORT選項
3.使用臨時表空間 使用下面這條語句可以查詢一個表空間是臨時還是永久的
select tablespace_name,contents from dba_tablespaces
把一個臨時表空間指定為所有用戶的默認臨時表空間
alter database default temporary tablespace temp;
用戶默認的臨時表空間是SYSTEM
select sess.USERNAME,sql.SQL_TEXT,sort.BLOCKS
from v$session sess,v$sqltext sql,v$sort_usage sort
where sess.SERIAL#=sort.SESSION_NUM
and sort.SQLADDR=sql.ADDRESS
and sort.SQLHASH=sql.HASH_VALUE
and sort.BLOCKS>200;
上述語句可以查詢引起大排序的SQL語句,然后可以通過建立索引或者重寫語句來消除大排序
九.調整回退段I/O
當用戶啟動一個DML的事務時,以修改數(shù)據(jù)的像前版本被緩存在SGA的Database Buffer Cache中。這些緩沖區(qū)的副本也被寫到一個回退段上。
ORACLE利用回退段(rollback segment)來存儲應用程序用戶執(zhí)行DML操作所產(chǎn)生的以修改數(shù)據(jù)的像前版本。
該回退段被存儲在一個表空間中。回退段也叫做撤銷段(undo segment).像前版本的目的:
ROLLBACK時恢復原始數(shù)據(jù)
COMMIT以前,提供其他用戶訪問原數(shù)據(jù),提供以修改數(shù)據(jù)的讀一致性
當實例發(fā)生故障時,撤銷還未提交的事務
總結
以上是生活随笔為你收集整理的oracle提高io,【转】Oracle性能优化调整--调整磁盘I/O的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle列设置标题,oracle实现
- 下一篇: oracle导入java包时出错,Ora