如何加速mssql_connect()

时间:2010-02-17 14:41:06

标签: sql-server database performance sql-server-2008 php-5.2

我正在开发一个PHP对话系统与Microsoft SQL Server 2008进行通信的项目,我需要更快的PHP方面。

在分析我的PHP脚本之后,我发现在该特定系统上调用mssql_connect()需要大约200毫秒。对于一些简单的对话框,这大约是整个脚本运行时的60%。因此,我可以通过加快此次通话来获得巨大的性能提升。

我已经确定只为我的PHP脚本的每个请求生成一个单独的连接句柄。

有没有办法加快与SQL Server的初始连接?但是有一些限制:

  • 我不能使用PDO(这里有很多遗留代码无法使用它)
  • 我无权访问SQL Server配置,因此我需要一个PHP端解决方案
  • 我无法升级到PHP 5.3.X,这也是因为糟糕的遗留代码。

3 个答案:

答案 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之间进行了相当多的优化。假设您有足够的服务器资源,我们发现两次更改使数据库交互更快,更可靠。

  1. 使用mssql_pconnect()而不是mssql_connect()消除了 间歇性的“无法连接到服务器”问题。我看了很多帖子 这表明与持久性相关的负面问题 连接,但到目前为止,我们没有看到任何暗示它的东西 一个问题。 php服务器似乎保持在20到60之间 连接根据负载打开到数据库服务器。
  2. 在freetds.conf文件中使用数据库服务器的IP地址 而不是主机名也增加了速度。

答案 2 :(得分:1)

我唯一能想到的是使用ip地址而不是sql连接的主机名来节省dns查找。也许持久连接是一种选择,而且速度要快一些。