5

首先,我想告诉您,我正在使用的程序已经编译,我无法查看源代码。

所以,这是我的问题:

应用程序成功打开了大约 31 个与特定数据库的连接。当它尝试打开第 32 个连接时,所有连接都开始关闭,包括之前的 31 个连接。

老实说,我不知道为什么这个应用程序需要对同一个 2-3 个表打开这么多连接,但是在所有连接关闭之后,应用程序也会关闭。

17:41:38 004db680 驱动程序={SQL Server};服务器=192.168.1.8:1433;UID=用户;密码=密码;数据库=数据库

17:41:38 004db680 08001 0000000e [Microsoft][ODBC SQL Server Driver][DBNETLIB]无效连接。0x00000000 17:41:38 004db680 01000 0000000e [Microsoft][ODBC SQL Server 驱动程序][DBNETLIB]ConnectionOpen (ParseConnectParams())。0x00000000

那是该应用程序的日志输出。

一些附加信息:

  • 禁用 SYN 攻击保护的同样问题
  • 数据库最大连接数为 30k+
4

2 回答 2

1

在您的数据库上运行此语句以查看您是否超过了最大连接数:

SELECT @@MAX_CONNECTIONS

于 2012-11-16T04:46:39.963 回答
0

有几件事浮现在脑海

  1. 在应用程序执行之前和期间运行 SQL Profiler。你看到什么输出?也许发生了死锁?

  2. 这以前是否有效并且最近停止工作?如果是这样,您是否对 SQL 应用了服务包或其他修复程序?

  3. 如果您的应用程序是多线程的,并且每个线程执行 X 次连接,则可以尝试将应用程序限制为在单个内核而不是多个内核上运行。这是一个肮脏的黑客,但它可能会有所帮助。

  4. 如果您打开 32 个命令提示符窗口,然后使用 osql 或 sqlcmd 实用程序打开 32 个到 SQL 的连接会怎样?听起来很傻,但如果以上没有结果,至少你可以看看它是否仅仅是连接的数量,或者是否还有其他事情正在进行中。其他东西可能是

    • 数据相关(见#1);或者
    • 驱动程序相关(在应用程序内)。鉴于它使用的是 ODBC,而且它可能很旧(您没有说正在运行什么 Windows 版本、SQL 版本等),您可以尝试更新 MDAC(MIcrosoft 数据访问组件)吗?
于 2012-11-16T06:07:42.290 回答