很多时候数据库在生产过程中,会有大量的会话在运行。那么每个会话所执行的SQL语句,我们也可以通过v$SESSION、v$SQLTEXT、v$SESS_IO结合来分析。当DBA试图确定某一时刻系统中发生着什么时候,相关视图的运用极为重要。
以下给大家讲解一下如何检查Oracle用户当前操作以及使用资源情况。
一 模拟用户操作并观察其使用资源情况
1.1 测试环境:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
Oracle Linux Server release 6.4。
1.2 模拟用户插入数据并通过v$session/v$sqltext结合查看。
当前通过scott用户向t2表插入mytest表的10万条数据:
SQL> insert into t2 select * from mytest;
100000 rows created.
用DBA用户通过以下命令进行查看:
SQL> col username format a5
SQL> col sql_text format a20
SQL> select a.sid, a.username, s.sql_text
2 from v$session a, v$sqltext s
3 where a.sql_address = s.address
4 and a.sql_hash_value = s.hash_value and username is not null
5 order by a.username, a.sid, s.piece;
SID USERN SQL_TEXT
---------- ----- --------------------
49 SCOTT insert into t2 selec
t * from mytest
43 SYS select a.sid, a.user
name, s.sql_text fro
m v$session a, v$sql
text
43 SYS s where a.sql_addre
ss = s.address and a
.sql_hash_value = s.
SID USERN SQL_TEXT
---------- ----- --------------------
hash
43 SYS _value and username
is not null order by
a.username, a.sid,
s.pi
43 SYS ece
通过该语句:我们可以看到当前SCOTT正在运行的SQL_TEXT语句为:
insert into t2 select * from mytest;
1.3 查看用户使用资源情况:
为了查看每个用户使用资源情况,可以通过以下语句查询,该语句目标是为了强调每个会话中的物理磁盘命中次数和内存命中次数,这就非常容易确认哪些用户正在运行着大量的物理磁盘读和内存读。
SQL> select a.username, b.block_gets, b.consistent_gets,
2 b.physical_reads, b.block_changes, b.consistent_changes
3 from v$session a, v$sess_io b
4 where a.sid = b.sid and username is not null
5 order by a.username;
USERN BLOCK_GETS CONSISTENT_GETS PHYSICAL_READS BLOCK_CHANGES CONSISTENT_CHANGES
----- ---------- --------------- -------------- ------------- ------------------
SCOTT 20144 14483 1064 15845 19
SYS 0 1229 29 0 0
SYS 0 3 0 0 0
1.4 总结
通过查询V$SESSION、V$SQL_TEXT和V$SESS_IO可以发现有问题的用户,并可发现在给定的时间点上他们正在执行着什么操作。