Я могу быть жертвой мертвой блокировки, если я не выполняю запрос в рамках транзакции?

Позволяет говорят, что я открываю транзакцию и выполняю запросы на обновление.

BEGIN TRANSACTION
UPDATE x SET y = z WHERE w = v

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

В то время как я сижу на транзакции, это когда-нибудь возможный, что оборудование для мертвой блокировки MSSQL смогло бы вытеснить мою открытую транзакцию, которая на самом деле не выполняет ничего для или очистки мертвой блокировки или бесплатных ресурсов, поскольку системная память / пределы ресурса достигнута?

Я знаю о НАБОРЕ DEADLOCK_PRIORITY и прочитал статьи MSDN о теме мертвых блокировок. Логически, так как я активно не стремлюсь делать ставку на требование на любых дополнительных ресурсах, я не могу вообразить сценарий, который инициировал бы нормальный алгоритм предотвращения мертвой блокировки.

Кто-либо знает наверняка, если ее возможное, что просто содержание каких-либо блокировок может сделать меня допустимой целью? Так же какое-либо низкое условие ресурса могло инициировать уничтожение моего SPID?

5
задан Einstein 13 January 2010 в 07:26
поделиться

4 ответа

Нет

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

Что касается других условий, которые могут убить вашу сессию, я могу подумать, что не менее трех:

  • административных операций, которые используют с Rollback_immediate
  • отказ от зеркального отказа
  • Intreental Убить , Возможно, как шутка вашей дружелюбной DBA
3
ответ дан 14 December 2019 в 19:14
поделиться

Возможные проблемы:

  1. SQL Server только имеет конечное число блокировок. Возможно исчерпать блокировки.

  2. Другие ресурсы конечны (например, память, tempdb). Держание за эти ресурсы могло заставить те ресурсы заканчиваться.

  3. Журналы транзакций - логические журналы транзакций не могут быть освобождены для повторного использования, если транзакция открыта. Результатом могла быть регистрация, которая заполняется. Эта проблема могла остановить ваш процесс, потому что это остановит весь экземпляр.

Для рассмотрения:

  1. КАСКАД: УДАЛИТЬ может только иметь одну таблицу в команде, но КАСКАДНЫЕ отношения могут коснуться других таблиц.

  2. Триггеры: Включает измененную таблицу, может влиять на другие таблицы.

  3. УДАЛЯЮТ и ОБНОВЛЯЮТ команды, может использовать ИЗ пункта, которые касаются других таблиц. Я никогда не видел это, но я не исключил бы его.

0
ответ дан 14 December 2019 в 19:14
поделиться

Снарежения могут время, это то, что происходит.

Как у вас есть как минимум 1 (или более) блокировки обновлений, вынесенные и делают некоторые блокировки сканирования чтения и таблиц, вы можете быть убиты, чтобы помочь освободить тупики, созданные другими транзакциями. Код восстановления тупика в SQL Server вряд ли будет полностью освобожден ошибками, и он не нормально, чтобы недолго отключить транзакцию на SQL Server. Однако я бы не ожидал, что это произойдет часто.


Некоторые системы, когда они отделяют проблему Type Type, просто начните убивать «долгоживущие» транзакции, которые не выполняли работу, чтобы освободить замки. То, что вы не являетесь частью тупиковой петли, не останавливает на вас систему.

Чтобы понять, что происходит в Ваше дело , вам придется использовать SQL Server Server Profiler , чтобы собрать все связанные сочетания блокировки и тупика, а также событие о прервании Подключение и транзакции и т. Д. Хорошо отсутствие этого будет время некоторое время и хороший уровень понимания событий профилировщиков, на которых вы смотрите ...

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

0
ответ дан 14 December 2019 в 19:14
поделиться

Просто потому, что вы не в транзакции, не означает, что вы не удерживаете замки.

-1
ответ дан 14 December 2019 в 19:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: