v$mystat记录了某个session从运行以来的各种资源统计数据。
2、一般情况下v$mystat,v$sesstat会与v$statname一起配合使用。在v$statname视图中STATISTIC#与v$mystat,v$sesstat中STATISTIC#字段是相关联的。而NAME则是对应的英文信息:
select a.sid,b.name,a.value from v$sesstat a,v$statname b where a.sid=192 and a.statistic#=b.statistic# and b.name in ('consistent gets','physical reads','parse count (total)','parse count (hard)');
select sys_context('USERENV','SESSIONID') from dual;
得到的是v$session中的AUDSID字段中的值。然后根据v$session 查询即可。
select sid,serial#,username,process from v$session where audsid=261290;
SID: SESSION标识,常用于连接其它列
SERIAL#:如果某个 SID又被其它的 session使用的话则此数值自增加 (当一个SESSION结束,另一个 SESSION开始并使用了同一个 SID)。
USERNAME:当前 session在 oracle中的用户名。
last_call_et:sql语句运行的时间。如果session状态为active,那么意味着从session变为active到现在的时间,如果session状态为inactive,则意味着从session状态变为inactive到现在的时间。
event:当前等待的事件。
查找你的 session信息:
SELECT SID,OSUSER,USERNAME,MACHINE,PROGRAM,state,PROCESS FROM V$SESSION;
查找当前被某个指定 session正在运行的 sql语句:
select b.sql_text,a.status,a.last_call_et,a.event from v$session a,v$sqlarea bwhere a.sql_id=b.sql_idand a.sid= 100;
select sql_text,executions,disk_reads,optimizer_mode,buffer_gets,hash_valuefrom v$sql where sql_text like'select * from emp%';
1、disk_reads和buffer_gets分别对应执行计划当中的physical reads和consistent gets。
select sql_text,cpu_time/(1000*1000) t_cpu,trunc(elapsed_time/(1000*1000)) t_elap,(cpu_time/elapsed_time/(1000*1000))*100 pct
v$sqlarea列出了共享sql区(Shared sql Area)中的sql统计信息,这些sql按照sql文本的不同,每条会记录一行统计数据。注意这里所说的是“按照sql文本”来进行区分,也就是说这个视图的信息可以看作是根据sql_TEXT进行的一次汇总统计。
select sql_text,hash_value,version_countfrom v$sqlarea where sql_text like 'select count(*) from t%';
2、看起来完全相同的一句sql ,往往具有不同的执行计划。如果是不同的数据库用户,那么相应的涉及的对象可能都不一样。即使是相同的数据库用户,若 session 的优化模式、session 级的参数 等不一样,执行计划也能不同。所以即使相同的sql,也可能具有不同的执行计划!