首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 回滾段與多執行緒伺服器爭用消除實戰指南

     編輯:Oracle 資料庫基礎

資源爭用產生等待,等待即浪費。本文聚焦三大熱點:回滾段、Dispatcher(調度器)、Shared Server(共享伺服器)的爭用偵測與消除。

一、回滾段爭用偵測與解決

1. 監控等待統計

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 回滾段等待。

2. 判準與對策

任一類別等待次數 > 總請求數 1% → 新增回滾段。

總請求數查詢:

SELECT SUM(value) FROM V$SYSSTAT 
WHERE NAME IN ('db block gets','consistent gets');

定期巡檢,動態調整回滾段數量。

二、Dispatcher 爭用:佔用率與等待時間雙指標

1. 佔用率監控

SELECT network "protocol",
       SUM(busy)/(SUM(busy)+SUM(idle)) "Total Rate"
FROM V$DISPATCHER GROUP BY network;
  • IDLE、BUSY:百分之一秒單位時間。
  • 佔用率 > 50% → 增加該協定的 Dispatcher 數量。

2. 平均等待時間監控

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:總回應次數。
  • 等待時間增長 → 增加 Dispatcher。

3. 增加 Dispatcher 兩種方式

  1. SQL*DBA 圖形介面「Configure Multi-Threaded Dispatchers」。
  2. ALTER SYSTEM SET MTS_DISPATCHERS='...'。

總數上限受 MTS_MAX_DISPATCHERS 限制(預設 5,最大視 OS)。

三、Shared Server 爭用:請求佇列等待時間

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';

四、實務建議

  1. 優先使用專用伺服器模式;僅連接數極大、記憶體不足時啟用 MTS。
  2. Dispatcher/Shared Server 數量隨負載彈性調整,避免過度配置浪費記憶體。
  3. 回滾段爭用在 AUM (Automatic Undo Management) 環境下極少見,重點檢查舊版手動模式。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved