Nous venons d'installer les derniers pilotes SQL 13 et les dernières extensions PHP sqlsrv et sqlsrv_pdo. Le regroupement de connections ne semble pas fonctionner.
Résumé du test: Nous avons créé un script de test qui va se connecter à la database. Une fois le script exécuté, la connection est fermée, confirmée par la database.
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
Script de test incluant un timing (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 sorties consécutives de script:
Connected: 149 Execute: 109 Fetch: 2 Connected: 149 Execute: 100 Fetch: 2 Connected: 152 Execute: 108 Fetch: 2
En utilisant SQL Studio et en exécutant EXEC sp_who2, nous pouvons voir que les connections sont fermées après chaque exécution. L'utilisation de sqlsrv sous Windows maintient les connections ouvertes comme prévu et apparaît dans la sortie sp_who2.
Sous Windows, où nous avons confirmé que le regroupement de connections existe, le time de connection est nettement plus rapide que ce à quoi on s'attendrait avec le regroupement de connections.
Microsoft a reconnu le bogue et a depuis publié une nouvelle version qui prend en charge le pooling.