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

Oracle 動態視圖架構深度解析:V$、GV$、V_$、X$ 關係圖譜

     編輯:Oracle 資料庫基礎

現象與疑問

日常使用 V$SESSION 等動態視圖,偶見 V_$SESSION、GV$SESSION 寫法,DESC 結構相同。另有 X$ 開頭物件。它們究竟是什麼關係?

核心發現:三層架構

層級前綴本質說明
基礎表X$固定表 (Fixed Table)直接映射 SGA 共享記憶體結構,非資料字典表,不可修改
實例級視圖V$ / V_$視圖封裝 X$ 表,單實例視角,V$ 為 V_$ 同義詞
叢集級視圖GV$視圖RAC 環境下跨所有實例彙總,含 INST_ID 欄位

驗證查詢:V$FIXED_TABLE

SQL> DESC V$FIXED_TABLE;
NAME         NULL?    TYPE
------------ -------- ------------
NAME                  VARCHAR2(30)
OBJECT_ID             NUMBER
TYPE                  VARCHAR2(5)     -- TABLE / VIEW
TABLE_NUM             NUMBER

SQL> SELECT * FROM V$FIXED_TABLE WHERE NAME LIKE 'V$SESSION%';
NAME         OBJECT_ID   TYPE  TABLE_NUM
------------ ----------- ----- ----------
GV$SESSION   4294951xxx  VIEW  65537
V$SESSION    4294950xxx  VIEW  65537
X$KSUSE      4294950xxx  TABLE 0       -- 底層固定表

視圖定義追溯:V$FIXED_VIEW_DEFINITION

SQL> SET LINESIZE 200
SQL> COL VIEW_NAME FOR A20
SQL> COL VIEW_DEFINITION FOR A100
SQL> SELECT * FROM V$FIXED_VIEW_DEFINITION WHERE VIEW_NAME = 'V$SESSION';

VIEW_NAME   VIEW_DEFINITION
----------- ------------------------------------------------------------------
V$SESSION   SELECT ... FROM X$KSUSE WHERE ...

可見 V$SESSION 直接查詢底層固定表 X$KSUSE(Session 狀態資訊)。

關鍵關係圖譜

X$KSUSE (Fixed Table, SGA 記憶體映射)
    │
    ├─► V_$SESSION (View, 實例級)
    │       │
    │       └─► V$SESSION (Public Synonym → V_$SESSION)
    │
    └─► GV$SESSION (View, 叢集級)
            │
            └─► SELECT * FROM V_$SESSION@instance_link UNION ALL ...
            (含 INST_ID 欄位區分實例)

實戰意義

  1. V$ vs V_$:功能完全相同,V$ 為公共同義詞指向 V_$,慣用 V$ 即可
  2. GV$ 僅在 RAC 有效:單實例環境查詢 GV$ 等同 V$,但含 INST_ID=1
  3. X$ 表不可直接廣泛查詢:需 SYSDBA 權限,且無語法檢查保護,誤用易導致實例不穩定
  4. 效能診斷首選 V$/GV$:經過封裝、過濾、格式化,安全且高效

常見 X$ 核心表對照

X$ 表對應 V$ 視圖用途
X$KSUSEV$SESSIONSession 狀態
X$KSLEDV$LATCH閂統計
X$KSLWTV$LATCH_WAIT閂等待
X$KSQEQV$ENQUEUE_STAT佇列鎖
X$KCBFWAITV$WAITSTAT緩衝等待
X$KSMFSVV$SGASTATSGA 記憶體分佈

進階:自訂 V$ 視圖封裝

DBA 可建立自訂視圖封裝常用 X$ 聯結邏輯:

CREATE OR REPLACE VIEW my_session_wait AS
SELECT s.sid, s.serial#, s.username, s.sql_id, w.event, w.wait_time, w.seconds_in_wait
FROM v$session s, v$session_wait w
WHERE s.sid = w.sid
AND s.username IS NOT NULL;

再授權 GRANT SELECT ON my_session_wait TO monitor_role; 供監控工具使用。

理解 X$→V$/V_$→GV$ 三層架構,是從「會用視圖」進階到「懂架構、能封裝、敢優化」的關鍵認知躍升。

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