V$SESSION,v$process
v$sqlarea,V$sql
v$open_cursor,v$db_object_cache
0.v$sqlarea是共享内存中的共享sq,也称父游标l,避免硬解析。V$sql是子游标。
存储过程中的sql也会在这两个视图中出现。有些语句没出现可能是被刷出去了,多执行几次就可能出现的。
1.查看正在运行的存储过程:
select name,locks,pins,v.*
from v$db_object_cache v
where locks > 0 and pins > 0 and type='PROCEDURE' and owner = 'HDC_DAG_HRB';
2.查询正在打开的游标:
a.OPEN_CURSOR参数,定义每个Session最大能够打开的游标数量。在init.ora文件中定义,可以通过
select * from v$parameter where name = 'open_cursors'查询。
b.V$OPEN_CURSOR,
在v$open_cursor里面我们可以看到当前打开的cursor和pga内cached cursor.。
c.
session_cached_cursor这个参数限制了在pga内session cursor cache list的长度:
show parameter session_cached_cursors;
我们来把session_cached_cursors修改成1
SQL>alter session set session_cached_cursors=1;
,来看看current open cursor(当前打开游标)和session cached cursor(会话缓存游标数)的数目
SQL> select sid,n.name,s.value used from
sys.v_$statname n,
sys.v_$sesstat s
where
n.name in ('opened cursors current', 'session cursor cache count') and
s.statistic# = n.statistic#
and sid=12;
SID NAME USED
---------- ---------------------------------------------------------------- ----------
12 opened cursors current 1
12 session cursor cache count 0
这两视图说明;
动态性能视图v$mystat,v$sesstat,v$statname学习
为了学习如何得sql产生的redo信息,在网上查询到结果得出需对v$mystat,v$sesstat,v$statname视图进行操作,现在心得写出如下:
1.v$mystat,v$sesstat是用来分别统计会话级别和自实例起动以来数据库各种统计信息的。
两个视图结构一致,只是统计数据不一致。
desc v$mystat;
名称 是否为空? 类型
----------------------------------------------------- -------- ------------------------------------
SID NUMBER
STATISTIC# NUMBER
VALUE NUMBER
SID表示会话编号,与v$session中SID相对应。
STATISTIC# 表示统计项
VALUE 表示统计项相关的值
v$mystat视图中只会有当前用户的会话信息,v$sesstat会有整个实例内所有会话信息。因此在v$sesstat中自然包括v&mystat的统计信息。
2.一般情况下v$mystat,v$sesstat会与v$statname一起配合使用。
SQL> desc v$statname;
Name Type Nullable Default Comments
---------- ------------ -------- ------- --------
STATISTIC# NUMBER Y
NAME VARCHAR2(64) Y
CLASS NUMBER Y
v$statname视图中STATISTIC#与v$mystat,v$sesstat中STATISTIC#字段是相关联的。而NAME则是对应的英文信息,比如说要查某条DML语句所产生的redo信息。可以这样写:
select value from v$mystat t,v$statname t1 where t.STATISTIC# = t1.STATISTIC# and t1.NAME = 'redo size'
其它信息也是如此,只需将t1.name换成相对应的英文名称即可。
select * from v$open_cursor where user_name = 'HDC_DAG_HRB'
3.获得正在运行的sql语句
select sid,pid,b.HASH_VALUE , --通过hash_value可以获得执行计划, ROUND(TO_NUMBER(sysdate - a.PREV_EXEC_START) * 24 * 60 * 60) runtime, sql_fulltext, a.sql_id, SCHEMANAME, dbms_sqltune.extract_binds(b.bind_data) bind, B.Cpu_Time, STATUS, B.SQL_TEXT from V$SESSION a left JOIN V$SQL B ON A.SQL_ADDRESS = B.ADDRESS AND A.SQL_HASH_VALUE = B.HASH_VALUE left join v$process p on a.PADDR=p.addr where a.username is not null and a.status = 'ACTIVE' order by b.cpu_time desc;