У меня есть многопоточная служба Windows, которую я разработал с помощью VS 2010 (.NET 4.0), которая может иметь от нескольких до нескольких десятков потоков, каждый из которых извлекает данные с медленного сервера через Интернет, а затем использует локальную базу данных для записи этого данные (поэтому процесс привязан к Интернету, а не к локальной сети или ЦП).
С некоторой регулярностью я получаю флуд/шквал/всплеск следующей ошибки из нескольких потоков одновременно:
System.Data.SqlClient.SqlException (0x80131904): время ожидания истекло. Время ожидания истекло до завершения операции или сервер не отвечает.
Стек вызовов для этой ошибки обычно:
в System.Data.ProviderBase.DbConnectionPool.GetConnection (DbConnection owningObject)
в System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
в System.Data.ProviderBase.DbConnectionClosed.OpenConnection (DbConnection externalConnection, DbConnectionFactory connectionFactory)
в System.Data.SqlClient.SqlConnection.Open()
Я не указываю время ожидания подключения в строке подключения, и в этой базе данных работают другие приложения и процессы. Кто-нибудь сталкивался с таким поведением, и если да, то что было сделано, чтобы предотвратить это?
Наиболее часто вызываемый метод на моем уровне доступа к данным выглядит так, и все другие мои методы DAL следуют тому же подходу:
using (SqlConnection con = new SqlConnection(GetConnectionString()))
using (SqlCommand cmd = new SqlCommand("AddGdsMonitorLogEntry", con))
{
cmd.CommandType = CommandType.StoredProcedure;
/* setting cmd.Parameters [snipped] */
// We have been getting some timeouts writing to the log; wait a little longer than the default.
cmd.CommandTimeout *= 4;
con.Open();
cmd.ExecuteNonQuery();
}
Большое спасибо!
ИЗМЕНИТЬ
Учитывая комментарии о том, что это происходит в зеркальных средах, я действительно должен упомянуть, что рассматриваемая база данных является зеркальной. Он помечен в SSMS как основной, синхронизированный, в режиме высокой безопасности без автоматического перехода на другой ресурс (синхронный).
ИЗМЕНИТЬ 26.05.11
Я не вижу в журналах SQL Server ничего, что указывало бы на какие-либо проблемы. (У меня нет доступа к средству просмотра событий Windows на этом сервере, но я попросил кого-нибудь найти меня.)