[ad_1]
मेरे पास परीक्षण निष्पादित हैं जो डॉकर पर होस्ट किए गए 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.
मैंने क्या प्रयास किया है:
मैंने कनेक्शन स्ट्रिंग में ‘कनेक्शन टाइमआउट=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 परीक्षणों में से कुछ एसक्यूएल टाइमआउट के साथ यादृच्छिक रूप से विफल हो रहे हैं।
नीचे वह विधि है जिसका उपयोग मैं डीबी कनेक्शन खोलने के लिए कर रहा हूं
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]
コメント