gpt4 book ai didi

php - sqlsrv 通过网络非常慢

转载 作者:行者123 更新时间:2023-12-02 00:23:33 25 4
gpt4 key购买 nike

我在 PHP (5.5.12) 中使用 sqlsrv(php_pdo_sqlsrv_55_ts.dll 和 php_sqlsrv_55_ts.dll)通过 VPN 隧道连接到 MSSQL 2012 服务器。但大型结果集的传输速度非常慢。

在同一台 PC 上通过同一 VPN 隧道测试此查询的 SSMS:

SELECT * 
FROM [Data].[dbo].[Logins]
WHERE date >= '2014-01-27 00:00:00.000' AND date < '2014-01-29 00:00:00.000'

在 4 秒内返回大约 100,000 行。在查询运行时,检查防火墙/VPN 上的传输速率显示为 2,500 KB/s(在 100mbit 网络上)。

使用 PHP:

sqlsrv_configure('ClientBufferMaxKBSize', 1024*1024);
$dbconnect = "SERVER\\HERE";
$dbconinfo = array("UID" => "user", "PWD" => "pass", "Database" => "Data")
$conn = sqlsrv_connect( $dbconnect, $dbconinfo);
$sql = "
SELECT *
FROM [dbo].[Logins]
WHERE date >= '2014-01-27 00:00:00.000' AND date < '2014-01-29 00:00:00.000'
";

$options = array();
$options["Scrollable"] = SQLSRV_CURSOR_CLIENT_BUFFERED;
$options["QueryTimeout"] = 30000;

$stmt = sqlsrv_query( $conn, $sql, array(), $options);

运行 40 秒,并且在查询运行时防火墙/VPN 显示低于 150 KB/s。任务管理器显示该脚本的 CPU 利用率约为 5%。

我使用 SQLSRV_CURSOR_CLIENT_BUFFERED 只是为了测试,因为它在自己的缓冲区中读取结果,而无需任何进一步的 PHP 代码。在没有缓冲的情况下获取每组数据只是稍微慢一点(大约 45 秒)。

我还尝试了 PDO 版本,结果相同。

ConnectionPooling 0 或 1 也没有任何区别。

将服务器名称更改为 DNS 与 IP 地址也没有什么区别。

LogSubsystems -1 和 LogSeverity -1 没有显示任何问题或任何有用的信息。

我什至使用Wireshark来观察网络流量,但找不到PHP和SSMS版本之间的任何大差异。但我对网络层不太了解。

任何可能出现问题或我可以尝试加速 PHP/sqlsrv 的想法将不胜感激。

最佳答案

要将提取速度提高 3 倍,请在 sqlsrv_connect 连接选项中使用“MultipleActiveResultSets”=>“0”。

例如:

$db = sqlsrv_connect('127.0.0.1', array('Database'=>'dbname','UID'=> 'sa','PWD'=> 'pass',"CharacterSet" =>"UTF-8","ConnectionPooling" => "1"
,"MultipleActiveResultSets"=>'0'

));

关于php - sqlsrv 通过网络非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27553048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com