Oracle中的非活动会话

Oracle中的非活动会话,oracle,oracle11g,oracle-sqldeveloper,database-administration,Oracle,Oracle11g,Oracle Sqldeveloper,Database Administration,我想问一个问题: 这是我的环境: Solaris版本10;Sun操作系统版本5.10 Oracle版本:11g Enterprise x64版 运行此查询时: 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.se

我想问一个问题:

这是我的环境:

  • Solaris版本10;Sun操作系统版本5.10
  • Oracle版本:11g Enterprise x64版
运行此查询时:

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;
有时我会得到许多状态为
“非活动”

这是什么意思? 这会使我的数据库和应用程序变慢吗?
活动和非活动状态的影响是什么?

active
表示会话当前正在执行一些SQL操作,而
inactive
表示相反。查看

本质上,大量的
活动
会话会降低整个DBMS(包括应用程序)的速度。到什么程度是很难说的-这里你必须看看IO、CPU等负载


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

简单地说,v$session中的
INACTIVE
状态表示在签入v$session时没有执行SQL语句

另一方面,如果您看到大量非活动会话,则首先检查每个会话的上次活动时间


我怀疑的是,它们可能是
连接池的一部分,因此可能会被频繁使用。您不必担心它,因为从
应用程序连接的角度来看,连接池会处理它。您可能会在相当长的一段时间内看到这样的
非活动的
会话。

这并不意味着D/B是慢的

Status INACTIVE表示会话现在不执行任何查询。 活动表示它正在执行查询

这是什么意思

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

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

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

活动和非活动状态的影响是什么

大量会话(活动或非活动)的后果有两个方面

第一种情况是,如果这个数字是单调递增的,这将导致人们调查应用程序正在泄漏连接的可能性。我相信这样的灾难不会发生,否则你会特别提到的

第二种情况更可能发生,即数字在公布的上限内波动。根据和的其他知名成员的说法,一些架构师允许应用程序的连接池中存在太多的连接,他们演示了当连接池太高时会发生什么(响应时间和可用性后果)。他们还提供了如何更好地定义连接池的属性和行为的方法

他们论点的实质是,通过允许池中有大量连接,您可以让它们同时都很忙。数据库服务器可能必须在排队等待底层资源(如磁盘、CPU、网络,甚至排队等)时扮演主要角色,而不是让应用层队列事务

即使所有会话只在短时间内忙碌,并且它们正在争夺各种资源,争用也是浪费的,并且可能会一次又一次地重复。花额外的时间设计一个好的用户体验排队模型更为合理,这样您就不会在体系结构中无疑是最昂贵的(硬件和软件许可证)层上浪费资源