0

这是我的第一个问题,我希望它得到很好的解释,所以我可以找到答案。

我在一家交付公司的网站项目中工作,该公司在 Oracle9i 服务器中拥有所有数据。大多数网络用户只想知道他们什么时候能拿到包裹,但我敢肯定还有机器人会每天多次查询这些信息以更新他们的系统。我正在编写代码来阻止这些机器人(例如,在 15 分钟内的第三次查询后要求验证码),因为我们有一些 Web 服务可以用来批量查询所有数据。

现在,我的问题是数据库在高峰时间 12.00-14.00 开始回答非常缓慢。这是我从 Web 应用程序中解析的一些数据。我没有此级别的 Web 服务日志,但那里也有很多查询。

在此处输入图像描述

它显示了我从数据源请求连接时的时间戳、Integer.toHexString(connection.hashCode())、数据源的名称、我关闭连接时的时间戳以及两个时间戳之间的差异。大多数时候查询会在不到一秒的时间内结束,但昨天我有这个奇怪的延迟超过 2 分钟。

数据库上是否允许某种最大连接数,所以当它超过该限制时,数据库将我的查询排队一段时间,然后再试一次?

提前致谢。

4

2 回答 2

2

数据库上是否允许某种最大连接数

是的。

SESSIONS基本的初始化参数之一,

指定系统中可以创建的最大会话数。因为每次登录都需要一个会话,所以该参数有效地确定了系统中的最大并发用户数。

默认值来源于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:超出最大会话数。

很可能有东西在排队你的查询,但它会在你自己的代码中,而不是由 Oracle 指定的。


听起来您应该了解更多信息。如果不是最大会话数,那么您需要捕获需要很长时间的查询并对其进行分析;我认为,这将是更有可能的情况。如果您处于最大会话数,那么您需要查看您的(公司)代码以确定发生了什么。

您还没有真正解释过有关您的应用程序的任何内容,但听起来好像您正在为每个用户打开一个会话(或更多)。您可能需要重新考虑这是否是正确的方法。

于 2013-08-22T12:14:01.077 回答
0

感谢您的编辑vape。

我也发现了真正的问题。我有一种方法要求连接到同步的数据源,并且在高峰时间请求连接时会导致锁定。我已将其删除,一切正常。

于 2013-12-31T10:35:22.517 回答