Как работает механизм блокировок при попытке удалить большое количество данных?
Предположим у нас есть таблица с миллионом строк: id инкремент и любые столбцы с данными.
Я знаю, что попытка удалить большое количество данных из таблица рождает проблему блокировок, но с самим их механизмом знаком очень-очень поверхностно
Подскажите, пожалуйста:
- Что будет, если я напишу запрос, удаляющий 90% записей (delete t from table as t where id<900000)? Опишите, пожалуйста, детально схему блокировок (я интуитивно предполагаю, что изначально вся таблица должна быть заблочена чем-то вроде UIX, а затем постепенно будут выдаваться X-блокировки на какое-то количество строк/страниц).
- У нас на проекте для подобных операций используется "порционное удаление" по несколько тысяч записей за раз. Как мне объясняли, есть некий лимит строк, при запросе на удаление которого, таблица как-то страшно блокируется (Sch-M?). Подскажите, какое количество строк есть та верхняя граница, после которой таблица блокируется намертво и как именно это происходит?
Источник: Stack Overflow на русском