IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當前所在位置: 首頁數(shù)據(jù)庫Oracle → Oracle數(shù)據(jù)庫優(yōu)化之數(shù)據(jù)庫磁盤I/O

Oracle數(shù)據(jù)庫優(yōu)化之數(shù)據(jù)庫磁盤I/O

時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)

  概述

  影響數(shù)據(jù)庫性能的因素包括:系統(tǒng)、數(shù)據(jù)庫、網(wǎng)絡(luò)。

  數(shù)據(jù)庫的優(yōu)化包括:優(yōu)化數(shù)據(jù)庫磁盤I/O、優(yōu)化回滾段、優(yōu)化Rrdo日志、優(yōu)化系統(tǒng)全局區(qū)、優(yōu)化數(shù)據(jù)庫對象。

  監(jiān)控數(shù)據(jù)庫的性能

  在init.ora參數(shù)文件中設(shè)置TIMED_STATISTICS=TRUE 和在你的會話層設(shè)置ALTER SESSION SET STATISTICS=TRUE 。運行svrmgrl 用 connect internal 注冊,在你的應(yīng)用系統(tǒng)正?;顒悠陂g,運行utlbstat.sql 開始統(tǒng)計系統(tǒng)活動,達到一定的時間后,執(zhí)行utlestat.sql 停止統(tǒng)計。統(tǒng)計結(jié)果將產(chǎn)生在report.txt 文件中。(utlbstat.sql utlestat.sql 一般存放在$ORACLE_HOME/RDBMS/ADMIN 子目錄下)

  優(yōu)化數(shù)據(jù)庫磁盤I/O

  檢查系統(tǒng)的I/O問題

  在UNIX系統(tǒng)中工具sar-d能檢查整個系統(tǒng)的iostat(IO statistics),在NT系統(tǒng)上則使用性能監(jiān)視器(Performance Monitor).

  反映oracle文件I/O的進程

  

  使用V$FILESTAT確定oracle數(shù)據(jù)文件I/O

  SELECT NAME,PHYRDS,PHYWRTS FROM V$DATAFILE DF,V$FILESTAT FS WHERE DF.FILE#=FS.FILE# ;

  使用分布I/O減少磁盤競爭

   將數(shù)據(jù)文件和redo log文件分開

   Striping 表數(shù)據(jù)

   分開表和索引

   減少與oracle無關(guān)的磁盤I/O

  避免動態(tài)空間管理

  在創(chuàng)建如表或回滾段的數(shù)據(jù)庫實體時,在數(shù)據(jù)庫中會為這些數(shù)據(jù)分配空間,該空間被稱為段。如果數(shù)據(jù)庫操作引起數(shù)據(jù)增加并超出了分配的表空間,oracle會擴展該段,動態(tài)擴展會降低系統(tǒng)性能。

   確定動態(tài)擴展

  select name,value from v$sysstat where name=’recursive calls’ ;

   分配分區(qū)

  確定實體的最大大小;

  選擇存儲參數(shù)值,使oracle分配足夠大的分區(qū),在創(chuàng)建實體時可以裝入所有數(shù)據(jù)

   避免回滾段的動態(tài)空間管理

  回滾段大小由其存儲參數(shù)所決定,回滾段必須能保存所有交易的回滾入口;

  使用set transaction 命令可以為回滾段賦予交易的合適的大小;

  對長的查詢的修改數(shù)據(jù),應(yīng)賦予大的回滾段,以保持所有的回滾入口;

  對OLTP交易,由于頻繁交易,每個交易只修改小量的數(shù)據(jù),因此賦予小的回滾段。

   減少遷移和鏈接行

  1. 使用ANALYZE 收集遷移和鏈接行的信息;

  2. 查詢輸出表:chained_rows;

  3. 如果有許多遷移和鏈接行,就需要消除遷移行,方法如下:

  A. 創(chuàng)建與原表相同列的中間表,以保存遷移和鏈接行;

  B. 從原表中刪除遷移和鏈接行;

  C. 將中間表中的行插入到原表中;

  D. 刪除中間表

  4. 刪除第一步收集的信息;

  5. 重新使用ANALYZE命令查詢輸出表

  6. 在輸出表中出現(xiàn)的行都是鏈接行,只能通過增加數(shù)據(jù)塊的大小來清除。

  調(diào)整排序

  內(nèi)存中排序

  使用動態(tài)表V$SYSSTAT的信息反映排序

  SELECT NAME , VALUE FROM V$SYSSTAT WHERE NAME IN (‘SORTS(MEMORY)’,’SORTS(DISK)’) ;

  SORTS(MEMORY)-不需要使用I/O操作而完全在內(nèi)存完成的排序數(shù);

  SORTS(DISK)-需要使用I/O操作與磁盤臨時段才能完成數(shù)據(jù)的排序數(shù)目。

  增大SORT_AREA_SIZE以避免磁盤排序

  使用NOSORT創(chuàng)建非排序的索引

  CREATE INDEX INDEX_NAME ON TABLE TABLE_NAME(COLUMN_NAME) NOSORT ;

  調(diào)整Checkpoints

  一個checkpoint是oracle自動執(zhí)行的一種操作,當檢查點操作時,數(shù)據(jù)庫中的所有緩沖區(qū)會寫回磁盤,所有數(shù)據(jù)庫的控制文件被更新。Checkpoint頻繁發(fā)生會加快數(shù)據(jù)庫的恢復(fù),但是增加了I/O次數(shù),會降低系統(tǒng)的性能。

  調(diào)整LGWR和DBWn I/O

  調(diào)整LGWR I/O

  每次I/O寫的大小依賴于LOG緩沖區(qū)的大小,該大小由LOG BUFFER 所設(shè)置,緩沖區(qū)太大會延遲寫操作,太小可能導(dǎo)致頻繁的小的I/O操作。如果I/O操作的平均大小很大,那么LOG文件就會成為瓶頸,可以使用STRIPE REDO LOG文件避免這個問題。

  調(diào)整DBWN I/O

  使用初始參數(shù)DB_WRITER_PROCESSES,可以創(chuàng)建多個數(shù)據(jù)庫寫進程。

  調(diào)整競爭

  由多個進程同時請求使用相同的資源時,就產(chǎn)生了競爭

  確定競爭問題

  視圖V$RESOURCE_LIMIT提供了一些系統(tǒng)資源的使用限制。

  如果系統(tǒng)存在無反應(yīng)的現(xiàn)象,檢查V$SYSTEM_EVENT,檢查最大平均等待時間的事件;

  如果存在過量的緩沖區(qū)等待,檢查V$WAITSTAT,確定哪個類型的塊有最多的等待次數(shù)和最長的等待時間,再查詢V$SESSION_WAIT得到每個緩沖區(qū)的等待時間。

  減少回滾段的競爭

  通過檢查V$WAITSTAT可以確定回滾段的競爭:

  SELECT CLASS,COUNT FROM V$WAITSTAT WHERE CLASS IN (‘SYSTEM UODO HEADER’,’SYSTEM UODO BLOCK’,’UODO HEADER’,’UODO BLOCK’) ;

