У меня есть SQL-запрос, и он иногда терпит неудачу. Это означает, что запрос выполняется в большинстве случаев нормально. Если запрос не выполняется, если я выполняю его снова с некоторой задержкой, он успешно выполняется в том же исполнении.
Обратите внимание, что в таблицах, используемых в запросе, нет изменений между сценариями успеха и неудачи. Они точно такие же. Как упоминалось ниже, запрос объединяет несколько таблиц, и результат запроса должен быть пустым. Но время от времени бросает ADO и ошибку.
Как найти причину проблемы?
Я намеренно пропустил некоторые детали, поскольку мне интересно знать общий подход к решению проблем при сбоях SQL-запросов.
Вот некоторые подробности, которые необходимо знать о любых конкретных альтернативных подходах.
- Microsoft SQL Server 2008
- Использование запроса объединяет две таблицы
- Запрос передается из .NET через взаимодействие, и COM-компонент взаимодействует с ADO для выполнения запроса.
- Информация об ошибке 0x80004005 (-2147467259) [DBNETLIB] [ConnectionOpen (Connect ()).] SQL Server не существует или доступ запрещен.
Обновление:
Для этой конкретной проблемы я решил, что клиенту не хватает доступных портов TCP. В соответствии с настройками по умолчанию 5000 портов являются максимальным количеством портов TCP. В моем случае ADO создает неявные соединения, которые создают порт TCP каждый раз, когда делается запрос.
netstat
показал мне, что количество открытых портов резко увеличилось, когда я запустил рабочий процесс. Около 4000 портов запрос не выполняется (0-1023 являются зарезервированными портами). Ответ Джибкова Добрева в здесь указал мне правильное направление.