本人很喜歡Oracle,在工作中也很喜歡總結關於Oracle優化緩沖區的經驗教訓,下面就這個問題來詳細說說Oracle優化緩沖區吧。
(1)獲取緩沖區活動情況
為了Oracle優化緩沖區,首先應了解緩沖區的活動情況。這可以通過查詢動態性能表(需有SELECT ANY TABLE特權)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”的值是請求數據緩沖區中讀的總次數。“physical reads”為請求數據時引起從盤中讀文件的次數。
(2)緩沖區命中率
從緩沖區讀的可能性的高低稱為緩沖區命中率。它可用如下公式計算:Hot Ratio=1-(physical reads/(db block gets+consistent gets)
緩沖區命中率越高,其速度就越快。如果命中率低於60%或70%時。則應增加緩沖區(即DB_BLOCK_BUFFERS),以改進性能。根據公式可以計算出本例中的Hot Ratio=1-(1963/(3437+30500)=92%。如果緩沖區的命中率很高,希望在保持良好性能下適當減少緩沖區,這時可減少DB_BLOCK_BUFFERS的值,其最小值為4。
當一個文件上的輸入/輸出(I/O)請求干擾了第二個文件的輸入/輸出請求時,那麼這兩個文件就會發生爭用。所以兩個隨機存取的文件只有在無可能同時存取它們時,才可以存放在同一設備中。由此可以分為兩種類型的I/O爭用:並行I/O爭用和干擾爭用。並行I/O爭用多發生在同一時間對同一設備請求多種存取時,這種類型的爭用可以通過分離與表相聯系的索引的辦法來消除。干擾爭用發生在對一個順序文件進行寫操作而同時進行讀命令時中斷而引起。
I/O優化的目的是解決I/O瓶頸問題,I/O的優化必須在內存優化之後進行,可以通過減少磁盤爭用、有效分配數據塊空間和避免動態空間管理三個方面來優化I/O。
減少磁盤爭用
V$FILESTAT視圖提供有關物理讀寫的信息。物理I/O針對磁盤,邏輯I/O針對內存。如果有多個進程同時訪問同-磁盤,就產個磁盤爭用。
監控Oracle的磁盤活動
要解決磁盤爭用,首先應該知道磁盤的活動情況,確定是否發生爭用。這可以通過查詢動態性能表(需有SELECT ANY TABLE特權)V$FILESTAT和V$DATAFILE來確定。例如:
- SQL>SELECT Name,phyrds,phywrts
- FROM V$DATAFILE df,V$FILESTAT fs
- WHERE df.file#=fs.file#;
其中:
◆ phyrds:記錄從盤上讀每個數據庫文件的次數。
◆ phywrts:記錄往盤上寫數據庫文件的次數。
一個盤上總的I/O次數是該盤上所有數據庫文件的phyrds和phywrts之和。必須把物理讀寫的總量控制在用戶硬件和操作系統的最優限制內。以上介紹Oracle優化緩沖區。