Ответ вслух Senior Транзакции и блокировки обновлено

Разбор жалоб на ожидание блокировок

Вопрос

Утром пользователи массово получают ошибки ожидания блокировок при проведении продаж. Как будете искать причину?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

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

Что должно прозвучать в ответе

  • Технологический журнал: события TLOCK, TTIMEOUT, TDEADLOCK, кто держит и кто ждёт

  • Найти «виновника»: длинные транзакции, регламентные задания, обмены

  • Проверить избыточные блокировки: всей таблицы, лишние измерения

  • Сократить транзакции: внешние вызовы и тяжёлые вычисления вынести

  • Перенести тяжёлые задания на ночь, мониторинг ЦУП

Что могут спросить следом

  • Как понять, какие данные блокировались?
  • Что делать, если блокировка нужна на много значений?

Разбор

Включаю технологический журнал с событиями TLOCK, TTIMEOUT и TDEADLOCK и контекстами. TTIMEOUT показывает, кто ждал и кто держал блокировку, по контексту видно модуль и строку. Обычно виновник длинная транзакция: обмен данными, который в одной транзакции грузит тысячи объектов, регламентное задание пересчёта или проведение с HTTP-вызовом. Дальше смотрю, не блокирует ли код лишнего: всю таблицу вместо конкретных товаров или по измерению, которого нет в условии. Лечу сокращением транзакций, разбиением загрузки на порции, переносом тяжёлых заданий на ночь и точечными блокировками. Для мониторинга использую ЦУП.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме