v$sql、v$sqlarea、v$sqltext、v$sql_plan

--v$sqltext
--Concept:This view contains the text of SQL statements belonging to shared SQL cursors in the SGA.
--記錄完整的sql,但sql被分片存儲
/*
 Name             Null?    Type
 ----------------------------------------- -------- ----------------------------
 ADDRESS              RAW(4)
 HASH_VALUE              NUMBER            --address、hash_value唯一標識一條sql
 SQL_ID               VARCHAR2(13)
 COMMAND_TYPE              NUMBER
 PIECE                NUMBER               --PIECE分片之後的順序
 SQL_TEXT					    VARCHAR2(64)         --SQL_TEXT爲sql文本
 */
select * from v$sqltext;

--v$sqlarea
--Concept:V$SQLAREA lists statistics on shared SQL area and contains one row per SQL string. It provides statistics on SQL statements that are in memory,
-- parsed, and ready for execution.
--記錄共享sql區中的統計信息(執行次數、邏輯讀、物理讀等);相同文本的sql只記錄一次
/*
 Name             Null?    Type
 ----------------------------------------- -------- ----------------------------
 SQL_TEXT              VARCHAR2(1000)
 SQL_FULLTEXT              CLOB
 SQL_ID               VARCHAR2(13)
 SHARABLE_MEM              NUMBER
 PERSISTENT_MEM             NUMBER
 RUNTIME_MEM              NUMBER
 SORTS                NUMBER
 VERSION_COUNT              NUMBER
 LOADED_VERSIONS            NUMBER
 OPEN_VERSIONS              NUMBER
 USERS_OPENING              NUMBER
 FETCHES              NUMBER
 EXECUTIONS              NUMBER
 PX_SERVERS_EXECUTIONS            NUMBER
 END_OF_FETCH_COUNT            NUMBER
 USERS_EXECUTING            NUMBER
 LOADS                NUMBER
 FIRST_LOAD_TIME            VARCHAR2(76)
 INVALIDATIONS              NUMBER
 PARSE_CALLS              NUMBER
 DISK_READS              NUMBER
 DIRECT_WRITES              NUMBER
 BUFFER_GETS              NUMBER
 APPLICATION_WAIT_TIME            NUMBER
 CONCURRENCY_WAIT_TIME            NUMBER
 CLUSTER_WAIT_TIME            NUMBER
 USER_IO_WAIT_TIME            NUMBER
 PLSQL_EXEC_TIME            NUMBER
 JAVA_EXEC_TIME             NUMBER
 ROWS_PROCESSED             NUMBER
 COMMAND_TYPE              NUMBER
 OPTIMIZER_MODE             VARCHAR2(10)
 OPTIMIZER_COST             NUMBER
 OPTIMIZER_ENV              RAW(797)
 OPTIMIZER_ENV_HASH_VALUE          NUMBER
 PARSING_USER_ID            NUMBER
 PARSING_SCHEMA_ID            NUMBER
 PARSING_SCHEMA_NAME            VARCHAR2(30)
 KEPT_VERSIONS              NUMBER
 ADDRESS              RAW(4)
 HASH_VALUE              NUMBER
 OLD_HASH_VALUE             NUMBER
 PLAN_HASH_VALUE            NUMBER
 MODULE               VARCHAR2(64)
 MODULE_HASH              NUMBER
 ACTION               VARCHAR2(64)
 ACTION_HASH              NUMBER
 SERIALIZABLE_ABORTS            NUMBER
 OUTLINE_CATEGORY            VARCHAR2(64)
 CPU_TIME              NUMBER
 ELAPSED_TIME              NUMBER
 OUTLINE_SID              VARCHAR2(40)
 LAST_ACTIVE_CHILD_ADDRESS			    RAW(4)
 REMOTE 					    VARCHAR2(1)
 OBJECT_STATUS					    VARCHAR2(19)
 LITERAL_HASH_VALUE				    NUMBER
 LAST_LOAD_TIME 				    DATE
 IS_OBSOLETE					    VARCHAR2(1)
 CHILD_LATCH					    NUMBER
 SQL_PROFILE					    VARCHAR2(64)
 PROGRAM_ID					    NUMBER
 PROGRAM_LINE#					    NUMBER
 EXACT_MATCHING_SIGNATURE			    NUMBER
 FORCE_MATCHING_SIGNATURE			    NUMBER
 LAST_ACTIVE_TIME				    DATE
 BIND_DATA					    RAW(2000)
*/
select * from v$sqlarea

