閑聊Oracle減少回滾段
學(xué)習(xí)Oracle時(shí),你可能會(huì)遇到Oracle減少回滾段問題,這里將介紹Oracle減少回滾段問題的解決方法,在這里拿出來和大家分享一下。當(dāng)多個(gè)進(jìn)程要同時(shí)使用同一資源時(shí),就會(huì)發(fā)生資源爭用,當(dāng)出現(xiàn)資源爭用時(shí),就會(huì)產(chǎn)生等待,因此,應(yīng)設(shè)法避免或減少資源爭用的出現(xiàn)。本文主要討論回滾段、多線索服務(wù)器進(jìn)程和日志緩沖區(qū)的閂鎖爭用問題。
Oracle減少回滾段的爭用
要Oracle減少回滾段的爭用,首先需檢查是否出現(xiàn)爭用。對(duì)含有回滾段塊的緩沖區(qū)的爭用也會(huì)影響到對(duì)回滾段的爭用。這可以通過查詢動(dòng)態(tài)性能表V$WAITSTAT來檢測(cè)是否存在對(duì)回滾段的爭用(需有SELECT ANY TABLE持權(quán)),例如:
- SQL>SELECT class,count
- 2>FROM V$WAITSTAT
- 3>WHERE class IN('system undo header','system undo block',
- 4>'undo header','undo block');
其中參數(shù)含義如下:
◆ system undo header:對(duì)含有SYSTEM回滾段標(biāo)題塊的緩沖區(qū)的等待次數(shù)。
◆ system undo block:對(duì)含有SYSTEM回滾段非標(biāo)題塊的緩沖區(qū)的等待次數(shù)。
◆ undo header:對(duì)含有非SYSTEM回滾段標(biāo)題塊的緩沖區(qū)的等待次數(shù)。
◆ undo block:對(duì)含有非SYSTEM回滾段非標(biāo)題塊的緩沖區(qū)的等待次數(shù)。
如果任何等待次數(shù)大于總請(qǐng)求數(shù)的1%,則應(yīng)創(chuàng)建更多的回滾段來減少競(jìng)爭,可以周期性地檢查這些統(tǒng)計(jì)數(shù)字,并將它與總的請(qǐng)求數(shù)據(jù)的次數(shù)作比較??偟恼?qǐng)求數(shù)據(jù)次數(shù)可用如下語句求出:
- SQL>SELECT SUM(value)
- 2>FROM V$SYSSTAT
- 3>WHERE name IN('db block gets','consistent gets');
Oracle減少回滾段爭用的辦法是為其建立適當(dāng)數(shù)量的回滾段。
減少對(duì)多線索服務(wù)器進(jìn)程的爭用
對(duì)多線索服務(wù)器進(jìn)程的爭用主要表現(xiàn)在對(duì)調(diào)度進(jìn)程和共享服務(wù)器進(jìn)程的爭用。
減少調(diào)度進(jìn)程的爭用
對(duì)該進(jìn)程的爭用主要表現(xiàn)在調(diào)度進(jìn)程占用率高及等待響應(yīng)時(shí)間的增長方面??赏ㄟ^查詢動(dòng)態(tài)性能表V$DISPATCHER(需有SELECT ANY TABLE特權(quán))來檢查爭用情況,例如:
- 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%秒單位時(shí)間內(nèi)調(diào)度進(jìn)程的空閑時(shí)間。
◆ busy:表示1%秒單位時(shí)間內(nèi)調(diào)度進(jìn)程的占用時(shí)間。
【編輯推薦】