2009-05-22 1 views
3

У меня есть хранимая процедура, которая является ошибкой с «Истекло время ожидания».Время ожидания хранимой процедуры - но при запуске с SSMS

Используемый код - ADO/VB6.

Хранимая процедура сама по себе не является проблемой, ее можно запустить в окне запроса, и она занимает меньше секунды.

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

Ошибка будет воспроизводима каждый раз за попытку, независимо от того, работает ли код VB6 в отладке или нет, а затем внезапно все снова начнет работать. Затем некоторое время в будущем эта же проблема снова появится.

Я не уверен, сколько кода стоит здесь, в этом нет ничего сложного; это в основном;

Set adoCommandObject.ActiveConnection = ...{open ADODB.Connection object} 
Set rs = CreateObject("ADODB.Recordset") 
Call rs.Open(adoCommandObject, , adOpenForwardOnly, adLockReadOnly)'Timeout occurs here 

Я наблюдал профилировщика, но это не дало никаких подсказок, для иногда видеть «SET NO_BROWSETABLE ON»/кроме «SET NO_BROWSETABLE OFF» заявления происходит до и после прогонов зр.

Я искал сеть, но не смог найти удовлетворительной помощи для этого; Я готов попробовать что-нибудь в этой точке (кроме переписывания в .NET, к сожалению, это не вариант!)

+0

Пара вопросов: Вы получаете тайм-аут Истекает через долгое время или мгновенно? Если долгое время, профилировщик согласен с тем, что длительность команды была такой долгой? –

+0

Время ожидания истекает через некоторое время - 30 секунд или около того - я думаю, что такое тайм-аут, возможно, по умолчанию. Да, профайлер согласен - после того, как ошибка была сгенерирована в коде VB6, вы увидите штрих-код в профилировщике с большой длительностью. – DannykPowell

+0

Вы определили решение, поскольку я в ситуации similer! – 2010-08-15 04:17:01

ответ

3

Я думаю, вы закончили думать об этом. Не обижайтесь, но если вы используете MSSQL, это так же просто, как кто-то, оставляя окно запроса открытым, и связывает базу данных. Это легко проверить. У меня были такие же проблемы. Я запустил хранимые процедуры до того, как у вас не было тайм-аута, который обычно запускался немедленно, но сидел бы на ночь и не запускался. Только чтобы узнать, что другой сотрудник оставил окно своего запроса открытым. Закройте их окно и poof, он, наконец, бежит. Проверьте это, вы будете удивлены тем, что блокировка таблицы может сделать для вашего приложения.

Я говорю это, потому что вы сказали, что проблема переплетается. Он приходит и уходит. Я подозреваю, что блокировка стола. Будь то это приложение, или это делается другим пользователем, делающим запросы к БД. Если это не другой пользователь, убедитесь, что ваше приложение закрывает соединения с БД каждый раз, когда они используются.

+0

Возможно, вы правы. Я уклонился от этой проблемы, чтобы завершить то, что мне нужно было сделать в то время, не дойдя до сути проблемы. Если это произойдет снова, я буду помнить об этом; спасибо – DannykPowell

+0

Я столкнулся с той же проблемой. И блокировка стола была причиной. Благодарю. +1 – Max

0
  • Может быть, есть какой-то код скрывается вокруг, что случайно устанавливает соединение или тайм-аут командования к очень малой величине.
  • Возможно, процедура действительно делает время для запуска, например. если сервер делает что-то еще или статистика устарела
  • Можете ли вы зафиксировать случай таймаута с использованием профайлера, и если это так, на самом деле процесс занимает много времени?

Как описано here SET NO_BROWSETABLE ВКЛ аналогично использованию в FOR BROWSE выбирает. Я предполагаю, что он автоматически генерируется ado, когда он думает, что вы захотите обновить этот набор записей. Вероятно, есть свойство Recordset, которое вы можете установить, чтобы остановить выпуск, но вряд ли это проблема.

+0

Спасибо за ваш ответ. Первое предложение: нет, я пропустил весь код типа «GetOpenConnection», и нет настройки тайм-аута. 2: Определенно проблема с загрузкой сервера. Я запускал тесты загрузки jmeter раньше, чем в приложении, где мы ударили по этому коду/задействованный sp был очень оптимизирован/также используется в реальном времени с клиентами, которые накладывают на него гораздо больше нагрузки, чем я нажимаю на него как одноразовый. Эта проблема не сообщается о живых системах, как раз в тестовой системе, против которой я развиваюсь, - возможно, это проблема с самой базой данных ..? См. Мой комментарий выше re. захват в профилировщике – DannykPowell

 Смежные вопросы

  • Нет связанных вопросов^_^