この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:guest
更新日時:2026-06-11 07:07:02

タイトル: 動的パフォーマンスビュー (V$ビュー)
SEOタイトル: Oracle V$ ビュー入門 — v$session / v$sql / v$lock / AWR との関係

この記事の要点
  • 動的パフォーマンスビュー = Oracle が稼働中の SGA / プロセス / セッション情報を SQL で参照できる仮想ビュー群、通称 V$ ビュー
  • 実体は X$ 表 (メモリ構造そのもの) に対する公開ビュー。SYS ユーザーが所有
  • 代表: v$session / v$process / v$sga / v$sgastat / v$sql / v$sqlarea / v$lock / v$bgprocess
  • バージョン確認は SELECT * FROM v$version; が定番。冒頭行に Edition と Patch Set
  • V$ は 現在値のスナップショット、過去傾向は AWR (DBA_HIST_*) / ASH (v$active_session_history) を使う

動的パフォーマンスビューとは

Oracle のインスタンスがメモリ上に持っている各種状態 (セッション、SQL キャッシュ、ロック、SGA 領域使用量など) を、SQL で リアルタイムに 参照できる仮想ビュー群です。SQL のセッションが続く限り常に最新値が返ります。

名前が V$ で始まることから、現場では 「V$ ビュー」「ブイドル ビュー」 と呼ばれます。

正体は X$ 表

本当に「ビュー」なのは表面上で、その下には X$ 表 (X ダラー表) と呼ばれる、SGA のメモリ構造を直接読むための内部表があります。X$ は SYS 以外には基本見えず、構造もパッチで変わるため、通常は V$ ビュー経由でアクセス します。

[ アプリ・DBA ]
       │ SELECT * FROM v$session;
       ▼
[ V$SESSION (公開ビュー) ]
       │
       ▼
[ GV$SESSION (RAC 全インスタンス版) ]
       │
       ▼
[ X$KSUSE (内部 X$ 表 = SGA メモリへの窓) ]

GV$ は RAC (Real Application Clusters) で全インスタンスをまたいで参照したいときに使う「Global」版です。シングル構成では V$ と同じ結果が返ります。

代表的な V$ ビュー

ビュー用途よく見る列
v$versionOracle のバージョンとエディションBANNER
v$instanceインスタンス名 / 起動時刻 / 状態INSTANCE_NAME, STARTUP_TIME, STATUS
v$databaseDB 名、DBID、Log ModeNAME, LOG_MODE, OPEN_MODE
v$session現在接続中の全セッションSID, SERIAL#, USERNAME, MACHINE, STATUS, EVENT
v$processサーバ側 OS プロセスPID, SPID, PROGRAM
v$sql共有プールに残っている個別の SQL 実行計画SQL_ID, SQL_TEXT, EXECUTIONS, ELAPSED_TIME
v$sqlareaSQL_ID 単位に集約した SQLSQL_ID, EXECUTIONS, BUFFER_GETS
v$sga / v$sgastatSGA サイズ / プール別内訳NAME, BYTES
v$lock現在の Enqueue ロックSID, TYPE, ID1, ID2, LMODE, REQUEST
v$bgprocessバックグラウンドプロセス一覧NAME, PADDR, DESCRIPTION
v$session_wait各セッションの待機イベントSID, EVENT, WAIT_TIME
v$active_session_history (ASH)過去 1 秒粒度のセッション活動SAMPLE_TIME, SQL_ID, EVENT

使い方の例

バージョン確認

SELECT * FROM v$version;

-- BANNER
-- ----------------------------------------------------------------
-- Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
-- Version 19.20.0.0.0

誰がつないでいるか

SELECT sid, serial#, username, machine, program, status, event
FROM v$session
WHERE username IS NOT NULL          -- バックグラウンドを除外
ORDER BY logon_time DESC;

重い SQL を特定

SELECT sql_id,
       executions,
       ROUND(elapsed_time/1e6, 2) AS sec_total,
       ROUND(elapsed_time/NULLIF(executions,0)/1e3, 2) AS ms_per_exec,
       SUBSTR(sql_text, 1, 80) AS sql_preview
FROM v$sqlarea
ORDER BY elapsed_time DESC
FETCH FIRST 20 ROWS ONLY;

ロック待ちの調査

SELECT  blocker.sid AS blocker_sid,
        blocker.username AS blocker_user,
        waiter.sid  AS waiter_sid,
        waiter.username  AS waiter_user,
        waiter.sql_id    AS waiter_sql_id
FROM   v$lock l_waiter
JOIN   v$lock l_blocker
       ON l_blocker.id1 = l_waiter.id1
      AND l_blocker.id2 = l_waiter.id2
      AND l_blocker.lmode > 0
      AND l_waiter.request > 0
JOIN   v$session waiter  ON waiter.sid  = l_waiter.sid
JOIN   v$session blocker ON blocker.sid = l_blocker.sid;

SGA の内訳

SELECT pool, name, ROUND(bytes/1024/1024, 1) AS mb
FROM v$sgastat
WHERE bytes > 50*1024*1024
ORDER BY bytes DESC;

AWR / ASH との関係

V$ ビューは 「今の値」だけ しか返しません。インスタンス再起動でリセットされ、過去の傾向は見られません。長期トレンドや過去事象の調査には次の系統を使い分けます。

系統粒度保持必要ライセンス
V$ / GV$現在のスナップショットインスタンス起動中のみ標準で利用可
V$ACTIVE_SESSION_HISTORY (ASH)1 秒粒度のセッション活動SGA 内、数十分〜数時間Diagnostics Pack
DBA_HIST_* (AWR)スナップショット (既定 1 時間)既定 8 日 (拡張可)Diagnostics Pack
STATSPACKAWR と同様ユーザーが管理無料

権限と注意

  • 所有者は SYS。一般ユーザーで参照するには SELECT_CATALOG_ROLE 付与か、対象ビューに個別の SELECT 権限
  • ロックや待機を見るための代表的な権限は SELECT_CATALOG_ROLE + SELECT ANY DICTIONARY
  • V$ は セッション全体に対するメモリ読み込み を伴うので、極端に大量に SELECT すると本番負荷になる
  • 名前が変わることはほぼ無いが、列の追加/削除はマイナーバージョンで起こる — マニュアルを必ず確認

FAQ

Q: V$ と GV$ の違いは?
A: GV$ は RAC で全インスタンス分の行を返す版です。INST_ID 列が追加され、シングル構成では結果が V$ と同じになります。

Q: v$sqlv$sqlarea の違い?
A: v$sql は子カーソル単位 (バインド変数別の実行計画ごと) に行を返し、v$sqlarea は SQL_ID 単位で集約済みです。性能調査の最初は v$sqlarea から見るのが定番。

Q: AWR が無いライセンスでも過去傾向を見たい
A: STATSPACK を導入してください。AWR と同等のレポートが無料で利用できます。