學習Oracle時,你可能會遇到Oracle減少回滾段問題,這裡將介紹Oracle減少回滾段問題的解決方法,在這裡拿出來和大家分享一下。當多個進程要同時使用同一資源時,就會發生資源爭用,當出現資源爭用時,就會產生等待,因此,應設法避免或減少資源爭用的出現。本文主要討論回滾段、多線索服務器進程和日志緩沖區的闩鎖爭用問題。
Oracle減少回滾段的爭用
要Oracle減少回滾段的爭用,首先需檢查是否出現爭用。對含有回滾段塊的緩沖區的爭用也會影響到對回滾段的爭用。這可以通過查詢動態性能表V$WAITSTAT來檢測是否存在對回滾段的爭用(需有SELECT ANY TABLE持權),例如:
- SQL>SELECT class,count
- 2>FROM V$WAITSTAT
- 3>WHERE class IN('system undo header','system undo block',
- 4>'undo header','undo block');
其中參數含義如下:
◆ system undo header:對含有SYSTEM回滾段標題塊的緩沖區的等待次數。
◆ system undo block:對含有SYSTEM回滾段非標題塊的緩沖區的等待次數。
◆ undo header:對含有非SYSTEM回滾段標題塊的緩沖區的等待次數。
◆ undo block:對含有非SYSTEM回滾段非標題塊的緩沖區的等待次數。
如果任何等待次數大於總請求數的1%,則應創建更多的回滾段來減少競爭,可以周期性地檢查這些統計數字,並將它與總的請求數據的次數作比較。總的請求數據次數可用如下語句求出:
- SQL>SELECT SUM(value)
- 2>FROM V$SYSSTAT
- 3>WHERE name IN('db block gets','consistent gets');
Oracle減少回滾段爭用的辦法是為其建立適當數量的回滾段。
減少對多線索服務器進程的爭用
對多線索服務器進程的爭用主要表現在對調度進程和共享服務器進程的爭用。
減少調度進程的爭用
對該進程的爭用主要表現在調度進程占用率高及等待響應時間的增長方面。可通過查詢動態性能表V$DISPATCHER(需有SELECT ANY TABLE特權)來檢查爭用情況,例如:
- SQL>SELECT network "protocol",
- 2>SUM(busy)/(SUM(busy)+SUM(idle)) "Total Rate"
- 3>FROM V$DISPATCHER GROUP BY network;
其中V$DISPATCHER表中的idle和busy列的含義如下:
◆ idle:表示1%秒單位時間內調度進程的空閒時間。
◆ busy:表示1%秒單位時間內調度進程的占用時間。