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

Oracle 10g 效能調優實戰心法:從等待事件切入,直搗 I/O 瓶頸核心

     編輯:Oracle 資料庫基礎

調優思維轉向:優化等待,而非命中率

許多 DBA 面對「系統慢」仍盯著緩衝區命中率、資料庫命中率等傳統指標。實則現代調優核心在於 分析等待事件,尤其是 I/O 相關等待——它是影響效能的頭號殺手。透過作業系統層面工具與 Oracle 內部視圖雙重驗證,才能精準定位根因。

作業系統層面診斷三板斧

1. SAR 看 I/O 壓力

# 每 2 秒採樣 10 次
sar -u 2 10

關鍵欄位:

  • %wio(或 Linux 下的 %system):CPU 等待 I/O 完成的比例。超過 35% 即判定 I/O 瓶頸。
  • %idle:若接近 0,CPU 已滿載。

2. VMSTAT / GLANCE / TOPAS 監控記憶體

  • pi(page in)非零 + free 極小 = 記憶體壓力大。
  • 記憶體使用率 > 80% 需介入。

對策:SGA 不超過物理記憶體 40-50%;連接數大時啟用 MTS/共用伺服器;打補丁防記憶體洩漏。

3. 定位佔用資源的 Session

OS 層面用 glance、top、topas、ps 找出高 CPU/記憶體進程的 SPID,再映射到 SQL:

SELECT a.username, a.machine, a.program, a.sid, a.serial#,
       c.piece, c.sql_text
FROM   v$session a, v$process b, v$sqltext c
WHERE  b.spid = <OS_SPID>
AND    b.addr = a.paddr
AND    a.sql_address = c.address(+)
ORDER  BY c.piece;

SQL 層面優化金鑰

  • EXISTS 取代 IN/NOT IN:Oracle 處理 IN 等同於多個 OR,即使走索引也慢。NOT IN 更會觸發全表掃描。
  • 找出 Top 10 高耗 SQL:ORDER BY disk_reads DESC 配合 v$sqlarea。

V$SESSION_WAIT 等待事件速查表

事件含義對策
buffer busy waits / free buffer waitsDBWR 寫入不及增 db_writer_processes、調 db_block_lru_latches、開啟非同步 I/O
db file sequential read索引讀取/全表掃描SQL 調優、加索引、增 db_file_multiblock_read_count
db file scattered read全表掃描同左
latch free閂鎖競爭專項調優

殺手鐧腳本:找出高物理讀等待 Session

SELECT se.sid, se.serial#, pr.spid, se.username, se.program,
       st.event, si.physical_reads
FROM   v$session se, v$session_wait st, v$sess_io si, v$process pr
WHERE  st.sid = se.sid
AND    si.sid = se.sid
AND    se.paddr = pr.addr
AND    se.sid > 6
AND    st.wait_time = 0
AND    st.event NOT LIKE '%SQL%'
ORDER  BY si.physical_reads DESC;

後續可用 ALTER SYSTEM KILL SESSION 'sid,serial#' 終止異常會話。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved