Повреждение, управляющее взаимоблокировками на SQL Сервере путем переключения уровня изоляции? - PullRequest
0 голосов
/ 28 февраля 2020

Я присоединился к проекту некоторое время go, который состоит из нескольких веб-серверов и нескольких внутренних серверов.

Все они выполняют CRUD-операции в одной базе данных.

К сожалению, Несколько столов на какое-то время оказались в тупиковой ситуации. Мы можем видеть эти заявления жертвы через SQL Server Management Studio и ее расширенную функцию событий.

Первичные ключи и все необходимые индексы уже установлены. Мы даже восстановили их, многие из них имели фрагментацию более 50%.

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

Одна таблица содержит журналы (логин пользователей, задачи, которые начинались и заканчивались на серверах, yadda yadda .. .), другой содержит все процессы, поэтому бэкэнды выбирают, вставляют и обновляют (например, устанавливают поле «running» от 0 до 1 и наоборот). Хотя первый по причинам ведения журнала может быть полезен для уровня снимка, я сомневаюсь, что он может быть рекомендован для таблицы процессов, насколько я понял, как работает выравнивание снимков. И я также знаю, что откат транзакций в любом случае заблокирует таблицы во время процесса отката.

Даже таблица sysobjects иногда блокируется, когда таблица должна быть удалена. И я должен отметить, что база данных смехотворно велика, как и многие другие таблицы.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...