将V$SESSION 和V$SQLTEXT 连接就可以显示目前每一个会话正在执行的SQL 语句,如下面的程序清单
所示。这在有些时候是极为有用的,例如DBA 希望查看某一个给定的时间点上系统究竟执行了哪些操作。
select a.sid, a.username, s.sql_text
from v$session a, v$sqltext s
where a.sql_address = s.address
and a.sql_hash_value = s.hash_value
order by a.username, a.sid, s.piece;
SID USERNAME SQL_TEXT
--- ---------- ------------------------------------
11 PLSQL_USER update s_employee set salary = 10000
9 SYS select a.sid, a.username, s.sql_text
9 SYS from v$session a, v$sqltext
9 SYS where a.sql_address = s.address
9 SYS and a.sql_hash_value = s.hash_value
9 SYS order by a.username, a.sid, s.piece
(...partial output listing)
SQL_TEXT 列显示了整个SQL 语句,但整个语句在V$SQLTEXT 视图中是作为VARCHAR2(64)数据类型来
存储的,所以跨越了多条记录。PIECE 列用于对语句排序。为了查看每个用户所使用的资源,可以直接使
用下面程序清单中的查询。这个语句的目标是显示每个会话的物理磁盘命中率和内存命中率。这就非常容
易发现哪些用户执行了大量的物理磁盘和内存读操作。
select a.username, b.block_gets, b.consistent_gets,
b.physical_reads, b.block_changes, b.consistent_changes
from v$session a, v$sess_io b
where a.sid = b.sid
order by a.username;
USERNAME BLOCK_GETS CONSISTENT_GETS PHYSICAL_READS BLOCK_ CHANGES
CONSISTENT_CHANGES
---------- ---------- --------------- -------------- -------------- ---------
PLSQL_USER 39 72 11 53 1
SCOTT 11 53 12 0 0
SYS 14 409 26 0 0
SYSTEM 8340 10197 291 2558 419
技巧:
通过查询V$SESSION、V$SQLTEXT 和V$SESS_IO 可发现有问题的用户,并可发现一个给定
的时间点上他们在执行什么操作。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25198367/viewspace-707590/
,如需转载,请注明出处,否则将追究法律责任。