مهلة Sql على عامل الإرساء


لدي اختبارات يتم تنفيذها باستخدام قاعدة بيانات SQL مستضافة على Docker. أواجه مشكلات المهلة في بعض الاختبارات

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.

ما حاولت:

لقد حاولت إضافة “مهلة الاتصال = 60” إلى سلسلة الاتصال

أتحقق من عدد الاتصالات التي أجريتها باستخدام الاستعلام أدناه، والذي يكون دائمًا أقل من 30 اتصالاً

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

الحل 1

نعم أنا متأكد من إمكانية الوصول إلى قاعدة البيانات. من بين 3000 اختبار، يفشل بعضها بشكل عشوائي مع انتهاء مهلات Sql.

فيما يلي الطريقة التي أستخدمها لفتح اتصال قاعدة البيانات

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

مثال الاستدعاء:

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

コメント

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