我正在开发一个PHP对话系统与Microsoft SQL Server 2008进行通信的项目,我需要更快的PHP方面。
在分析我的PHP脚本之后,我发现在该特定系统上调用mssql_connect()需要大约200毫秒。对于一些简单的对话框,这大约是整个脚本运行时的60%。因此,我可以通过加快此次通话来获得巨大的性能提升。
我已经确定只为我的PHP脚本的每个请求生成一个单独的连接句柄。
有没有办法加快与SQL Server的初始连接?但是有一些限制:
答案 0 :(得分:3)
嗯。我对MS SQL了解不多,但优化单个调用可能很困难。
我想到的一件事是尝试mssql_pconnect(),当然:
首先,在连接时,该函数将首先尝试查找已使用相同主机,用户名和密码打开的(持久)链接。如果找到一个,将返回一个标识符,而不是打开一个新连接。
但你可能已经想到了这一点。
第二件事,你不是说MS SQL是否与PHP部分在同一台机器上运行,但如果不是,那么可能存在一个基本的网络问题?一个主机和另一个主机之间的经典ping
有多快?对于未完美配置的虚拟机也是如此。 200毫秒听起来非常非常慢。
然后,在mssql_connect()的用户贡献说明中,有关于MS SQL的本机PHP驱动程序的talk。我对此一无所知,它是否属于“旧”语法以及它是否适用于您的情况,但它可能值得一看。
用户贡献的笔记总是值得一看,有像this one这样的花絮:
以防万一它可以帮助这里的人......我们被来自IIS6的极其缓慢的连接所困扰 - > SQL Server 2000.从CGI切换到ISAPI有点修复它,但初始连接仍然需要10秒的时间,最终连接将不再起作用。
解决方案是将数据库服务器IP地址添加到服务器上的HOST文件,并将其指向内部计算机名称。看起来某种DNS查找是罪魁祸首。
现在连接和查询正在飞行,世界又一次正确。
答案 1 :(得分:3)
我们最近在php 5.3,FreeTDS和mssql之间进行了相当多的优化。假设您有足够的服务器资源,我们发现两次更改使数据库交互更快,更可靠。
答案 2 :(得分:1)
我唯一能想到的是使用ip地址而不是sql连接的主机名来节省dns查找。也许持久连接是一种选择,而且速度要快一些。