2012-02-06 5 views
3

У меня возникла проблема, что я надеюсь, что кто-то может помочь мне дать некоторое направление. Работа над приложением, которое выполняется несколько лет, на .NET 3.5 и NHibernate 1.2. Были проблемы на прошлой неделе, когда транзакция, похоже, блокируется случайным образом. Я заметил, что у NH было command_timeout из 100000. Я теперь привел это к 30, поскольку 100000 казались сумасшедшими! Проблемы все еще происходят.NHibernate SQL Server Suspended Processes

Монитор активности SQL Server показывает транзакцию блокировки при возникновении проблемы, обычно в состоянии SUSPENDED. Если я убью процесс блокировки, эти процессы блокируются, и система в порядке.

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

Что, по-моему, могло вызвать это? Ничего очевидного ... мы выпустили пару небольших изменений, но ни один из них не должен иметь этого эффекта. Обновления и обновления для Windows были установлены также примерно в одно и то же время. Могут ли быть причиной проблемы с SQL/.NET SP?

Я знаю, что здесь много, но стараюсь дать столько, сколько у меня есть на данный момент.

NEW INFO: Теперь, когда command_tinmeout был обновлен до 30 секунд, запросы, которые превышают это время выполнения, автоматически удаляются - или так я вижу в Activity Monitor. Однако, похоже, что что-то еще происходит, поскольку повторные запросы терпят неудачу с тайм-аутом. Однако, если я остановлюсь и запустил пул приложений, все начнет работать как обычно, по крайней мере на некоторое время.

ответ

1

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

Какой уровень изоляции находится в базе данных, если его установка в ящике в большинстве случаев очень эффективна для производительности, чтобы переключить ее на изоляцию моментальных снимков, чтобы избежать чтения читателями. More info on Snapshot isolation

Учитывая, что вызвало это, возможно, вы представили несколько медленных запросов на запись, ваши данные стали большими или у вас много фрагментации в ваших данных внезапно.

+0

Спасибо за информацию. Похоже, что рассматриваемый запрос - это в основном запрос на выбор, и в большинстве случаев он читает до трех строк из таблицы в любой момент времени. Каков наилучший способ проверить медленные запросы на запись? – TheITGuy

+0

Это зависит от того, насколько легко воспроизводиться. Монитор активности отслеживает блокировку по столбцу, а затем вы можете видеть, что ждет ваш выбор, другой вариант - трассировка или просмотр истории в DMV на SQL-сервере – jakobandersen

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