mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-02-17 02:51:45 -05:00
Turn off connection pooling to avoid locking (#460)
-- Ignoring the failed profiler test in the CI build since Matt is disabling in his pending PR. * Turn off connection pool for internal SqlClient connections to avoid locking * Add additional comments
This commit is contained in:
@@ -1097,15 +1097,25 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// increase the connection timeout to at least 30 seconds and and build connection string
|
// capture original values
|
||||||
// enable PersistSecurityInfo to handle issues in SMO where the connection context is lost in reconnections
|
|
||||||
int? originalTimeout = connInfo.ConnectionDetails.ConnectTimeout;
|
int? originalTimeout = connInfo.ConnectionDetails.ConnectTimeout;
|
||||||
bool? originalPersistSecurityInfo = connInfo.ConnectionDetails.PersistSecurityInfo;
|
bool? originalPersistSecurityInfo = connInfo.ConnectionDetails.PersistSecurityInfo;
|
||||||
|
bool? originalPooling = connInfo.ConnectionDetails.Pooling;
|
||||||
|
|
||||||
|
// increase the connection timeout to at least 30 seconds and and build connection string
|
||||||
connInfo.ConnectionDetails.ConnectTimeout = Math.Max(30, originalTimeout ?? 0);
|
connInfo.ConnectionDetails.ConnectTimeout = Math.Max(30, originalTimeout ?? 0);
|
||||||
|
// enable PersistSecurityInfo to handle issues in SMO where the connection context is lost in reconnections
|
||||||
connInfo.ConnectionDetails.PersistSecurityInfo = true;
|
connInfo.ConnectionDetails.PersistSecurityInfo = true;
|
||||||
|
// turn off connection pool to avoid hold locks on server resources after calling SqlConnection Close method
|
||||||
|
connInfo.ConnectionDetails.Pooling = false;
|
||||||
|
|
||||||
|
// generate connection string
|
||||||
string connectionString = ConnectionService.BuildConnectionString(connInfo.ConnectionDetails);
|
string connectionString = ConnectionService.BuildConnectionString(connInfo.ConnectionDetails);
|
||||||
|
|
||||||
|
// restore original values
|
||||||
connInfo.ConnectionDetails.ConnectTimeout = originalTimeout;
|
connInfo.ConnectionDetails.ConnectTimeout = originalTimeout;
|
||||||
connInfo.ConnectionDetails.PersistSecurityInfo = originalPersistSecurityInfo;
|
connInfo.ConnectionDetails.PersistSecurityInfo = originalPersistSecurityInfo;
|
||||||
|
connInfo.ConnectionDetails.Pooling = originalPooling;
|
||||||
|
|
||||||
// open a dedicated binding server connection
|
// open a dedicated binding server connection
|
||||||
SqlConnection sqlConn = new SqlConnection(connectionString);
|
SqlConnection sqlConn = new SqlConnection(connectionString);
|
||||||
|
|||||||
Reference in New Issue
Block a user