连接池不适用于SQL Server for Linux的ODBC驱动程序13

时间:2016-11-23 23:53:33

标签: php sql-server odbc sqlsrv unixodbc

我们刚刚安装了最新的SQL 13驱动程序和最新的sqlsrv和sqlsrv_pdo PHP扩展。连接池似乎不起作用。

  • 操作系统:CentOS 7.2
  • PHP:PHP 7.0.12
  • SQL驱动程序:SQL Server的ODBC驱动程序13

测试摘要:我们创建了一个连接到DB的测试脚本。脚本执行后,关闭连接,由DB确认。

ODBCINST.INI:

[ODBC]
Pooling = Yes

[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver 13 for SQL Server
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.1.0
UsageCount=1
CPTimeout=120

包含一些时间(ms)的测试脚本:

$startTime = microtime(true);
function printElapsedTimeSinceLastEvent($event=''){
    global $startTime;
    $elapsed = microtime(true) - $startTime;
    echo $event . round($elapsed*1000) ."\n";
    $startTime = microtime(true);
}

// Connection sqlsrv driver
$pdo = new PDO ("sqlsrv:server=10.12.12.123;database=aDatabaseName",'coolUser','someAwesomePassword');
printElapsedTimeSinceLastEvent("Connected: ");
$stmt = $pdo->prepare("SELECT TOP 10 * FROM users");
$stmt->execute();
printElapsedTimeSinceLastEvent("Execute: ");
$array = $stmt->fetchAll(PDO::FETCH_ASSOC);
printElapsedTimeSinceLastEvent("Fetch: ");

脚本的3个连续输出:

Connected: 149
Execute: 109
Fetch: 2

Connected: 149
Execute: 100
Fetch: 2

Connected: 152
Execute: 108
Fetch: 2

使用SQL Studio并运行EXEC sp_who2,我们可以看到每次运行后连接都已关闭。在Windows上使用sqlsrv确实保持连接按预期打开,并且确实显示在sp_who2输出中。

在我们确认连接池确实存在的Windows上,连接时间明显快于连接池的预期。

1 个答案:

答案 0 :(得分:0)

Microsoft承认了这个错误,并且已经发布了一个支持池化的新版本。