1、V$SQL%知多少----之二
V$SQL_PLAN,
1、本視圖提供了一種方式檢查那些執行過的並且仍在緩衝中的cursor 的執行計畫。 通常,本視圖提供的資訊與列印出的EXPLAIN PLAN 非常相似,不過,EXPLAIN PLAN 顯示的是理論上的計劃,並不一定在執行的時候就會被使用,但V$SQL_PLAN 中包括的是 實際被使用的計劃。
V$SQL_PLAN中的常用列除了一些新加列,本視圖幾乎包括所有的PLAN_TABLE列,那些同樣存在於PLAN_TABLE中的列擁有相同的值:
ADDRESS:當前cursor父控制代碼位置
HASH_VALUE:在library cache中父語句的HASH值。
ADDRESS和HASH_VALUE這兩列可以被用於串連v$sqlarea查詢 cursor-specific 資訊。
CHILD_NUMBER:使用這個執行計畫的子cursor數
列ADDRESS,HASH_VALUE以及CHILD_NUMBER可被用於串連v$sql查詢子cursor資訊。
OPERATION: 在各步驟執行內部操作的名稱,例如:TABLE ACCESS
OPTIONS: 描述列OPERATION在操作上的變種,例如:FULL
OBJECT_NODE: 用於訪問對象的資料庫連結database link 的名稱對於使用並存執行的本地查詢該列能夠描述操作中輸出的次序。
OBJECT#: 表或索引對象數量
OBJECT_OWNER: 對於包含有表或索引的架構schema 給出其所有者的名稱
OBJECT_NAME: 表或索引名
OPTIMIZER: 執行計畫中首列的預設最佳化模式;例如,CHOOSE。比如業務是個儲存資料庫,它將告知是否對象是最佳化的。
ID: 在執行計畫中指派到每一步的序號。
PARENT_ID: 對ID 步驟的輸出進行操作的下一個執行步驟的ID。
DEPTH: 業務樹深度(或級)。
POSITION: 對於具有相同PARENT_ID 的操作其相應的處理次序。
COST: cost-based方式最佳化的操作開銷的評估,如果語句使用rule-based方式,本列將為空白。
CARDINALITY: 根據cost-based方式操作所訪問的行數的評估。
BYTES: 根據cost-based方式操作產生的位元組的評估,。
OTHER_TAG: 其它列的內容說明。
PARTITION_START: 範圍存取分區中的開始分區。
PARTITION_STOP: 範圍存取分區中的停止分區。
PARTITION_ID: 計算PARTITION_START和PARTITION_STOP這對列值的步數
OTHER: 其它資訊即執行步驟細節,供使用者參考。
DISTRIBUTION: 為了並行查詢,儲存用於從生產伺服器到消費伺服器分配列的方法
CPU_COST: 根據cost-based方式CPU操作開銷的評估。如果語句使用rule-based方式,本列為空白。
IO_COST: 根據cost-based方式I/O操作開銷的評估。如果語句使用rule-based方式,本列為空白。
TEMP_SPACE: cost-based方式操作(sort or hash-join)的臨時空間佔用評估。如果語句使用rule-based方式,本列為空白。
ACCESS_PREDICATES: 指明以便在存取結構中定位列,例如,在範圍索引查詢中的開始或者結束位置。
FILTER_PREDICATES: 在產生資料之前即指明過濾列。CONNECT BY操作產生DEPTH列替換LEVEL偽列,有時被用於在SQL指令碼中協助indent PLAN_TABLE資料 2、
V$SQL_PLAN中的串連列 列 ADDRESS,HASH_VALUE和 CHILD_NUMBER被用於串連 V$SQL或 V$SQLAREA來擷取 cursor-specific資訊, 例如, BUFFER_GET,或串連 V$SQLTEXT擷取完整的 SQL語句。Column View Joined Column(s)
ADDRESS, HASH_VALUE V$SQLAREA ADDRESS, HASH_VALUE
ADDRESS,HASH_VALUE,CHILD_NUMBER V$SQL ADDRESS,HASH_VALUE,CHILD_NUMBER
ADDRESS, HASH_VALUE V$SQLTEXT ADDRESS, HASH_VALUE 3、Oracle 公司強烈推薦你使用 DBMS_STATS包而非 ANALYZE收集最佳化統計。該包可以讓你平行地搜集統計項,收集分區對象 (partitioned objects) 的全集統計,並且通過其它方式更好的調整你的統計收集方式。此處, cost-based最佳化器將最終使用被 DBMS_STATS收集的統計項。 舉例:查詢的相關 SQL語句的執行計畫:1.SELECT sql_text, address, hash_value FROM v$sql WHERE sql_text like '%TAG%'; 2、SELECT operation, options, object_name, cost FROM v$sql_plan WHERE address = '???' AND hash_value = ???;