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

Oracle 動態效能視圖(V$ Views)完整解析

     編輯:Oracle 資料庫基礎

前言

Oracle 動態效能視圖(Dynamic Performance Views,通稱 V$ Views)是 DBA 監控、調校、診斷資料庫效能的核心工具。這些視圖不儲存於資料檔,而是直接從 SGA(System Global Area)與控制檔即時讀取,反映執行個體當下的運行狀態。本文系統整理不同啟動階段可存取的視圖、常用視圖分類與實戰查詢範例。

一、資料庫啟動階段與可見視圖

Oracle 執行個體啟動經歷三個階段,各階段可查詢的動態視圖不同:

階段描述主要資料來源可存取視圖範例
NOMOUNT讀取參數檔、配置 SGA、啟動背景程序SGAV$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_*)

二、核心動態效能視圖分類與查詢範例

1. 執行個體與 SGA 資訊

  • V$INSTANCE:執行個體名稱、主機、狀態
    SELECT instance_name, host_name, status FROM v$instance;
  • V$SGA / V$SGAINFO:SGA 元件大小
    SELECT * FROM v$sgainfo;
  • V$PARAMETER:初始化參數當前值
    SELECT name, value, isdefault FROM v$parameter WHERE name LIKE '%sga%';
  • V$VERSION:資料庫版本詳細資訊
  • V$OPTION:已安裝的選項功能

2. 會話與程序監控

  • V$SESSION:當前所有會話詳細資訊
    SELECT sid, serial#, username, status, machine, program, logon_time FROM v$session WHERE username IS NOT NULL;
  • V$PROCESS:作業系統層級程序(背景/前景)
    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';
  • V$BGPROCESS:背景程序狀態(PMON, DBWn, LGWR, CKPT, SMON, RECO 等)

3. 儲存結構視圖

  • V$DATABASE:資料庫名稱、日誌模式、建立時間、角色(Primary/Standby)
  • V$CONTROLFILE:控制檔路徑與狀態
  • V$DATAFILE / V$DATAFILE_HEADER:資料檔詳細資訊(檔案號、名稱、大小、狀態、检查點 SCN)
  • V$LOGFILE / V$LOG:重做日誌組與成員資訊、狀態(CURRENT, ACTIVE, INACTIVE, UNUSED)
  • V$THREAD:重做執行緒資訊(RAC 環境每個執行個體一個執行緒)
  • V$TABLESPACE / V$TEMPFILE:表空間與暫存檔資訊

4. 鎖與等待事件分析

  • V$LOCK:鎖資訊,配合 V$SESSION 找出阻塞鏈
    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;
  • V$LOCKED_OBJECT:被鎖定的物件,關聯 DBA_OBJECTS 取得物件名稱
  • V$SESSION_WAIT:會話當前等待事件
  • V$SESSION_EVENT:會話歷史等待事件統計
  • V$SYSTEM_EVENT:系統級等待事件累計統計
  • V$WAITSTAT:區塊爭用等待統計

5. SQL 執行與共享池

  • V$SQL / V$SQLAREA:共享池中 SQL 文本、執行計畫、統計資訊
  • V$SQLTEXT / V$SQLTEXT_WITH_NEWLINES:完整 SQL 文本
  • V$SQL_PLAN / V$SQL_PLAN_STATISTICS:執行計畫與執行時統計
  • V$LIBRARYCACHE / V$ROWCACHE / X$KSMSP:共享池、字典快取、子池記憶體分配

6. I/O 與緩衝區快取

  • V$FILESTAT / V$TEMPSTAT:資料檔/暫存檔 I/O 統計
  • V$BH:緩衝區標頭資訊,分析熱門區塊(Hot Blocks)
  • V$SEGSTAT:段級統計

7. Advisor 視圖(10g+)

  • V$DB_CACHE_ADVICE、V$PGA_TARGET_ADVICE、V$SHARED_POOL_ADVICE:記憶體大小建議

三、Oracle 官方建議的 9 大核心視圖組合

  1. V$SESSION + V$SESSION_WAIT(10g 整合為 V$SESSION_WAIT_HISTORY)
  2. V$PROCESS
  3. V$SQL
  4. V$SQLTEXT
  5. V$BH(或底層 X$BH)
  6. V$LOCK
  7. V$LATCH_CHILDREN
  8. V$SYSSTAT
  9. V$SYSTEM_EVENT

四、實戰查詢技巧

1. 列出所有動態視圖

SELECT name FROM v$fixed_table WHERE name LIKE 'V$%' ORDER BY name;

2. 找出高負載 SQL

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;

3. 監控會話等待鏈

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;

五、權限控管

  • 所有 V$ 視圖擁有者為 SYS。
  • 預設僅 SYS、SYSDBA、DBA 角色可查詢。
  • 需授權給其他使用者時:GRANT SELECT ON v_$session TO monitor_user;(注意底線)。

提示:10g 之後推薦使用 V$ 同義詞而非 V_$ 基表。生產環境查詢高頻視圖時,建議搭配 /*+ MONITOR */ 提示或使用 Enterprise Manager/Cloud Control 視覺化介面。

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