--v$sql
--Concept:V$SQL lists statistics on shared SQL area without the GROUP BY clause and contains one row for each child of the original SQL text entered. 
--Statistics displayed in V$SQL are normally updated at the end of query execution. However, for long running queries, they are updated every 5 seconds.
-- This makes it easy to see the impact of long running SQL statements while they are still in progress.
--記錄共享sql區中的統計信息(執行次數、邏輯讀、物理讀等);每一次執行sql語句都會記錄,且與v$sql_plan關聯可查詢每條sql語句的執行計劃。
/*
 Name					   Null?    Type
 ----------------------------------------- -------- ----------------------------
 SQL_TEXT					    VARCHAR2(1000)
 SQL_FULLTEXT					    CLOB
 SQL_ID 					    VARCHAR2(13)
 SHARABLE_MEM					    NUMBER           --佔用共享內存的大小
 PERSISTENT_MEM 				    NUMBER         --生命週期內的固定內存大小
 RUNTIME_MEM					    NUMBER           --執行期內的固定內存大小
 SORTS						    NUMBER               --完成的排序數
 LOADED_VERSIONS				    NUMBER
 OPEN_VERSIONS					    NUMBER
 USERS_OPENING					    NUMBER         --執行語句的用戶數
 FETCHES					    NUMBER               --sql語句的fetch數
 EXECUTIONS					    NUMBER             --自它被載入緩存庫後的執行次數
 PX_SERVERS_EXECUTIONS				    NUMBER
 END_OF_FETCH_COUNT				    NUMBER
 USERS_EXECUTING				    NUMBER         --執行語句的用戶數
 LOADS						    NUMBER               --對象被載入過的次數
 FIRST_LOAD_TIME				    VARCHAR2(76)   --初次載入時間
 INVALIDATIONS					    NUMBER         --無效的次數
 PARSE_CALLS					    NUMBER           --解析調用次數
 DISK_READS					    NUMBER             --讀磁盤數
 DIRECT_WRITES					    NUMBER
 BUFFER_GETS					    NUMBER           --讀緩存區數
 APPLICATION_WAIT_TIME				    NUMBER
 CONCURRENCY_WAIT_TIME				    NUMBER
 CLUSTER_WAIT_TIME				    NUMBER
 USER_IO_WAIT_TIME				    NUMBER
 PLSQL_EXEC_TIME				    NUMBER
 JAVA_EXEC_TIME 				    NUMBER
 ROWS_PROCESSED 				    NUMBER
 COMMAND_TYPE					    NUMBER
 OPTIMIZER_MODE 				    VARCHAR2(10)
 OPTIMIZER_COST 				    NUMBER
 OPTIMIZER_ENV					    RAW(797)
 OPTIMIZER_ENV_HASH_VALUE			    NUMBER
 PARSING_USER_ID				    NUMBER
 PARSING_SCHEMA_ID				    NUMBER
 PARSING_SCHEMA_NAME				    VARCHAR2(30)
 KEPT_VERSIONS					    NUMBER
 ADDRESS					    RAW(4)
 TYPE_CHK_HEAP					    RAW(4)
 HASH_VALUE					    NUMBER
 OLD_HASH_VALUE 				    NUMBER
 PLAN_HASH_VALUE				    NUMBER
 CHILD_NUMBER					    NUMBER
 SERVICE					    VARCHAR2(64)
 SERVICE_HASH					    NUMBER
 MODULE 					    VARCHAR2(64)
 MODULE_HASH					    NUMBER
 ACTION 					    VARCHAR2(64)
 ACTION_HASH					    NUMBER
 SERIALIZABLE_ABORTS				    NUMBER
 OUTLINE_CATEGORY				    VARCHAR2(64)
 CPU_TIME					    NUMBER
 ELAPSED_TIME					    NUMBER
 OUTLINE_SID					    NUMBER
 CHILD_ADDRESS					    RAW(4)
 SQLTYPE					    NUMBER
 REMOTE 					    VARCHAR2(1)
 OBJECT_STATUS					    VARCHAR2(19)
 LITERAL_HASH_VALUE				    NUMBER
 LAST_LOAD_TIME 				    VARCHAR2(76)
 IS_OBSOLETE					    VARCHAR2(1)
 CHILD_LATCH					    NUMBER
 SQL_PROFILE					    VARCHAR2(64)
 PROGRAM_ID					    NUMBER
 PROGRAM_LINE#					    NUMBER
 EXACT_MATCHING_SIGNATURE			    NUMBER
 FORCE_MATCHING_SIGNATURE			    NUMBER
 LAST_ACTIVE_TIME				    DATE
 BIND_DATA					    RAW(2000)
*/
select * from v$sql;
--注:可根據視圖v$sql中的plan_hash_value直接判斷sql語句的執行計劃是否相同

