Advantage 和 PHP - 错误 6303:超过最大 Advantage 数据库服务器连接数

Posted

技术标签:

【中文标题】Advantage 和 PHP - 错误 6303:超过最大 Advantage 数据库服务器连接数【英文标题】:Advantage and PHP - Error 6303: Maximum Advantage Database Server connections exceeded 【发布时间】:2012-01-24 09:43:39 【问题描述】:

我公司的 php 网站连接到 Advantage 数据库服务器,其中存储了所有必要的数据,例如用户、密码和客户注册表。

最近我们开始收到请求网页的错误:

警告:SQL 错误:[扩展系统][Adv​​antage SQL][ASA] 错误 6303:超出最大 Advantage 数据库服务器连接数。 axServerConnect,SQLDriverConnect中的SQL状态HY000在C:\...\www\...上线...

它变得越来越重要,它可能每周发生一次或每天发生两次而没有明显的原因。

当网站崩溃时,数据库服务仍然可以与连接的其他应用程序一起正常工作,恢复 Web 服务的唯一方法是重新启动 apache Web 服务器。

在数据库服务器上,我们在 C:\Windows 文件夹中有 ads.ini 配置文件,我们在该文件夹中使用“MAX_CONNECTIONS=1000”提出了最大连接设置,这与我们的需求相比确实很大。

如果我们也设置“RETRY_ADS_CONNECTS = 1”会有用吗??

我在 2009 年 5 月发现了 R&D 确认存在错误的帖子:

Is this a bug with Advantage Database?

这个问题解决了吗?在哪个版本?

在哪里可以看到 apache 在 db 上打开的真实连接数?

每个php页面在页脚关闭广告连接,什么会导致连接超出?

提前感谢您的帮助。

- 环境信息

数据库: Windows 2003 服务器上的 Advantage Database Server 10.10.0.6

网络服务器: Apache/2.0.59 (Win32) mod_ssl/2.0.59 OpenSSL/0.9.8d PHP/4.4.7 on Windows XP pro

在 phpinfo() 页面上,我们得到“Advantage Version”“8.00.0.0”。 为什么这个?我们需要升级 php-advantage 扩展吗?

【问题讨论】:

【参考方案1】:

很多问题,但我会尽力解决每个问题。

1) 6303 错误。使用 MAX_CONNECTIONS 是解决此问题的正确方法。 确保 MAX_CONNECTIONS 在 [SETTINGS] 部分 检查 Apache / PHP / ADS 驱动程序是否使用正确的 ads.ini 文件。您可以使用 Sysinternals 的 Process Monitor 查看哪些 ads.ini 文件已成功打开。如果你升级你的 PHP 驱动,你可以设置一个环境变量 adsini_path 指向 ads.ini 所在的目录。

2) 设置 RETRY_ADS_CONNECTS=1 会有所帮助。这也属于 ads.ini 的 [SETTINGS] 部分。当 ADS 客户端收到网络错误(通常是 6000 类错误)时,客户端驱动程序会缓存该错误,随后的连接尝试将使用缓存的错误而不是重试。设置 RETRY_ADS_CONNECTS 将告诉 ADS 客户端忽略缓存的错误并重试连接

3) 错误:根据http://devzone.advantagedatabase.com 上的发行说明,该问题似乎已在驱动程序的 9.10.0.9 版本中得到修复。

修复了垃圾收集引用计数在 如果打开多个 SQL 语句,连接将不正确 就可以了。

由于您运行的是 10.1 服务器,您可能会考虑更新到 10.1 客户端,该客户端也将包含该修复程序。 10.1 Advantage PHP Driver

4)查看实际连接数 我建议使用存储过程 sp_mgGetConnectedUsers,您可以使用 ARC(Advantage Data Architect),但可能难以分组、排序等。 由于您使用的是 10.1,因此您可以在查询中包含存储过程的结果,例如

SELECT COUNT(*) FROM (EXECUTE PROCEDURE sp_mgGetConnectedUsers()) u WHERE ADDRESS='xxx.xxx.xxx.xxx'

您还可以使用其他字段来标识 PHP 应用程序,例如 UserName(服务器名称)、DictionaryUser(假设 php 应用程序使用唯一用户)、ApplicationID

5) PHPINFO 显示 Advantage PHP 客户端驱动程序的 Advantage 版本。出于上述原因,您可能想要升级客户端驱动程序。应该像交换 DLL 文件(ace32.dll、axces32.dll、adsodbc.dll 和 php_advantage.dll)一样简单,但我建议先进行测试以确保获得所有内容。

【讨论】:

拜托,你能再帮我们一次吗?我安装了进程监视器,但我只看到 .dll 文件而不是 .ini - 我应该在哪里更改 MAX_CONNECTIONS 编号? 您可以尝试将 ads.ini 放在您的 php 目录或 windows 或 windows\system32 文件夹中。如果您升级了 php 驱动程序,您可以设置系统环境变量 adsini_path 指向 ads.ini 所在的文件夹。

以上是关于Advantage 和 PHP - 错误 6303:超过最大 Advantage 数据库服务器连接数的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 上使用 PHP 连接到 Advantage 数据库

如何使用 Advantage PHP Extension 获取行数?

Windows 服务中的 Advantage 数据提供程序错误 6097

Advantage Database Server 10 错误 5211 - 转换 Unicode 字符串时出错

Advantage 扩展程序 - 创建和安装

检查 Advantage 数据库连接的运行状况