Время ожидания соединения для SQL server

Я могу увеличить тайм-аут, изменив строку подключения в файле web.config?

3 ответов


Да, вы можете добавить ;Connection Timeout=30 на строку подключения и укажите значение, которое вы хотите.

значение тайм-аута, установленного в Connection Timeout свойство время в секундах. Если это свойство не задано, значение тайм-аута для соединения является значением по умолчанию (15 секунд).

кроме того, установка значения тайм-аута в 0, вы указываете, что ваша попытка подключения ждет бесконечное время. Как описано в документация, это то, что вы не должны устанавливать в строке подключения:

значение 0 не указывает на ограничение, и его следует избегать в ConnectionString, потому что попытка подключения ждет бесконечно.


Хммм...

Как сказал Дарин, вы можете указать более высокое значение тайм-аута соединения, но я сомневаюсь, что это действительно проблема.

когда вы получаете тайм-ауты соединения, это обычно проблема с одним из следующих:

  1. конфигурация сети-Медленное соединение между полем веб-сервер/dev и SQL server. Увеличение тайм-аута может исправить это, но было бы разумно исследовать базовый проблема.

  2. строку подключения. Я видел проблемы, когда неправильное имя пользователя / пароль по какой-то причине даст ошибку тайм-аута вместо реальной ошибки, указывающей "отказано в доступе.- Этого не должно было случиться, но такова жизнь.

  3. строка подключения 2: Если вы указываете имя сервера неправильно или неполно (например,mysqlserver вместо mysqlserver.webdomain.com), вы получите тайм-аут. Можете ли вы ping сервер, используя имя сервера именно так, как указано в строке подключения из командной строки?

  4. строка подключения 3: Если имя сервера находится в вашем DNS (или файле hosts), но указывает на неправильный или недоступный IP, вы получите тайм-аут, а не ошибку machine-not-found-ish.

  5. запрос, который вы вызываете, истекает. Это может выглядеть как подключение к серверу является проблемой, но, в зависимости от того, как ваше приложение структурировано, вы возможно, это делает его полностью до стадии, на которой выполняется ваш запрос до истечения тайм-аута.

  6. утечки соединения. Сколько процессов запущено? Сколько открытых соединений? Я не уверен, что raw ADO.NET выполняет объединение соединений, автоматически закрывает соединения при необходимости Ala Enterprise Library или где все это настроено. Это, вероятно, отвлекающий маневр. Однако при работе с WCF и веб-службами у меня были проблемы с незамкнутыми соединениями вызывает тайм-ауты и другое непредсказуемое поведение.

вещи, чтобы попробовать:

  1. получаете ли вы тайм-аут при подключении к серверу с помощью SQL Management Studio? Если это так, network config, вероятно, проблема. Если вы не видите проблемы при подключении к Management Studio, проблема будет в вашем приложении, а не на сервере.

  2. запустите SQL Profiler и посмотрите, что на самом деле происходит по проводу. Вы должны быть в состоянии чтобы узнать, действительно ли вы подключаетесь или проблема в запросе.

  3. запустите запрос в Management Studio и посмотрите, сколько времени это займет.

удачи!


Если вы хотите динамически изменить его, я предпочитаю использовать SqlConnectionStringBuilder .

Он позволяет конвертировать ConnectionString т. е. строку в объект класса, все свойства строки соединения станут ее членом.

в этом случае реальным преимуществом было бы то, что вам не нужно беспокоиться о том, существует ли строковая часть ConnectionTimeout в строке подключения или нет?

также как он создает объект и его всегда хорошо назначать значение в объекте, а не манипулировать строкой.

вот пример кода:

var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);

sscsb.ConnectTimeout = 30;

var conn = new SqlConnection(sscsb.ConnectionString);