--v$sql_plan
--Concept:V$SQL_PLAN contains the execution plan information for each child cursor loaded in the library cache.
--記錄每條sql語句的執行計劃
/*
 Name					   Null?    Type
 ----------------------------------------- -------- ----------------------------
 ADDRESS					    RAW(4)
 HASH_VALUE					    NUMBER
 SQL_ID 					    VARCHAR2(13)
 PLAN_HASH_VALUE				    NUMBER
 CHILD_ADDRESS					    RAW(4)
 CHILD_NUMBER					    NUMBER
 TIMESTAMP					    DATE
 OPERATION					    VARCHAR2(120)
 OPTIONS					    VARCHAR2(120)
 OBJECT_NODE					    VARCHAR2(160)
 OBJECT#					    NUMBER
 OBJECT_OWNER					    VARCHAR2(30)
 OBJECT_NAME					    VARCHAR2(30)
 OBJECT_ALIAS					    VARCHAR2(65)
 OBJECT_TYPE					    VARCHAR2(80)
 OPTIMIZER					    VARCHAR2(80)
 ID						    NUMBER
 PARENT_ID					    NUMBER
 DEPTH						    NUMBER
 POSITION					    NUMBER
 SEARCH_COLUMNS 				    NUMBER
 COST						    NUMBER
 CARDINALITY					    NUMBER
 BYTES						    NUMBER
 OTHER_TAG					    VARCHAR2(140)
 PARTITION_START				    VARCHAR2(20)
 PARTITION_STOP 				    VARCHAR2(20)
 PARTITION_ID					    NUMBER
 OTHER						    VARCHAR2(4000)
 DISTRIBUTION					    VARCHAR2(80)
 CPU_COST					    NUMBER
 IO_COST					    NUMBER
 TEMP_SPACE					    NUMBER
 ACCESS_PREDICATES				    VARCHAR2(4000)
 FILTER_PREDICATES				    VARCHAR2(4000)
 PROJECTION					    VARCHAR2(4000)
 TIME						    NUMBER
 QBLOCK_NAME					    VARCHAR2(30)
 REMARKS					    VARCHAR2(4000)
 OTHER_XML					    CLOB
*/
select * from v$sql_plan;

--注:看似相同的sql語句,往往具有不同的sql執行計劃,而v$sql_area恰恰忽略了sql執行計劃的差異。

--應用舉例
--查看資源消耗最多的sql
select *
from v$sqlarea
where buffer_gets>10000000 or disk_reads>1000000
order by buffer_gets+100*disk_reads desc;
--查看使用頻率最高的前5條sql
select address,hash_value,sql_text,executions
from (
select row_number() over(order by executions desc) as top,address,hash_value,sql_text,executions
from v$sql
) t
where t.top<=5;
--查看某條語句的資源消耗情況
select address,hash_value,sql_text,disk_reads,buffer_gets,round((buffer_gets-disk_reads)/buffer_gets,4)*100 as "hits(%)"
,round(cpu_time/executions,4) as "cpu(秒/次)",round(elapsed_time/executions,4) as "execute(秒/次)",executions
from v$sqlarea
where address=hextoraw('4DC41CA4') and hash_value=864012087
--查看磁盤讀取頻率最高的前5條sql
select address,hash_value,sql_text,disk_reads
from (
select row_number() over(order by disk_reads desc) as top,address,hash_value,sql_text,disk_reads
from v$sql
) t
where t.top<=5;
--查看緩衝區讀取頻率最高的前5條sql
select address,hash_value,sql_text,buffer_gets
from (
select row_number() over(order by buffer_gets desc) as top,address,hash_value,sql_text,buffer_gets
from v$sql
) t
where t.top<=5;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章