Oracle 數據庫中的?V$SQLAREA
?是一個動態性能視圖(Dynamic Performance View),用于記錄共享池(Shared Pool)中所有 SQL 語句的統計信息。每個 SQL 語句在共享池中存儲為一個游標(Cursor),而?V$SQLAREA
?提供了這些游標的聚合信息。
核心字段
-
SQL_ID
-
SQL 語句的唯一標識符(哈希值),用于跟蹤特定 SQL。
-
-
HASH_VALUE
-
舊版 SQL 的哈希值(與?
SQL_ID
?并存,但?SQL_ID
?更常用)。
-
-
ADDRESS
-
SQL 語句在共享池中的內存地址,常用于聯合其他視圖(如?
V$SQLTEXT
)。
-
-
VERSION_COUNT
-
共享池中該 SQL 的不同版本游標數量(如因綁定變量窺視導致的不同執行計劃)。
-
-
PARSING_SCHEMA_NAME
-
解析該 SQL 的數據庫用戶(模式名)。
-
-
EXECUTIONS
-
SQL 語句的總執行次數。
-
-
FIRST_LOAD_TIME
-
SQL 首次被加載到共享池的時間戳(格式:YYYY-MM-DD HH24:MI:SS)。
-
-
LAST_LOAD_TIME
-
SQL 最后一次被加載到共享池的時間戳。
-
-
LAST_ACTIVE_TIME
-
SQL 最后一次執行的時間戳。
-
性能相關字段
-
ELAPSED_TIME
-
所有執行的總耗時(微秒),包括等待時間(如 I/O)。
-
-
CPU_TIME
-
所有執行消耗的 CPU 時間(微秒)。
-
-
BUFFER_GETS
-
所有執行中邏輯讀(Logical Reads)的總次數。
-
-
DISK_READS
-
所有執行中物理讀(Physical Reads)的總次數。
-
-
ROWS_PROCESSED
-
所有執行中處理的總行數。
-
-
OPTIMIZER_COST
-
優化器估算的 SQL 執行成本(相對值,非實際資源消耗)。
-
-
FETCHES
-
數據獲取次數(通常針對查詢語句)。
-
-
SORTS
-
所有執行中排序操作的總次數。
-
其他關鍵字段
-
MODULE?/?ACTION
-
應用程序通過?
DBMS_APPLICATION_INFO
?設置的模塊名和操作名(用于追蹤來源)。
-
-
SQL_TEXT
-
SQL 語句的前 1000 個字符(完整 SQL 需關聯?
V$SQLTEXT
)。
-
-
PLAN_HASH_VALUE
-
執行計劃的哈希值,用于識別不同執行計劃。
-
-
CHILD_NUMBER
-
子游標編號(需聯合?
V$SQL
?使用)。
-
-
SHARABLE_MEM
-
共享內存占用量(字節)。
-
-
PERSISTENT_MEM
-
持久內存占用量(字節)。
-
-
RUNTIME_MEM
-
運行時內存占用量(字節)。
-
-
IO_CELL_OFFLOAD_ELIGIBLE_BYTES
-
可被智能掃描(Exadata)優化的 I/O 字節數(僅適用于 Exadata)。
-
-
IO_INTERCONNECT_BYTES
-
通過存儲網絡傳輸的實際 I/O 字節數。
-
應用場景
-
性能分析:通過?
BUFFER_GETS
、DISK_READS
、CPU_TIME
?等字段識別高資源消耗的 SQL。 -
執行計劃對比:利用?
PLAN_HASH_VALUE
?分析同一 SQL 是否因不同執行計劃導致性能差異。 -
綁定變量問題:高?
VERSION_COUNT
?可能暗示綁定變量窺視(Bind Peeking)引發的問題。 -
SQL 生命周期:通過?
LAST_ACTIVE_TIME
?判斷 SQL 是否長期未使用,以決定是否需優化或清理。
分析排序與資源競爭
通過?SORTS
?和?ROWS_PROCESSED
?字段,識別大量排序操作的 SQL。
?
SELECT sql_id,sql_text,sorts,rows_processed
FROM v$sqlarea
WHERE sorts > 1000 -- 排序次數超過閾值
ORDER BY sorts DESC;
字段解釋
-
sql_id
-
含義:SQL 語句的唯一標識符。
-
作用:用于區分不同的 SQL 語句,即使 SQL 文本完全相同,Oracle 也會為每次解析生成的執行計劃分配唯一的?
sql_id
。
-
-
sql_text
-
含義:SQL 語句的文本內容。
-
注意:由于視圖?
v$sqlarea
?的限制,較長的 SQL 文本可能被截斷。完整文本可通過?v$sqlstats.sql_fulltext
?或?DBA_HIST_SQLTEXT
(AWR 歷史表)查看。
-
-
sorts
-
含義:該 SQL 語句在所有執行過程中觸發的?排序操作總次數。
-
背景:排序通常由以下操作觸發:
-
ORDER BY
-
GROUP BY
-
DISTINCT
-
索引創建(如?
CREATE INDEX
)
-
-
性能影響:
-
若排序在內存(PGA)中完成,效率較高。
-
若排序使用臨時表空間(磁盤排序),會顯著增加 I/O 開銷,需優化。
-
-
-
rows_processed
-
含義:該 SQL 語句在所有執行過程中?處理的總行數。
-
分類:
-
對于?
SELECT
,表示返回的行數。 -
對于?
INSERT/UPDATE/DELETE
,表示影響的行數。 -
對于?
MERGE
,表示合并的行數。
-
-