У меня есть многопоточная служба Windows, которую я разработал с VS 2010 (.NET 4.0), которая может иметь от нескольких до нескольких десятков потоков, каждый из которых извлекает данные с медленного сервера через Интернет, а затем использует локальную базу данных для записи этих данных (поэтому процесс связан с Интернетом, а не с привязкой к локальной сети или ЦП).
С некоторой регулярностью я получаю поток /flurry/burst следующей ошибки из нескольких потоков одновременно:
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, 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 как "Принципал, Синхронизированный" в "Высокая безопасность без автоматического переключения (синхронный)".
РЕДАКТИРОВАТЬ 5/26/11
Я ничего не вижу в журналах SQL Server, чтобы указать на какие-либо проблемы. (У меня нет доступа к средству просмотра событий Windows на этом сервере, но я попросил кого-то найти меня.)