Oracle優(yōu)化緩沖區(qū)之高論
本人很喜歡Oracle,在工作中也很喜歡總結(jié)關(guān)于Oracle優(yōu)化緩沖區(qū)的經(jīng)驗(yàn)教訓(xùn),下面就這個問題來詳細(xì)說說Oracle優(yōu)化緩沖區(qū)吧。
(1)獲取緩沖區(qū)活動情況
為了Oracle優(yōu)化緩沖區(qū),首先應(yīng)了解緩沖區(qū)的活動情況。這可以通過查詢動態(tài)性能表(需有SELECT ANY TABLE特權(quán))V$SYSSTAT來獲得。
- SVRMGR> select name ,value from v$sysstat
- 2> where name in('db block gets','consistent gets','physical reads');
- NAME VALUE
- db blockgets 3437
- consistent gets 30500
- physica reads 1963
- 3 rows selected.
其中,“db block gets”和“consistent gets”的值是請求數(shù)據(jù)緩沖區(qū)中讀的總次數(shù)?!皃hysical reads”為請求數(shù)據(jù)時引起從盤中讀文件的次數(shù)。
(2)緩沖區(qū)命中率
從緩沖區(qū)讀的可能性的高低稱為緩沖區(qū)命中率。它可用如下公式計(jì)算:Hot Ratio=1-(physical reads/(db block gets+consistent gets)
緩沖區(qū)命中率越高,其速度就越快。如果命中率低于60%或70%時。則應(yīng)增加緩沖區(qū)(即DB_BLOCK_BUFFERS),以改進(jìn)性能。根據(jù)公式可以計(jì)算出本例中的Hot Ratio=1-(1963/(3437+30500)=92%。如果緩沖區(qū)的命中率很高,希望在保持良好性能下適當(dāng)減少緩沖區(qū),這時可減少DB_BLOCK_BUFFERS的值,其最小值為4。
當(dāng)一個文件上的輸入/輸出(I/O)請求干擾了第二個文件的輸入/輸出請求時,那么這兩個文件就會發(fā)生爭用。所以兩個隨機(jī)存取的文件只有在無可能同時存取它們時,才可以存放在同一設(shè)備中。由此可以分為兩種類型的I/O爭用:并行I/O爭用和干擾爭用。并行I/O爭用多發(fā)生在同一時間對同一設(shè)備請求多種存取時,這種類型的爭用可以通過分離與表相聯(lián)系的索引的辦法來消除。干擾爭用發(fā)生在對一個順序文件進(jìn)行寫操作而同時進(jìn)行讀命令時中斷而引起。
I/O優(yōu)化的目的是解決I/O瓶頸問題,I/O的優(yōu)化必須在內(nèi)存優(yōu)化之后進(jìn)行,可以通過減少磁盤爭用、有效分配數(shù)據(jù)塊空間和避免動態(tài)空間管理三個方面來優(yōu)化I/O。
減少磁盤爭用
V$FILESTAT視圖提供有關(guān)物理讀寫的信息。物理I/O針對磁盤,邏輯I/O針對內(nèi)存。如果有多個進(jìn)程同時訪問同-磁盤,就產(chǎn)個磁盤爭用。
監(jiān)控Oracle的磁盤活動
要解決磁盤爭用,首先應(yīng)該知道磁盤的活動情況,確定是否發(fā)生爭用。這可以通過查詢動態(tài)性能表(需有SELECT ANY TABLE特權(quán))V$FILESTAT和V$DATAFILE來確定。例如:
- SQL>SELECT Name,phyrds,phywrts
- FROM V$DATAFILE df,V$FILESTAT fs
- WHERE df.file#=fs.file#;
其中:
◆ phyrds:記錄從盤上讀每個數(shù)據(jù)庫文件的次數(shù)。
◆ phywrts:記錄往盤上寫數(shù)據(jù)庫文件的次數(shù)。
一個盤上總的I/O次數(shù)是該盤上所有數(shù)據(jù)庫文件的phyrds和phywrts之和。必須把物理讀寫的總量控制在用戶硬件和操作系統(tǒng)的***限制內(nèi)。以上介紹Oracle優(yōu)化緩沖區(qū)。
【編輯推薦】