3

我正在开发一个 PHP 对话系统与 Microsoft SQL Server 2008 通信的项目,我需要在 PHP 端提高速度。

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

我已经保证对我的 PHP 脚本的每个请求只生成一个连接句柄。

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

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

3 回答 3

3

嗯。我对 MS SQL 了解不多,但优化单个调用可能很困难。

想到的一件事是尝试mssql_pconnect(),当然:

首先,在连接时,该函数将首先尝试查找已使用相同主机、用户名和密码打开的(永久)链接。如果找到,将返回它的标识符,而不是打开新连接。

但你可能已经想到了。

第二件事,您不是说 MS SQL 是否与 PHP 部分在同一台机器上运行,但如果不是,那么可能是手头有基本的网络问题?ping一位主持人和另一位主持人之间的经典有多快?对于未完美配置的虚拟机也是如此。200 毫秒听起来真的非常非常慢。

然后,在 mssql_connect() 的用户贡献说明中,讨论了用于 MS SQL 的本机 PHP 驱动程序。我对它一无所知,它是否适用于“旧”语法以及它是否适用于您的情况,但它可能值得一看。

用户贡献的笔记总是值得一看的,有这样的花絮

以防万一它对这里的人们有所帮助...我们被来自 IIS6 的极慢连接所困扰——> SQL Server 2000。从 CGI 切换到 ISAPI 对其进行了一些修复,但初始连接仍然需要 10 秒,最终连接将不再起作用。

解决方案是将数据库服务器 IP 地址添加到服务器上的 HOST 文件中,将其指向内部机器名称。看起来某种 DNS 查找是罪魁祸首。

现在连接和查询正在飞速发展,世界再次正确。

于 2010-02-17T14:43:02.867 回答
3

我们最近在 php 5.3、FreeTDS 和 mssql 之间进行了相当多的优化。假设您有足够的服务器资源,我们发现有两个更改使数据库交互更快、更可靠。

  1. 使用 mssql_pconnect() 而不是 mssql_connect() 消除了间歇性的“无法连接到服务器”问题。我阅读了很多帖子,这些帖子表明与持久连接相关的负面问题,但到目前为止,我们还没有看到任何表明这是一个问题的信息。根据负载,php 服务器似乎保持 20 到 60 个对 db 服务器打开的持久连接。
  2. 在 freetds.conf 文件中使用数据库服务器的 IP 地址而不是主机名也可以提高速度。
于 2012-11-19T03:52:59.690 回答
1

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

于 2010-02-17T14:44:28.263 回答