我在IIS 7上托管了一个Web应用程序,使用Oracle.DataAcess.dll for .NET来执行与Oracle数据库的连接和查询。 在上周,我们突然遇到了这个组件抛出的大量错误,说:"连接请求超时。"。
经过几个小时的调试后,我发现错误实际上是说连接请求超时,并抛出一个错误代码:-1000(oracle.DataAccess,没有抛出ORA-错误)。 在Oracle数据库中,我看到该机器只有一个连接,而且它位于“非活动”状态。州。 虽然只有一个连接,但在调试时它实际上在尝试打开连接时超时。
我们不使用连接池策略,但正如我在调试模式中看到的那样,默认连接池(即使没有指定值)表示最大连接数为100,超时为15秒,并且生命周期为0.这意味着该计算机上的应用程序可以处理100个连接。
话虽如此,我无法弄清楚为什么我的“连接请求超时”。"错误,错误代码= -1000,当我的应用程序最多可以创建100个连接时(根据默认连接池的设置),但我的数据库只显示少量连接(当我的应用程序有一个连接时也发生了5个连接 - 满分100)。
我会注意到我能够在回收我的应用程序之后专门解决这个问题,但这已经发生了不止一次所以这不是解决方案...
这是我失踪的东西吗?
我的应用程序实际上是否使用了比我看到的更多的连接?
*更新: 我在调试过程中发现,在PopulatePool' Oracle.DataAccess的方法以及许多其他线程都停留在' WaitForRegularConnection'方法...
答案 0 :(得分:0)
注意Oracle调用,发送执行的查询,连接超时不依赖于连接池最大计数,永久地您的请求服务于一个连接。记录您的请求,然后尝试模拟它们,检查数据库中的执行持续时间。
答案 1 :(得分:0)
您的体验可能是由于某种原因导致服务器负载过大,导致处理新查询需要花费太多时间。
如果可以,请查看服务器的加载日志,以查看在遇到超时时可能发生的情况。如果您只使用服务器(更好的选择)托管此数据库,请参阅第二个选项
您的应用程序也可能使用缓慢过度拥挤SGA的程序包,并且由于会话未被撤销,因此保留了太多资源。所以一个解决方案是跟踪这个"持久的"会议,看看它想要做什么。