資源爭用產生等待,等待即浪費。本文聚焦三大熱點:回滾段、Dispatcher(調度器)、Shared Server(共享伺服器)的爭用偵測與消除。
SELECT class, count FROM V$WAITSTAT
WHERE class IN ('system undo header','system undo block','undo header','undo block');
system undo header/block:SYSTEM 回滾段標頭/資料塊等待。undo header/block:非 SYSTEM 回滾段等待。任一類別等待次數 > 總請求數 1% → 新增回滾段。
總請求數查詢:
SELECT SUM(value) FROM V$SYSSTAT
WHERE NAME IN ('db block gets','consistent gets');
定期巡檢,動態調整回滾段數量。
SELECT network "protocol",
SUM(busy)/(SUM(busy)+SUM(idle)) "Total Rate"
FROM V$DISPATCHER GROUP BY network;
IDLE、BUSY:百分之一秒單位時間。SELECT network "protocol",
DECODE(SUM(totalq),0,'No Responses',
SUM(wait)/SUM(totalq) || ' hundredths of seconds') "Avg Wait"
FROM V$QUEUE q, V$DISPATCHER d
WHERE q.type = 'DISPATCHER' AND q.paddr = d.paddr
GROUP BY network;
WAIT:佇列總等待時間(百分之一秒)。TOTALQ:總回應次數。ALTER SYSTEM SET MTS_DISPATCHERS='...'。總數上限受 MTS_MAX_DISPATCHERS 限制(預設 5,最大視 OS)。
SELECT DECODE(totalq,0,'No Requests',
wait/totalq || ' hundredths of seconds') "Avg Wait Per Request"
FROM V$QUEUE WHERE type = 'COMMON';
等待時間高 → 增加 Shared Server 進程。
SELECT COUNT(*) "Shared Server Processes"
FROM V$SHARED_SERVER WHERE STATUS != 'QUIT';