Почему Sql Server подключается к TimesOut - PullRequest
0 голосов
/ 28 апреля 2009

Я использую данные Enterprise Library для своей базы данных Sql. Я использую версию 3.1. Я использую этот код для выполнения долгого SP (около 1 минуты).

Dim db As SqlDatabase = New SqlDatabase(System.Web.Configuration.WebConfigurationManager.ConnectionStrings("portalConnection").ConnectionString)
                    db.ExecuteNonQuery("spnametoexecute")

Строка подключения выглядит следующим образом

<add name="portalConnection" connectionString="Server=IP;Database=DBName;uid=User;pwd=PWD; Timeout=180;"
  providerName="System.Data.SqlClient" />

Предполагается, что я всегда получаю исключение TimeOut. Почему это так?

System.Data.SqlClient.SqlException: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.

Ответы [ 4 ]

2 голосов
/ 28 апреля 2009

Ну, есть несколько возможностей:

  • Ваш запрос слишком сложен и занимает слишком много времени (попробуйте написать лучше TSQL, добавить индексы или увеличить время ожидания)
  • вы заблокированы другим SPID (возможно, вы подключены к другому соединению)

Часто вторая проблема. Посмотрите на блокировки и т.д. (sp_who / sp_who2), чтобы увидеть, есть ли какие-либо блоки. И используйте трассировщик / профилировщик для исследования первого варианта.

0 голосов
/ 28 апреля 2009

Я не слишком знаком с корпоративной библиотекой данных, но я посмотрю, есть ли у объекта SqlDatabase свойство timeout. Попробуйте установить время ожидания в своем коде и протестируйте поведение.

0 голосов
/ 28 апреля 2009

Получаете ли вы ВСЕГДА тайм-аут или только когда выполняется длительный запрос? Когда вы запускаете его вручную - то есть в Management Studio, сколько времени это займет? Ваше соединение настроено на тайм-аут в 3 минуты, что является ОГРОМНЫМ количеством времени.

Вы должны атаковать это на нескольких уровнях:

  1. Профиль и оптимизация запроса
  2. Тест с очень простыми запросами, чтобы увидеть, есть ли проблема с подключением
0 голосов
/ 28 апреля 2009

Я думаю, вы указали неверный IP-адрес сервера или ваш сервер также не настроен. Проверьте, разрешены ли ваши Pipes и tcp / ip в конфигурации вашего сервера. Очень часто забывают.

...