Время ожидания соединения для SQL server
Я могу увеличить тайм-аут, изменив строку подключения в файле web.config
?
3 ответов
Да, вы можете добавить ;Connection Timeout=30
на строку подключения и укажите значение, которое вы хотите.
значение тайм-аута, установленного в Connection Timeout
свойство время в секундах. Если это свойство не задано, значение тайм-аута для соединения является значением по умолчанию (15 секунд).
кроме того, установка значения тайм-аута в 0
, вы указываете, что ваша попытка подключения ждет бесконечное время. Как описано в документация, это то, что вы не должны устанавливать в строке подключения:
значение 0 не указывает на ограничение, и его следует избегать в ConnectionString, потому что попытка подключения ждет бесконечно.
Хммм...
Как сказал Дарин, вы можете указать более высокое значение тайм-аута соединения, но я сомневаюсь, что это действительно проблема.
когда вы получаете тайм-ауты соединения, это обычно проблема с одним из следующих:
конфигурация сети-Медленное соединение между полем веб-сервер/dev и SQL server. Увеличение тайм-аута может исправить это, но было бы разумно исследовать базовый проблема.
строку подключения. Я видел проблемы, когда неправильное имя пользователя / пароль по какой-то причине даст ошибку тайм-аута вместо реальной ошибки, указывающей "отказано в доступе.- Этого не должно было случиться, но такова жизнь.
строка подключения 2: Если вы указываете имя сервера неправильно или неполно (например,
mysqlserver
вместоmysqlserver.webdomain.com
), вы получите тайм-аут. Можете ли вы ping сервер, используя имя сервера именно так, как указано в строке подключения из командной строки?строка подключения 3: Если имя сервера находится в вашем DNS (или файле hosts), но указывает на неправильный или недоступный IP, вы получите тайм-аут, а не ошибку machine-not-found-ish.
запрос, который вы вызываете, истекает. Это может выглядеть как подключение к серверу является проблемой, но, в зависимости от того, как ваше приложение структурировано, вы возможно, это делает его полностью до стадии, на которой выполняется ваш запрос до истечения тайм-аута.
утечки соединения. Сколько процессов запущено? Сколько открытых соединений? Я не уверен, что raw ADO.NET выполняет объединение соединений, автоматически закрывает соединения при необходимости Ala Enterprise Library или где все это настроено. Это, вероятно, отвлекающий маневр. Однако при работе с WCF и веб-службами у меня были проблемы с незамкнутыми соединениями вызывает тайм-ауты и другое непредсказуемое поведение.
вещи, чтобы попробовать:
получаете ли вы тайм-аут при подключении к серверу с помощью SQL Management Studio? Если это так, network config, вероятно, проблема. Если вы не видите проблемы при подключении к Management Studio, проблема будет в вашем приложении, а не на сервере.
запустите SQL Profiler и посмотрите, что на самом деле происходит по проводу. Вы должны быть в состоянии чтобы узнать, действительно ли вы подключаетесь или проблема в запросе.
запустите запрос в Management Studio и посмотрите, сколько времени это займет.
удачи!
Если вы хотите динамически изменить его, я предпочитаю использовать SqlConnectionStringBuilder .
Он позволяет конвертировать ConnectionString т. е. строку в объект класса, все свойства строки соединения станут ее членом.
в этом случае реальным преимуществом было бы то, что вам не нужно беспокоиться о том, существует ли строковая часть ConnectionTimeout в строке подключения или нет?
также как он создает объект и его всегда хорошо назначать значение в объекте, а не манипулировать строкой.
вот пример кода:
var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);
sscsb.ConnectTimeout = 30;
var conn = new SqlConnection(sscsb.ConnectionString);