sqlsrv通过网络非常慢 - php

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

针对同一查询,在同一VPN隧道的同一台PC上测试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上的传输速率显示为2500 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:将数组值加在一起 - php

我相信这比标题听起来要难一些,但我可能完全错了。我有一个像这样的数组:[["londrina",15],["cascavel",34],["londrina",23],['tiradentes',34],['tiradentes',21]] 我希望能够采用通用…

PHP JQuery复选框 - php

我有以下片段。 var myData = { video: $("input[name='video[]']:checked").serialize(), sinopse: $("#sinopse").val(), dia: $("#dia").val(), quem: $(&#…

如何从php中获取datatables jQuery插件的json数据 - php

我是PHP的新手,正在尝试使用Datatables jQuery插件。我知道我必须从.php文件中获取数据,然后在数据表中使用它,但是我似乎无法通过ajax将其传递给数据表。我设法从数据库中获取数据,并对其进行json编码,但是后来我不知道如何在我的index.php文件中调用它,并在其中显示它。我究竟做错了什么?这是我的代码:HTML(已编辑): <…

PHP:获取调用引用的数组名称 - php

假定以下函数并调用:function doSomething( &$someArray ) { // Do something to $someArray } $names=array("John", "Paul", "George", "Ringo"); doSomet…

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…