Я присоединился к проекту некоторое время go, который состоит из нескольких веб-серверов и нескольких внутренних серверов.
Все они выполняют CRUD-операции в одной базе данных.
К сожалению, Несколько столов на какое-то время оказались в тупиковой ситуации. Мы можем видеть эти заявления жертвы через SQL Server Management Studio и ее расширенную функцию событий.
Первичные ключи и все необходимые индексы уже установлены. Мы даже восстановили их, многие из них имели фрагментацию более 50%.
Дело в том, что есть одна таблица, которую мы хотели бы переключить на уровень изоляции, называемый SNAPSHOT. Я знаю, что это вообще не решит тупиковую ситуацию, поэтому я прочитал, что операторы записи могут блокировать друг друга.
Одна таблица содержит журналы (логин пользователей, задачи, которые начинались и заканчивались на серверах, yadda yadda .. .), другой содержит все процессы, поэтому бэкэнды выбирают, вставляют и обновляют (например, устанавливают поле «running» от 0 до 1 и наоборот). Хотя первый по причинам ведения журнала может быть полезен для уровня снимка, я сомневаюсь, что он может быть рекомендован для таблицы процессов, насколько я понял, как работает выравнивание снимков. И я также знаю, что откат транзакций в любом случае заблокирует таблицы во время процесса отката.
Даже таблица sysobjects иногда блокируется, когда таблица должна быть удалена. И я должен отметить, что база данных смехотворно велика, как и многие другие таблицы.
Что я хотел бы знать, так это то, что вы, ребята, когда-нибудь переходили с любого уровня изоляции на снимок и с какими проблемами вам приходилось сталкиваться, или даже если вы передумали, когда речь шла о предотвращении взаимоблокировок, и попробовали другой подход, например, обновление оборудования и т. д. c ...