这是我的第一个问题,我希望它得到很好的解释,所以我可以找到答案。
我在一个交付公司的网站项目中工作,该公司拥有Oracle9i服务器中的所有数据。 大多数网络用户只是想知道他们何时会获得他们的包裹,但我确信还有机器人每天多次查询该信息以更新他们的系统。 我正在制作一个代码来阻止这些机器人(例如,在第三次查询之后要求使用验证码,例如15分钟),因为我们有一些Web服务可以用来批量查询所有数据。
现在,我的问题是数据库开始回答非常慢的高峰时间12.00-14.00。 这是我从Web应用程序解析的一些数据。我没有这个级别的Web服务日志,但那里也有很多查询。
它显示我从数据源请求连接时的时间戳,Integer.toHexString(connection.hashCode()),数据源的名称,关闭连接时的时间戳以及两个时间戳之间的差异。 大多数情况下,查询在不到一秒的时间内结束,但昨天我有超过2分钟的奇怪延迟。
数据库上是否允许某种最大连接数,因此当超过该限制时,数据库会在重新尝试之前将查询排队一段时间?
提前致谢。
答案 0 :(得分:2)
数据库中是否允许某种最大连接数
是
SESSIONS是basic initialization parameters和
之一指定可在其中创建的最大会话数 系统。因为每次登录都需要一个会话,这个参数 有效地确定了最大并发用户数 系统
默认值来自PROCESSES参数(1.5倍加22);因此,如果您未更改PROCESSES参数(默认值为100),则数据库的最大会话数将为172。
您可以通过查询V$PARAMETER
来确定值:
SQL> select value
2 from v$parameter
3 where name = 'sessions';
VALUE
--------------------------------
480
所以当它超过该限制时,数据库会在重新尝试之前将我的查询排队一段时间吗?
没有
当您尝试超过SESSIONS参数的值时,将引发异常ORA-00018: maximum number of sessions exceeded。
有些东西可能正在排队查询,但它会在您自己的代码中,而不是由Oracle指定。
听起来好像你应该找到更多信息。如果没有达到最大会话数,那么您需要捕获花费很长时间并对其进行分析的查询;我认为这将是更可能出现的情况。如果您达到最大会话数,那么您需要查看您的(公司)代码以确定发生了什么。
您还没有真正解释过您的应用程序,但听起来好像您正在为每个用户打开一个会话(或更多)。您可能想重新考虑这是否是正确的方法。
答案 1 :(得分:0)
感谢编辑vape。
我也发现了真正的问题。 我有一个方法,要求连接到数据源同步,并在高峰时间请求连接时导致锁定。我把它删除了,一切正常。