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

session

原文作者:John Weeg

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

你是谁?

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

Select sid from v$mystat where rownum=1;

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

select sid,machine,osuser,module from v$session where username='JOHN';

   SID MACHINE              OSUSER                         MODULE
----- -------------------- ------------------------------ ----------
  150 MSHOME\JOHN-LAPTOP   John?Weeg                      SQL*Plus

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

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

break on sid skip 1
column sid format 99999
column sql_text form a64

select a.sid, a.last_call_et ,b.sql_text
from v$session a
    ,v$sqltext b
where a.username is not null
and   a.status = 'ACTIVE'
and   a.sql_address = b.address
order by a.last_call_et,a.sid,b.piece;

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

因些,接着应做什么?

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

Column event format a30
Column sid format 9999
Column session_cpu heading "CPU|used"
Column physical_reads heading "physical|reads"
Column consistent_gets heading "logical|reads"
Column seconds_in_wait heading "seconds|waiting"

select a.sid, a.value session_cpu, c.physical_reads,
c.consistent_gets,d.event,d.seconds_in_wait
from v$sesstat a,v$statname b, v$sess_io c, v$session_wait d
where a.sid=150
and b.name = 'CPU used by this session'
and a.statistic# = b.statistic#
and a.sid=c.sid
and a.sid=d.sid;

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

      CPU  physical  logical                                   seconds
SID  used     reads    reads EVENT                             waiting
--- ----- --------- -------- ------------------------------ ----------
150  1159         0   117476 SQL*Net message from client             5

/

      CPU  physical  logical                                   seconds
SID  used     reads    reads EVENT                             waiting
--- ----- --------- -------- ------------------------------ ----------
150  1970         0   204484 SQL*Net message from client             4

因些我们可以看到这个会话在我们检查时正在等待客户端的信息。在我们两次检查的期间它执行了逻辑读的操作并消耗了CPU资源,这说明会话运行是正常的。

什么情况下我们需要进一步检查?

通常有这么几个事件(event)标识潜在存在问题:'buffer busy waits','db file sequential read','db file scattered read','free buffer waits','latch free',对于前4上事件,我们可以找出相关的是哪个对象,如下语句:

select owner,segment_name,segment_type
from (select p1 file#, p2 block# from  v$session_wait
      where sid = 150
      and event in ('buffer busy waits'
                   ,'db file sequential read'
                   ,'db file scattered read'
                   ,'free buffer waits')) b
,dba_extents a
where a.file_id = b.file#
and   b.block# between a.block_id and (a.block_id+blocks-1);

这里我们能够发现IO等待是由于大量的数据访问引起的,还是由有些东西不对比如索引丢失引起的,我们也可以去掉SID子句那行找出那些正在经历等待的对象。

对于最后一个潜在的问题我们可以查正在等待什么栓(latch):

select name
from (select p2 latch# from  v$session_wait
      where sid = 150
      and event in ('latch free')) b
,v$latchname a
where a.latch# = b.latch#;

我们可以看到是不是会话经历栓的冲突,这个冲突是不是经常发生的

使你的用户轻松下来

因此,你现在要可以告诉那些不安的用户他们执行的语句在等待一些其它的资源。我最终的做法是帮助他们优化那些语句,以使语句不至于执行得太慢使用户不安。

(全文完)

时间: 2024-11-16 17:21:53

我的会话(session)在做什么?的相关文章

简单PHP会话(session)说明介绍_php实例

现在程序员愈发的不容易了,想要精通,必然要寻本溯源,这其实与目前泛滥的愈发高级的语言以及众多的框架刚好相反,因为它们在尽可能的掩盖本源使其简单,个人称之为程序员学习悖论. 注:作者接触web开发和php两周左右,以下内容适合初学者. 1.导读 从文题目看,<简单PHP会话(Session)说明> 是已经圈定了本文的内容范围,试图阐明Session(文中对会话称为Session) 在PHP语言中是如何实现以及使用的,重点在于基本理解后的使用. 文章思路是首先搞清楚session是什么东西,Ses

简单PHP会话(session)说明介绍

