连接池不能使用ODBC驱动程序13 for SQL Server for Linux

问题描述:

我们刚刚安装了最新的SQL 13驱动程序和最新的sqlsrv和sqlsrv_pdo PHP扩展。连接池似乎没有工作。连接池不能使用ODBC驱动程序13 for SQL Server for Linux

  • OS:CentOS的7.2
  • PHP:PHP 7.0.12
  • SQL驱动程序:ODBC SQL Server的

摘要测试的司机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 

测试脚本,其包括一些定时(毫秒):脚本的连续

$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上,连接池的连接时间明显更快。

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