我想问一个问题:
这是我的环境:
当我运行此查询时:
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'
。
这种不活跃意味着什么? 这会使我的数据库和应用程序变慢吗? 活动和非活动状态有什么影响?
答案 0 :(得分:1)
这种不活跃意味着什么?
在oracle可执行文件执行read
以获取它应为其会话执行的下一个“命令”之前,它会将其会话的状态设置为INACTIVE
。 read
完成后,会将其设置为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表示它正在执行查询。