您的位置:首页 > 其它

我的会话(session)在做什么?

2008-04-27 20:06 274 查看
原文作者:JohnWeeg

当一个用户坐在的终端前的提交了一个查询却等不出结果,这很是让人恢心的。他们很希望语句运行正常,但他们却不知道实际上是怎么样的。因些让我们找出一个办法来消除他们的担心。

你是谁?

第一个问题当然指的是我们正在提及的是哪个会话?用户可以在做其它事情前用如下的语句得它:

Selectsidfromv$mystatwhererownum=1;

实际上,直到你提交的语句运行很正常时这个问题才不会被提出,如果用户有一个唯一的用户名,那么你可以用如下语句得到那个SID,比如查用户JOHN的SID.

selectsid,machine,osuser,modulefromv$sessionwhereusername='JOHN';

SIDMACHINE OSUSER MODULE
-----------------------------------------------------------------
150MSHOME/JOHN-LAPTOP John?Weeg SQL*Plus

我用其它的一些信息校验这恰恰是我的会话

糟糕一点的是共享用户名被使用的状况,因些我们将需要看一下哪些会话正在运行:

breakonsidskip1
columnsidformat99999
columnsql_textforma64

selecta.sid,a.last_call_et,b.sql_text
fromv$sessiona
,v$sqltextb
wherea.usernameisnotnull
and a.status='ACTIVE'
and a.sql_address=b.address
orderbya.last_call_et,a.sid,b.piece;

这给出了我们正在目前正在运行的语句和多长时间,你应该就能能够看出哪一个会话你需要检查一下。

因些,接着应做什么

我们知道通常在语句执行这段时间伴随着等待,正在执行CPU操作,或正在执行IO操作。通过v$sessstat,v$sessio,v$session_wait这三张表我们可以得到我们想知道的一些信息,可以通过SID去单查我们观注的一个表,但我发现很被容易把这些信息结合在一起。

Columneventformata30
Columnsidformat9999
Columnsession_cpuheading"CPU|used"
Columnphysical_readsheading"physical|reads"
Columnconsistent_getsheading"logical|reads"
Columnseconds_in_waitheading"seconds|waiting"

selecta.sid,a.valuesession_cpu,c.physical_reads,
c.consistent_gets,d.event,d.seconds_in_wait
fromv$sesstata,v$statnameb,v$sess_ioc,v$session_waitd
wherea.sid=150
andb.name='CPUusedbythissession'
anda.statistic#=b.statistic#
anda.sid=c.sid
anda.sid=d.sid;

我执行这个语句几次,因为我们需要找出哪些项在变化。

CPU physical logical seconds
SID used reads readsEVENT waiting
-----------------------------------------------------------------
150 1159 0 117476SQL*Netmessagefromclient 51
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: