【问题标题】:Advantage and PHP - Error 6303: Maximum Advantage Database Server connections exceededAdvantage 和 PHP - 错误 6303:超过最大 Advantage 数据库服务器连接数
【发布时间】: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 扩展吗?

【问题讨论】:

    标签: php advantage-database-server


    【解决方案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 所在的文件夹。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多