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