| 進程 | 關鍵參數 | 調優方向 |
| LGWR | LOG_BUFFER | 太大延遲寫入,太小頻繁小I/O;I/O大小大時用Stripe Redo Log |
| DBWn | DB_WRITER_PROCESSES | 多CPU系統增加DBWn (建議CPU數/8) |
八、各類競爭診斷與解決
1. 調度器競爭 (共用伺服器)
-- 忙碌率 > 50% 增加調度器
SELECT network, SUM(busy)/(SUM(busy)+SUM(idle)) "TOTAL BUSY RATE"
FROM v$dispatcher GROUP BY network;
-- 平均等待時間
SELECT network, 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;
2. 共用伺服器進程競爭
SELECT DECODE(totalq,0,'No Requests', wait/totalq||' hundredths of seconds') "AVG WAIT"
FROM v$queue WHERE type='COMMON';
3. Redo Log Buffer Latch競爭
-- Allocation Retries 持續增長 → 增大 LOG_BUFFER
SELECT value FROM v$sysstat WHERE name = 'redo buffer allocation retries';
-- Latch 統計
SELECT ln.name, gets, misses, immediate_gets, immediate_misses
FROM v$latch l, v$latchname ln
WHERE ln.name IN ('redo allocation', 'redo copy') AND ln.latch#=l.latch#;
-- Allocation Latch 爭用 → 降低 LOG_SMALL_ENTRY_MAX_SIZE
-- Copy Latch 爭用 → 增加 LOG_SIMULTANEOUS_COPIES (最高 2×CPU)
4. Free List競爭
V$WAITSTAT 確認 DATA BLOCK 競爭
V$SYSTEM_EVENT 確認 BUFFER BUSY WAITS
V$SESSION_WAIT 定位 FILE/BLOCK
DBA_EXTENTS 反查 SEGMENT
DBA_SEGMENTS 確認 FREELISTS 數量
- 重建表指定
FREELISTS N (或用ASSM徹底解決)
九、資料庫檔案佈局方針速查
- 表/索引分不同表空間 → 不同磁碟
- Redo Log/回滾段 → 不同磁碟
- Oracle軟體/資料檔 → 不同磁碟
- 最熱點表/索引 → 最快磁碟
- 資料磁碟禁止安裝第三方軟體
十、I/O分佈監控查詢
SELECT name, phyrds, phywrts, (phyrds+phywrts) total_io
FROM v$datafile df, v$filestat fs
WHERE df.file# = fs.file#
ORDER BY total_io DESC;
依總I/O量調整檔案分佈,將高I/O檔案移至獨立/更快磁碟。
- 上一篇文章: 在Oracle中使用Java編寫存儲過程:從Hello World到實戰擴展
- 下一篇文章: Oracle僅更新兩表對應資料的兩種高效寫法與WHERE陷阱
Copyright ©
程式碼之家 All Rights Reserved