#p#副標題#e#

  減少調(diào)度進程的競爭

  檢查調(diào)度進程的busy率

  SELECT NETWORK"PROTOCOL", SUM(BUSY)/(SUM(BUSY)+SUM(IDLE)) "TOTAL BUSY RATE" FROM V$DISPATCHER GROUP BY NETWORK ;

  如果指定協(xié)議的調(diào)度進程忙的時間超過50%的有效工作時間,那么,增加調(diào)度進程可以提高使用該協(xié)議連接到oracle的性能。

  檢查調(diào)度進程相應(yīng)隊列的等待時間

  SELECT NETWORK "PROTOCOL" DECODE(SUM(TOTALQ),0.’NO RESPONSES’,SUM(WAIT)/SUM(TOTALQ)||’HUNDREDTHS OF SECONDS’) "AVERAGE WAIT TIME PER RESPONSE" FROM V$QUEUE Q,V$DISPATCHER D WHERE Q.TYPE=’DISPATCHER’ AND Q.PADDR=D.PADDR GROUP BY NETWORK ;

  增加調(diào)度進程:使用MTS_DISPATCHERS參數(shù)和ALTER_SYSTEM命令可以增加調(diào)度進程

  減少共享服務(wù)器進程的競爭

  共享服務(wù)器進程競爭可以由不斷增加的請求等待時間所反映,使用如下查詢:

  select decode(totalq,0,’No Requests’, wait/totalq||’hundredths of seconds’) "Average Wait Time Per Requests" from v$queue where type=’COMMON’ ;

  使用如下查詢可以得到當前運行的共享服務(wù)進程數(shù):

  select count(*) "Shared Server Processes" from V$shared_servers where status!=’QUIT’;

  oracle能自動增加共享服務(wù)進程,但是MTS_MAX_SERVERS的值可以更改。

  減少redo log緩沖區(qū)latches競爭

  在LGWR進程將redo入口從redo log緩沖區(qū)寫入redo log文件后,該入口就會被新入口覆蓋,供其他log的使用。

  V$SYSSTAT中redo buffer allocation retries 反映用戶進程等待redo log空間的次數(shù):

  Select name,value from v$sysstat where name=’redo buffer allocation retries’ ;

  redo buffer allocation retries的值應(yīng)該接近0,如果該值持續(xù)增加,那么,說明進程需要等待緩沖區(qū)的空間。增大參數(shù)LOG_BUFFER的值可以增大redo log的大小。

  確定redo log緩沖區(qū)latches競爭

  redo分配latch;

  redo復(fù)制latches。

  一次只能有一個用戶分配緩沖區(qū)中的空間,在分配了redo入口的空間后,用戶進程將入口復(fù)制到緩沖區(qū),其最大大小是由LOG_SMALL_ENTRY_MAX_SIZE指定。Redo復(fù)制latches的數(shù)目由參數(shù)LOG_SIMULTANEOUS_COPIES指定。

  檢查redo log活動

  對redo log緩沖區(qū)的頻繁訪問可能導(dǎo)致redo log緩沖區(qū)latches競爭,降低系統(tǒng)性能。Oracle在動態(tài)表V$LATCH中收集了所有LATCH的統(tǒng)計信息。

  其中:表v$latch反映willing-to-wait 請求的列

  gets-成功的willing-to-wait請求數(shù);

  misses-初始不成功的willing-to-wait請求數(shù);

  sleeps-請求不成功的等待時間;

  表v$latch反映immediate請求的列:

  immediate gets-成功的immediate請求數(shù)

  immediate misses-不成功的immediate請求數(shù)

  使用如下查詢:

  select ln.name,gets,misses,immediate_gets,immediate_misses from v$latch l,v$latchname ln where ln.name in (‘redo allocation ’,’redo copy’) and ln.latch#=l.latch# ;

  可以計算出各類請求的等待率。

  減少latch競爭

  要減少redo allocation latch競爭,必須減少單個進程占用latch的時間。要減少這個時間,可以減少該redo allocation latch的復(fù)制。減少LOG_SMALL_ENTRY_MAX_SIZE初始參數(shù)可以減少在redo allocation latch的redo入口的復(fù)制次數(shù)和大小。

  減少redo copy Latches競爭可以用增加LOG_SIMULTANEOUS_COPIES的值來增加LATCH數(shù),最多可以達到CPU的兩倍。

  減少F

關(guān)鍵詞標簽:磁盤,Oracle數(shù)據(jù)庫優(yōu)化

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 Oracle中使用alter table來增加,刪除,修改列的語法 Oracle中使用alter table來增加,刪除,修改列的語法 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 誤刪Oracle數(shù)據(jù)庫實例的控制文件 誤刪Oracle數(shù)據(jù)庫實例的控制文件 為UNIX服務(wù)器設(shè)置Oracle全文檢索 為UNIX服務(wù)器設(shè)置Oracle全文檢索

相關(guān)下載

    人氣排行 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 Oracle中使用alter table來增加,刪除,修改列的語法 ORACLE SQL 判斷字符串是否為數(shù)字的語句 ORACLE和SQL語法區(qū)別歸納(1) oracle grant 授權(quán)語句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法