Аналогичный (если не тот же вопрос, как) Network path not found exception encountered randomly, но у меня есть код для воспроизведения проблемы, поэтому я хочу снова спросить, поскольку она кажется реальной проблемой независимой оборудования и могут быть воспроизведены.SQL Server «Сетевой путь не найден» Случайно и редко встречается в средах
Вот ошибка:
provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) ---> System.ComponentModel.Win32Exception (0x80004005): The network path was not found at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionPool.WaitForPendingOpen()
Для воспроизведения этого я создал консольное приложение, запущенного каждую минуту (мы также имеем тест Щеголеватый DAL, следовательно, параметр):
internal class Program
{
private static int _totalOpenConnections;
private static readonly Stopwatch Timer = new Stopwatch();
private static bool _hasError;
private static int Main(string[] args)
{
var list = Enumerable.Range(1, Settings.Default.TotalCommandsToExecute);
// simple ADO.NET test
if (args.Length > 0 && args[0].Equals("ado", StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine("Beginning ADO.NET Test...");
Timer.Restart();
Parallel.ForEach(list, new ParallelOptions {MaxDegreeOfParallelism = Settings.Default.ConcurrentCount},
i => AsyncContext.Run(async() =>
{
try
{
PrintStatus(i);
await TestADONet();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
_hasError = true;
}
}));
Timer.Stop();
Console.WriteLine($"Completed ADO.NET Test in {Timer.ElapsedMilliseconds} ms");
}
if (_hasError)
return 1;
return 0;
}
private static void PrintStatus(int index)
{
Console.WriteLine(
$"Started: {index} of {Settings.Default.TotalCommandsToExecute}\tCurrently Open: {_totalOpenConnections}");
}
private static async Task TestADONet()
{
using (var conn = new SqlConnection(Settings.Default.TestConnection))
{
await conn.OpenAsync();
Interlocked.Increment(ref _totalOpenConnections);
var command = new SqlCommand("SELECT 1 Field1, 2 Field2, 3 Field3", conn);
var reader = await command.ExecuteReaderAsync();
while (reader.Read())
{
var result = new TestEntity
{
Field1 = reader.GetInt32(0),
Field2 = reader.GetInt32(1),
Field3 = reader.GetInt32(2)
};
}
}
Interlocked.Decrement(ref _totalOpenConnections);
}
public class TestEntity
{
public int Field1 { get; set; }
public int Field2 { get; set; }
public int Field3 { get; set; }
}
}
Применение настройки ConcurrentCount = 100 и TotalCommandsToExecute = 200. Идея состоит в том, чтобы довольно сильно удалять пул соединений с помощью асинхронных команд.
Это приложение воспроизводит его, однако оно также происходит в производстве в консольных приложениях, веб-приложениях (ASP.NET MVC и ASP.NET WebForms).
Это также происходит довольно случайным образом. У нас было Rackspace, и некоторые администраторы баз данных сканировали среду по этой проблеме безрезультатно, что привело к этому приложению, которое воспроизвело его в среде разработки.
Строка соединения является довольно мягкий, в форме "Data Source =; Database =; User Id =; Пароль ="
SQL Server 2014, но это произошло на двух разных серверах (Dev/Rackspace)
запрос в тесте намеренно доброкачественная
"SELECT 1 Field1, 2 Field2, 3 Field3"
тест действительно использует Nito.AsyncEx, единственный ни система сборки в использовании здесь, чтобы получить поддержку асинхронной. Снова проблема возникает в других приложениях, не использующих эту сборку, поэтому я не думаю, что это проблема. Сообщите мне, если нет, и я воспроизведу ее по-другому.
ЛЮБЫЕ идеи очень ценятся!
Возможно, релевантно: http://dba.stackexchange.com/questions/24165/sql-server-should-we-use-tcp-or-named-pipes-or-use-the-default?noredirect = 1 # comment317809_24165 – ccook
в строке заголовка tcp vs named и статьи: http://devproconnections.com/database-development/sql-server-performance-tip-favoring-tcpip-over-named-pipes – ccook
Другая поддержка источника вверх по tcp vs np lead: http://serverfault.com/questions/30955/sporatic-connection-issues-connecting-to-sql-2005-named-pipes-vs-tcp-ip-issue/31024#31024. В частности, «принудительное использование TCP/IP в строке соединения в конечном итоге решило проблему. Спасибо. - BradC» – ccook