[ad_1]
Docker でホストされている SQL データベースを使用してテストを実行しています。 一部のテストでタイムアウトの問題が発生しています
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.
私が試したこと:
接続文字列に「Connection Timeout=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 タイムアウトでランダムに失敗します。
以下はDB接続を開くために使用している方法です。
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(); }
[ad_2]
コメント