Принудительное время ожидания запроса в SQL Server



У нас была проблема с блоком кода, который плохо реагирует перед лицом медленных баз данных (он крепит кровать на тайм-аут запроса). Мы создали патч и находимся в процессе его запуска через регрессию.



мы не можем взять тайм-аут. Я открыл транзакцию из SQL Mgmt Studio и обновил каждую строку, чтобы заблокировать их, но это не приводит к таймауту вставки (что мне и нужно).



могу ли я легко получить блокировку на уровне таблицы через T-SQL? Или мне придется возиться с мастером? Или я могу легко заставить тайм-аут без блокировки? Любой входной ценится.

681   4  

4 ответов:

запустите это, а затем попробуйте вставить...

select * from yourTable with (holdlock,tablockx)

здесь вы можете заблокировать его на 5 минут:

BEGIN TRANSACTION

SELECT * FROM yourTable WITH (TABLOCKX, HOLDLOCK)

WHERE 0 = 1

WAITFOR DELAY '00:05'

ROLLBACK TRANSACTION

вы можете просто сказать своему sql-коду подождать минуту перед возвращением:

WaitFor Delay '00:01:00'

на стороне наконечника: если соединение настраивается, уменьшите тайм - аут строки подключения до 1 секунды-это упростит его. Заполните таблицу с кучей данных и 3 других процесса вращаются в цикле обновления кусков этой таблицы с транзакцией вокруг цикла. Не изменяют фактических процедура, вызываемая из приложения (инструкция waitfor инъекций). Это делает недействительным интеграционный тест.

но на самом деле, это исследование в пользу модульного тестирования и внедрения зависимостей. Некоторые вещи просто сложно провести интеграционный тест. Модульный тест + инъекции зависимостей.

  • Real: Code that craps - > Database timeout (трудно воспроизвести).
  • рефакторинг: код, который крэпс - > репозиторий (только доступ к данным) - >база данных
  • модульный тест: код, который крэпс > макет репозитория to throw - > null
  • теперь у вас есть неудачный тест для кода, который крэпс и может это исправить.

это инъекция "зависимости". Разработчик может ввести зависимость в базу данных, заменив что-то, что имитирует поведение зависимости. Хорошо сделать для всех тестов базы данных. В любом случае, с помощью модульного теста вы знаете, что исправление делает то, что должно, но вам все равно нужно интеграционное тестирование. В этом случае он может лучше сосредоточиться на регрессии - что означает, что тестирование ничего не сломало, и функция все еще работает.

вы уже создали свой патч, так что мой ответ слишком поздно.

проверить это сообщение в блоге. В основном SQL Server не имеет таймаутов запросов. Клиенты могут применять тайм-аут SQL, но сам механизм этого не делает.

http://blogs.msdn.com/khen1234/archive/2005/10/20/483015.aspx

Comments

    Ничего не найдено.