У нас возникла проблема с блоком кода, который плохо реагирует на медленные базы данных (он ломает кровать при тайм-ауте запроса). Мы создали патч и находимся в процессе регрессии.
Мы не можем получить тайм-аут. Я открыл транзакцию из SQL Mgmt Studio и обновил каждую строку, чтобы заблокировать их, но это не приводит к таймауту INSERT (что мне и нужно).
Могу ли я легко получить блокировку на уровне таблицы через T-SQL? Или мне придется возиться с мастером? Или я могу легко заставить тайм-аут без блокировки? Любой вклад приветствуется.
sql-server
testing
timeout
locking
BnWasteland
источник
источник
Вы можете просто указать своему sql-коду подождать минуту перед возвратом:
источник
С другой стороны: если соединение настраивается, уменьшите тайм-аут строки подключения до 1 секунды - это упростит задачу. Заполните таблицу кучей данных и пусть 3 других процесса вращаются в цикле, обновляя фрагменты этой таблицы с транзакцией вокруг цикла. Не изменяйте фактическую процедуру, вызываемую приложением (инъекция waitfor). Это делает интеграционный тест недействительным.
Но на самом деле это пример использования модульного тестирования и внедрения зависимостей. Некоторые вещи просто сложно протестировать при интеграции. Модульный тест + внедрение зависимостей .
Это инъекция «зависимости». Разработчик может внедрить зависимость в базу данных, заменив что-то, что имитирует поведение зависимости. Подходит для всех тестов базы данных. В любом случае, имея модульный тест, вы знаете, что исправление делает то, что должно, но вам все равно нужно интеграционное тестирование. В этом случае лучше сосредоточиться на регрессии - это означает, что тестирование ничего не сломало, и функция все еще работает.
Вы уже создали свой патч, поэтому я думаю, что я слишком поздно отвечу.
источник
Посмотрите это сообщение в блоге. Обычно SQL Server не имеет тайм-аутов запросов. Клиенты могут использовать тайм-аут SQL, но сам движок этого не делает.
http://blogs.msdn.com/khen1234/archive/2005/10/20/483015.aspx
источник