Oracle中的非活动会话

时间:2014-10-12 09:29:42

标签: oracle oracle11g oracle-sqldeveloper database-administration

我想问一个问题:

这是我的环境:

  • Solaris Version 10; Sun OS版本5.10
  • Oracle版:11g Enterprise x64 Edition。

当我运行此查询时:

select c.owner, c.object_name, c.object_type,b.sid, b.serial#, b.status, b.osuser, b.machine 
  from v$locked_object a , v$session b, dba_objects c 
 where b.sid = a.session_id 
  and a.object_id = c.object_id;

有时我会获得许多状态'INACTIVE'

这种不活跃意味着什么? 这会使我的数据库和应用程序变慢吗? 活动和非活动状态有什么影响?

4 个答案:

答案 0 :(得分:1)

  

这种不活跃意味着什么?

在oracle可执行文件执行read以获取它应为其会话执行的下一个“命令”之前,它会将其会话的状态设置为INACTIVEread完成后,会将其设置为ACTIVE。它将保持该状态,直到完成所请求的工作。然后它将重新做整件事。

  

这会使我的数据库和应用程序变慢吗?

不一定。查看最后一个问题的答案。

  

活动和非活动状态有什么影响?

大量会话(主动或非主动)的后果在两个方面都很重要。

首先是如果数字单调递增,这将导致人们调查应用程序泄漏连接的可能性。我相信这种灾难并非如此,否则你会特意提到它。

第二个,其中数字在声明的上限内波动,更有可能。根据{{​​3}}和Andrew Holdsworth的其他重要成员的说法,一些架构师在应用程序的连接池中允许太多连接,并且它们表明当它太高时会发生什么(响应时间和可用性后果)。他们还有一个处方,可以更好地定义连接池的属性和行为。

他们的论点的实质是通过允许池中的大量连接,允许它们同时忙碌。数据库服务器可能必须在排队等级较低的资源(如磁盘,CPU,网络,甚至其他类似的队列)中扮演主要角色,而不是让应用程序层队列事务处理。

即使所有会话都忙着很短的时间并且他们争夺各种资源,争论也是浪费的,可能会反复重复。花更多时间设计良好的用户体验排队模型更有意义,这样您就不会浪费资源到架构中最昂贵的(硬件和软件许可证)层。

答案 1 :(得分:0)

ACTIVE表示会话当前正在执行某些SQL操作,而INACTIVE表示相反。查看ORACLE v$session documentation

本质上,大量ACTIVE个会话会降低整个DBMS的速度,包括您的应用程序。在多大程度上很难说 - 在这里你必须看看IO,CPU等负载。

除非您超过最大会话数,否则非活动会话的影响很小。

答案 2 :(得分:0)

简单来说,v $ session中的INACTIVE状态表示在您检入v $ session时没有执行任何SQL语句。

另一方面,如果您看到很多非活动会话,请首先检查每个会话的last activity time

我怀疑他们可能是connection pool的一部分,因此他们可能会经常使用。你不应该担心它,因为从application connection的角度来看,连接池会处理它。您可能会在相当长的时间内看到此类INACTIVE个会话。

答案 3 :(得分:0)

根本没有暗示D / B很慢。

状态INACTIVE表示会话现在不执行任何查询。 ACTIVE表示它正在执行查询。