我公司的php网站连接到Advantage Database Server,其中存储了所有必要的数据,如用户,密码和客户注册表。
最近我们开始收到请求网页的错误:
警告:SQL错误:[扩展系统] [Advantage SQL] [ASA]错误6303:超出了最大Advantage数据库服务器连接。 axServerConnect,SQL中的SQL状态HY000在C:\ ... \ www \ ...中的SQLDriverConnect ... ...
它日复一日变得越来越重要,它可能每周发生一次或每天发生两次,没有明显的原因。
当网站崩溃时,数据库服务仍然可以与其他连接的应用程序配合使用,恢复Web服务的唯一方法是重启apache web服务器。
在数据库服务器上,我们在C:\ Windows文件夹中有ads.ini配置文件,其中我们使用“MAX_CONNECTIONS = 1000”引发了最大连接设置,这与我们的需求相比非常大。
如果我们也设置“RETRY_ADS_CONNECTS = 1”??
,它会有用吗?我发现这篇文章是R& D在2009年5月确认了一个错误:
这是否已修复?什么发布?
在哪里可以看到db上apache打开的实际连接数?
每个php页面都会在页脚上关闭广告连接,什么会导致连接超过?
提前感谢您的帮助。
- 环境信息
数据库: Windows 2003服务器上的Advantage Database Server 10.10.0.6
网络服务器: Windows XP专业版的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扩展吗?
答案 0 :(得分:2)
很多问题,但我会尝试解决每个问题。
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)一样简单,但我建议先测试以确保获得所有内容。