Délais d’expiration SQL sur Docker

la programmation


J’ai des tests en cours d’exécution qui utilisent une base de données SQL hébergée sur Docker. Je suis confronté à des problèmes de délai d’attente sur certains tests

var msSqlContainer = new ContainerBuilder()
	.WithImage("mcr.microsoft.com/mssql/server:2017-latest")
	.WithName(Guid.NewGuid().ToString()[..5])
	.WithPortBinding(1433, true)
	.WithEnvironment("ACCEPT_EULA", "Y")
	.WithEnvironment("SQLCMDUSER", "sa")
	.WithEnvironment("MSSQL_SA_PASSWORD", password)
	.WithEnvironment("SQLCMDPASSWORD", password)
	.WithCleanUp(true)
	.WithNetwork(network)
	.WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(1433))
	.Build();
await msSqlContainer.StartAsync();

var msSqlPort = msSqlContainer.GetMappedPublicPort(1433);

_databaseConnectionString = $"Server={msSqlContainer.Hostname},{msSqlPort};User Id=sa;Password={password};TrustServerCertificate=true;";
Timeout after 239.3025928 calling database. Caller:get_cust_messages_by_cust Message:Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.

Ce que j’ai essayé :

J’ai essayé d’ajouter « Connection Timeout=60 » à la chaîne de connexion

Je vérifie combien de connexions j’ai en utilisant la requête ci-dessous, dont j’ai toujours moins de 30 connexions

SELECT a.*
FROM
(SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE
dbid > 0
GROUP BY
dbid, loginame) a
ORDER BY a.DBName, a.LoginName

Solution 1

Oui, je suis sûr que la base de données pourrait être atteinte. Sur 3 000 tests, certains échouent de manière aléatoire avec des délais d’attente SQL.

Vous trouverez ci-dessous la méthode que j’utilise pour ouvrir la connexion DB

private DbConnection GetDBConnection()
{
    var db = _sqlDBfactory.CreateConnection();
    db!.ConnectionString = _databaseConnectionString + "Initial Catalog=clients;";
    db.Open();
    return db;
}

Exemple d’appel :

using var db = GetDBConnection();
try
{
	return db.QueryFirst<string>(
		$"SELECT statment goes here... omitted purposly;
}
finally
{
	db.Close();
}

コメント

タイトルとURLをコピーしました