Oracle 動態效能視圖(Dynamic Performance Views,通稱 V$ Views)是 DBA 監控、調校、診斷資料庫效能的核心工具。這些視圖不儲存於資料檔,而是直接從 SGA(System Global Area)與控制檔即時讀取,反映執行個體當下的運行狀態。本文系統整理不同啟動階段可存取的視圖、常用視圖分類與實戰查詢範例。
Oracle 執行個體啟動經歷三個階段,各階段可查詢的動態視圖不同:
| 階段 | 描述 | 主要資料來源 | 可存取視圖範例 |
|---|---|---|---|
| NOMOUNT | 讀取參數檔、配置 SGA、啟動背景程序 | SGA | V$PARAMETER, V$SGA, V$OPTION, V$PROCESS, V$SESSION, V$VERSION, V$INSTANCE |
| MOUNT | 開啟控制檔,掛載資料庫 | SGA + 控制檔 | NOMOUNT 所有視圖 + V$THREAD, V$CONTROLFILE, V$DATABASE, V$DATAFILE, V$DATAFILE_HEADER, V$LOGFILE |
| OPEN | 開啟資料檔與重做日誌 | SGA + 控制檔 + 資料檔 | 所有動態視圖 + 效能相關視圖(V$FILESTAT, V$SESSION_WAIT, V$WAITSTAT) ※ 僅 OPEN 階段可查詢資料字典視圖(DBA_*, ALL_*, USER_*) |
SELECT instance_name, host_name, status FROM v$instance;SELECT * FROM v$sgainfo;SELECT name, value, isdefault FROM v$parameter WHERE name LIKE '%sga%';SELECT sid, serial#, username, status, machine, program, logon_time FROM v$session WHERE username IS NOT NULL;SELECT p.spid, p.pga_used_mem, s.username FROM v$process p JOIN v$session s ON p.addr = s.paddr WHERE s.username = 'SCOTT';SELECT l.sid, l.type, l.lmode, l.request, s.username, s.machine FROM v$lock l JOIN v$session s ON l.sid = s.sid WHERE l.request > 0 OR l.lmode > 0;SELECT name FROM v$fixed_table WHERE name LIKE 'V$%' ORDER BY name;
SELECT sql_id, executions, buffer_gets, disk_reads,
ROUND((buffer_gets - disk_reads)/buffer_gets, 2) AS hit_ratio,
sql_text
FROM v$sqlarea
WHERE executions > 100
ORDER BY buffer_gets DESC
FETCH FIRST 20 ROWS ONLY;
SELECT
s.sid, s.serial#, s.username, s.machine, s.program,
sw.event, sw.wait_time, sw.seconds_in_wait,
sq.sql_text
FROM v$session s
JOIN v$session_wait sw ON s.sid = sw.sid
LEFT JOIN v$sql sq ON s.sql_id = sq.sql_id
WHERE s.status = 'ACTIVE' AND s.username IS NOT NULL
ORDER BY sw.seconds_in_wait DESC;
SYS。SYS、SYSDBA、DBA 角色可查詢。GRANT SELECT ON v_$session TO monitor_user;(注意底線)。提示:10g 之後推薦使用 V$ 同義詞而非 V_$ 基表。生產環境查詢高頻視圖時,建議搭配 /*+ MONITOR */ 提示或使用 Enterprise Manager/Cloud Control 視覺化介面。