Hết thời gian chờ Sql trên docker

lập trình


Tôi có các thử nghiệm đang thực thi bằng cách sử dụng cơ sở dữ liệu SQL được lưu trữ trên Docker. Tôi đang gặp phải vấn đề về thời gian chờ trong một số bài kiểm tra

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.

Những gì tôi đã thử:

Tôi đã thử thêm ‘Thời gian chờ kết nối=60’ vào chuỗi kết nối

Tôi kiểm tra xem tôi có bao nhiêu kết nối bằng truy vấn bên dưới, tôi luôn có dưới 30 kết nối

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

Giải pháp 1

Có, tôi chắc chắn có thể truy cập được cơ sở dữ liệu. Trong số 3000 bài kiểm tra, một số bài kiểm tra không thành công ngẫu nhiên khi hết thời gian chờ Sql.

Dưới đây là phương pháp tôi đang sử dụng để mở kết nối DB

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

Ví dụ gọi:

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

コメント

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