现在程序员愈发的不容易了,想要精通,必然要寻本溯源,这其实与目前泛滥的愈发高级的语言以及众多的框架刚好相反,因为它们在尽可能的掩盖本源使其简单,个人称之为程序员学习悖论. 注:作者接触web开发和php两周左右,以下内容适合初学者. 1.导读 从文题目看,<简单PHP会话(Session)说明> 是已经圈定了本文的内容范围,试图阐明Session(文中对会话称为Session) 在PHP语言中是如何实现以及使用的,重点在于基本理解后的使用. 文章思路是首先搞清楚session是什么东西,Ses

WebService大讲堂之Axis2(6):跨服务会话(Session)管理

在<WebService大讲堂之Axis2(5):会话(Session)管理>一文中介绍了如何使用Axis2来管理同一 个服务的会话,但对于一个复杂的系统,不可能只有一个WebService服务,例如,至少会有一个管理用户 的WebService(用户登录和注册)以及处理业务的WebService.象这种情况,就必须在多个WebService服 务之间共享会话状态,也称为跨服务会话(Session)管理.实现跨服务会话管理与实现同一个服务的会话 管理的步骤类似,但仍然有一些差别,实现跨服务会话

会话session在servlet中和tcp会话中指的含义相同么

问题描述 会话session在servlet中和tcp会话中指的含义相同么 最近看servlet,里面用HttpSession来新建会话,这个session和网络说的tcp会话不是一个含义吧.感觉只要使用http就必然是一个tcp会话,而servlet里的session是要自己建立的,并可以选择不建.另外,说tcp会话的握手啊,创建和关闭什么的在javaweb中有没有体现啊,是不是就不在一个网络层中的事.servlet中的session一旦浏览器关闭就自动关闭了,cookie里的sessioni

使用PHP会话(Session)实现用户登陆功能

对比起 Cookie,Session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,本文简单介绍 Session 的使用. 由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容.实际上在服务器端的 Session 文件,PHP 自动修改 Session 文件的权限,只保留了系统读和写权限,而且不能通过 ftp 修改,所以安全得多. 对 于 Cookie 来说,假设我们要验证用户是否登陆,就必须在 Cookie 中保存用户

PHP 会话 (Session) 使用入门

session 对比起 Cookie,Session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,本文简单介绍 Session 的使用. 由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容.实际上在服务器端的 Session 文件,PHP 自动修改 Session 文件的权限,只保留了系统读和写权限,而且不能通过 ftp 修改,所以安全得多. 对于 Cookie 来说,假设我们要验证用户是否登陆,就必须在 Cooki

比较全的PHP 会话(session 时间设定)使用入门代码_php技巧

  对于 Cookie 来说,假设我们要验证用户是否登陆,就必须在 Cookie 中保存用户名和密码(可能是 md5 加密后字符串),并在每次请求页面的时候进行验证.如果用户名和密码存储在数据库,每次都要执行一次数据库查询,给数据库造成多余的负担.因为我们并不能 只做一次验证.为什么呢?因为客户端 Cookie 中的信息是有可能被修改的.假如你存储 $admin 变量来表示用户是否登陆,$admin 为 true 的时候表示登陆,为 false 的时候表示未登录,在第一次通过验证后将 $admi

推荐学习php sesson的朋友必看PHP会话(Session)使用入门第1/2页_php技巧

 由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容.实际上在服务器端的 Session 文件,PHP 自动修改 Session 文件的权限,只保留了系统读和写权限,而且不能通过 ftp 修改,所以安全得多. 对于 Cookie 来说,假设我们要验证用户是否登陆,就必须在 Cookie 中保存用户名和密码(可能是 md5 加密后字符串),并在每次请求页面的时候进行验证.如果用户名和密码存储在数据库,每次都要执行一次数据库查询,给数据库造成多余的负担.

使用PHP会话(Session)实现用户登陆功能_php技巧

对比起 Cookie,Session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,本文简单介绍 Session 的使用. 由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容.实际上在服务器端的 Session 文件,PHP 自动修改 Session 文件的权限,只保留了系统读和写权限,而且不能通过 ftp 修改,所以安全得多. 对于 Cookie 来说,假设我们要验证用户是否登陆,就必须在 Cookie 中保存用户名