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

Advantage和PHP-错误6303:超过最大Advantage数据库服务器连接数,php,advantage-database-server,Php,Advantage Database Server,我公司的php网站连接到Advantage数据库服务器,其中存储了所有必要的数据,如用户、密码和客户注册表 最近,我们开始在请求网页时出错: 警告:SQL错误:[扩展系统][Advantage SQL][ASA]错误6303:超出最大Advantage数据库服务器连接数。axServerConnect,SQL状态HY000在C:\…\www\。。。在线 这种情况一天比一天严重,可能一周发生一次或一天两次,而且没有明显的原因 当网站崩溃时,数据库服务与其他连接的应用程序仍能正常工作,恢复web服务

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

最近,我们开始在请求网页时出错:

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

这种情况一天比一天严重,可能一周发生一次或一天两次,而且没有明显的原因

当网站崩溃时,数据库服务与其他连接的应用程序仍能正常工作,恢复web服务的唯一方法是重新启动ApacheWeb服务器

在数据库服务器上,我们在C:\Windows文件夹中设置了ads.ini配置文件,在该文件夹中,我们使用“max_connections=1000”设置了最大连接数,这与我们的需要相比是非常大的

如果我们还设置了“RETRY\u ADS\u CONNECTS=1”,它会有用吗

我在2009年5月的一篇文章中发现了研发部门确认的一个bug:

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

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

每个php页面关闭页脚上的广告连接,什么会导致连接超过

提前谢谢你的帮助

- 环境信息

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

Web服务器: Windows XP pro上的Apache/2.0.59(Win32)mod_ssl/2.0.59 OpenSSL/0.9.8d PHP/4.4.7

在phpinfo()页面上,我们可以看到“Advantage Version”“8.00.0.0”。
为什么会这样?我们需要升级php advantage extension吗

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

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

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

3) Bug:看起来这是在9.10.0.9版本的驱动程序中根据上的发行说明修复的

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

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

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

SELECT COUNT(*) FROM (EXECUTE PROCEDURE sp_mgGetConnectedUsers()) u WHERE ADDRESS='xxx.xxx.xxx.xxx'
您还可以使用其他字段来标识PHP应用程序,例如用户名(服务器名称)、字典(假设PHP应用程序使用唯一的用户)、ApplicationID


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

请再次帮助我们好吗?我安装了process monitor,但只看到了.dll文件而没有.ini-我应该在哪里更改MAX_连接数?您可以尝试将ads.ini放在php目录或windows或windows\system32文件夹中。如果升级了php驱动程序,可以设置系统环境变量adsini_path,以指向ads.ini所在的文件夹。