I will explain V$SQL and GV$SQL Views in Oracle in this post.
V$SQL and GV$SQL in Oracle
V$SQL and GV$SQL views are most important views in the Oracle Database. Because you can review the statistics of SQL statements with these views.
V$SQL shows the local instance’s SQL Statistics and GV$SQL shows the all instances’ SQL Statistics.
V$SQL in Oracle
V$SQL view has the following column and statistics data.
Column | Datatype | Description |
---|---|---|
SQL_TEXT |
VARCHAR2(1000) |
First thousand characters of the SQL text for the current cursor |
SQL_FULLTEXT |
CLOB |
Full text for the SQL statement exposed as a CLOB column. The full text of a SQL statement can be retrieved using this column instead of joining with the V$SQL_TEXT dynamic performance view. |
SQL_ID |
VARCHAR2(13) |
SQL identifier of the parent cursor in the library cache |
SHARABLE_MEM |
NUMBER |
Amount of shared memory used by the child cursor (in bytes) |
PERSISTENT_MEM |
NUMBER |
Fixed amount of memory used for the lifetime of the child cursor (in bytes) |
RUNTIME_MEM |
NUMBER |
Fixed amount of memory required during the execution of the child cursor |
SORTS |
NUMBER |
Number of sorts that were done for the child cursor |
LOADED_VERSIONS |
NUMBER |
Indicates whether the context heap is loaded (1 ) or not (0 ) |
OPEN_VERSIONS |
NUMBER |
Indicates whether the child cursor is locked (1 ) or not (0 ) |
USERS_OPENING |
NUMBER |
Number of users executing the statement |
FETCHES |
NUMBER |
Number of fetches associated with the SQL statement |
EXECUTIONS |
NUMBER |
Number of executions that took place on this object since it was brought into the library cache |
PX_SERVERS_EXECUTIONS |
NUMBER |
Total number of executions performed by Parallel eXecution Servers. The value is 0 when the statement has never been executed in parallel. |
END_OF_FETCH_COUNT |
NUMBER |
Number of times this cursor was fully executed since the cursor was brought into the library cache. The value of this statistic is not incremented when the cursor is partially executed, either because it failed during the execution or because only the first few rows produced by this cursor are fetched before the cursor is closed or re-executed. By definition, the value of the END_OF_FETCH_COUNT column should be less or equal to the value of the EXECUTIONS column. |
USERS_EXECUTING |
NUMBER |
Number of users executing the statement |
LOADS |
NUMBER |
Number of times the object was either loaded or reloaded |
FIRST_LOAD_TIME |
VARCHAR2(19) |
Timestamp of the parent creation time |
INVALIDATIONS |
NUMBER |
Number of times this child cursor has been invalidated |
PARSE_CALLS |
NUMBER |
Number of parse calls for this child cursor |
DISK_READS |
NUMBER |
Number of disk reads for this child cursor |
DIRECT_WRITES |
NUMBER |
Number of direct writes for this child cursor |
BUFFER_GETS |
NUMBER |
Number of buffer gets for this child cursor |
APPLICATION_WAIT_TIME |
NUMBER |
Application wait time (in microseconds) |
CONCURRENCY_WAIT_TIME |
NUMBER |
Concurrency wait time (in microseconds) |
CLUSTER_WAIT_TIME |
NUMBER |
Cluster wait time (in microseconds) |
USER_IO_WAIT_TIME |
NUMBER |
User I/O Wait Time (in microseconds) |
PLSQL_EXEC_TIME |
NUMBER |
PL/SQL execution time (in microseconds) |
JAVA_EXEC_TIME |
NUMBER |
Java execution time (in microseconds) |
ROWS_PROCESSED |
NUMBER |
Total number of rows the parsed SQL statement returns |
COMMAND_TYPE |
NUMBER |
Oracle command type definition |
OPTIMIZER_MODE |
VARCHAR2(10) |
Mode under which the SQL statement is executed |
OPTIMIZER_COST |
NUMBER |
Cost of this query given by the optimizer |
OPTIMIZER_ENV |
RAW(691) |
Optimizer environment |
OPTIMIZER_ENV_HASH_VALUE |
NUMBER |
Hash value for the optimizer environment |
PARSING_USER_ID |
NUMBER |
User ID of the user who originally built this child cursor |
PARSING_SCHEMA_ID |
NUMBER |
Schema ID that was used to originally build this child cursor |
PARSING_SCHEMA_NAME |
VARCHAR2(30) |
Schema name that was used to originally build this child cursor |
KEPT_VERSIONS |
NUMBER |
Indicates whether this child cursor has been marked to be kept pinned in the cache using the DBMS_SHARED_POOL package |
ADDRESS |
RAW(4 | 8) |
Address of the handle to the parent for this cursor |
TYPE_CHK_HEAP |
RAW(4) |
Descriptor of the type check heap for this child cursor |
HASH_VALUE |
NUMBER |
Hash value of the parent statement in the library cache |
OLD_HASH_VALUE |
NUMBER |
Old SQL hash value |
PLAN_HASH_VALUE |
NUMBER |
Numerical representation of the SQL plan for this cursor. Comparing one PLAN_HASH_VALUE to another easily identifies whether or not two plans are the same (rather than comparing the two plans line by line). |
CHILD_NUMBER |
NUMBER |
Number of this child cursor |
SERVICE |
VARCHAR2(64) |
Service name |
SERVICE_HASH |
NUMBER |
Hash value for the name listed in SERVICE |
MODULE |
VARCHAR2(64) |
Contains the name of the module that was executing at the time that the SQL statement was first parsed, which is set by calling DBMS_APPLICATION_INFO .SET_MODULE |
MODULE_HASH |
NUMBER |
Hash value of the module listed in the MODULE column |
ACTION |
VARCHAR2(64) |
Contains the name of the action that was executing at the time that the SQL statement was first parsed, which is set by calling DBMS_APPLICATION_INFO .SET_ACTION |
ACTION_HASH |
NUMBER |
Hash value of the action listed in the ACTION column |
SERIALIZABLE_ABORTS |
NUMBER |
Number of times the transaction fails to serialize, producing ORA-08177 errors, per cursor |
OUTLINE_CATEGORY |
VARCHAR2(64) |
If an outline was applied during construction of the cursor, then this column displays the category of that outline. Otherwise the column is left blank. |
CPU_TIME |
NUMBER |
CPU time (in microseconds) used by this cursor for parsing, executing, and fetching |
ELAPSED_TIME |
NUMBER |
Elapsed time (in microseconds) used by this cursor for parsing, executing, and fetching |
OUTLINE_SID |
NUMBER |
Outline session identifier |
CHILD_ADDRESS |
RAW(4 | 8) |
Address of the child cursor |
SQLTYPE |
NUMBER |
Denotes the version of the SQL language used for this statement |
REMOTE |
VARCHAR2(1) |
Indicates whether the cursor is remote mapped (Y ) or not (N ) |
OBJECT_STATUS |
VARCHAR2(19) |
Status of the cursor:
|
LITERAL_HASH_VALUE |
NUMBER |
Hash value of the literals which are replaced with system-generated bind variables and are to be matched, when CURSOR_SHARING is used. This is not the hash value for the SQL statement. If CURSOR_SHARING is not used, then the value is 0. |
LAST_LOAD_TIME |
VARCHAR2(19) |
Time at which the query plan (heap 6) was loaded into the library cache |
IS_OBSOLETE |
VARCHAR2(1) |
Indicates whether the cursor has become obsolete (Y ) or not (N ). This can happen if the number of child cursors is too large. |
CHILD_LATCH |
NUMBER |
Child latch number that is protecting the cursor |
SQL_PROFILE |
VARCHAR2(64) |
SQL profile |
PROGRAM_ID |
NUMBER |
Program identifier |
PROGRAM_LINE# |
NUMBER |
Program line number |
EXACT_MATCHING_SIGNATURE |
NUMBER |
Signature calculated on the normalized SQL text. The normalization includes the removal of white space and the uppercasing of all non-literal strings. |
FORCE_MATCHING_SIGNATURE |
NUMBER |
The signature used when the CURSOR_SHARING parameter is set to FORCE |
LAST_ACTIVE_TIME |
DATE |
TIme at which the query plan was last active |
BIND_DATA |
RAW(2000) |
Bind data |
You can list the any sql id’s statement statistics as follows.
select * from v$sql where sql_id='gqr94hyvp0004';
You can list the SQL Statistics using v$SQL as follows.
SELECT /*+parallel(32) */ SQL_ID , SQL_TEXT, force_matching_signature FROM V$SQL WHERE force_matching_signature IN (SELECT force_matching_signature FROM v$sql WHERE force_matching_signature <> 0 AND force_matching_signature <> exact_matching_signature GROUP BY force_matching_signature HAVING COUNT(*) > 1) ORDER BY 3;
GV$SQL in Oracle
If you use the Oracle RAC and you have lots of Oracle instance, then you need to use gv$sql views.
All statistics of SQL Statement can be found as follows.
select * from gv$sql; select * from gv$sql where sql_id='gqr94hyvp0004'; SQL Statement's some statistics select inst_id,SQL_PLAN_BASELINE ,sql_fulltext,sql_profile ,trunc(elapsed_time/decode(executions, 0, 1, executions)/1000000) elapsed_time, plan_hash_value,hash_value, child_number, first_load_time, last_load_time, executions, buffer_gets, trunc(buffer_gets/decode(executions, 0, 1, executions)) gets_per_exec, trunc(rows_processed/decode(executions, 0, 1, executions)) rows_return_per_exec from gv$sql where sql_id='2hmam9gkmbmm8' order by last_load_time desc; SQL Statement's history using gv$sql and dba_hist_active_sess_history select /*+ parallel(32)*/ runday,sql_id,plnhash,sqlexec,fms,module,mntime,mxtime,mxtime-mntime,cnt, (select sql_profile from gv$sql where sql_id=x.sql_id and rownum=1) sqlprof, (select sql_plan_baseline from gv$sql where sql_id=x.sql_id and rownum=1) sqlbaseline, (select substr(sql_text,1,30) from gv$sql where sql_id=x.sql_id and rownum=1) sqltext, (select sql_fulltext from gv$sql where sql_id=x.sql_id and rownum=1) sqlFULLtext from (select trunc(sample_time) runday,sql_id,sql_plan_hash_value plnhash,sql_exec_id sqlexec,FORCE_MATCHING_SIGNATURE fms,module,min(sample_time) mntime,max(sample_time) mxtime,count(1) cnt from dba_hist_active_sess_history where sql_id='81c1akh8zubg7' group by trunc(sample_time),sql_id,sql_plan_hash_value,sql_exec_id,FORCE_MATCHING_SIGNATURE,module order by 1 desc,count(1) desc) x;
Do you want to learn Oracle Database Performance Tuning detailed, then Click this link.
Performance Tuning and SQL Tuning Tutorial in the Oracle Database