Блокировки в СУБД
Системы управления базами данных обеспечивают возможность одному пользователю извлекать и модифицировать данные. Однако в современном мире тысячи людей могут вносить изменения в базу данных одновременно. Если пользователи в основном осуществляют только чтение данных, то такая нагрузка не представляет особой сложности для сервера базы данных. Но если некоторые пользователи одновременно добавляют и/или изменяют данные, то серверу приходится решать намного более сложные задачи.
Предположим, вы подготавливаете финансовый отчёт, который подводит итоги ежедневных продаж магазина за неделю. В то же время, когда вы работаете над отчётом, происходят следующие операции:
- Клиент покупает товар
- Другой клиент возвращает товар, который оказался бракованным, и получает возврат средств
- Магазин получает новую партию товаров
Таким образом, во время формирования вашего отчёта несколько пользователей изменяют информацию в базе данных. Так какие числа должны появиться в отчёте? 🧐
Ответ зависит от того, как ваш сервер обрабатывает блокировку.
Блокировка
Блокировка — это метод ограничения доступа к данным для обеспечения корректной обработки транзакций.
Серверы баз данных используют блокировки, чтобы управлять одновременным доступом к данным, чтобы пока одна транзакция работает с данными, другие транзакции не могли их изменять.
Когда данные в базе блокируются, другие пользователи, которые хотят изменить или прочитать эти же данные, должны подождать, пока блокировка не будет снята.
Гранулярность блокировок
Существует ряд различных стратегий, которые могут использоваться, как именно блокировать ресурс. Сервер может применять блокировку на одном из трёх разных уровней, или гранулярностей.
- Блокировка таблиц
Не позволяет нескольким пользователям одновременно изменять данные в одной таблице. - Блокировка страниц
Не позволяет нескольким пользователям изменять данные в одной и той же странице (страница — это сегмент памяти, обычно в диапазоне от 2 до 16 Кбайт) таблицы одновременно. - Блокировка строк
Не позволяет нескольким пользователям одновременно изменять одну и ту же строку в таблице.
Эти подходы имеют свои преимущества и недостатки. Блокировка всей таблицы требует небольшого времени, но при увеличении числа пользователей может привести к долгим ожиданиям. Блокировка строк требует большего объёма дополнительных действий, но зато позволяет нескольким пользователям изменять одну и ту же таблицу, если они работают с разными строками.
MySQL может использовать блокировку таблиц, страниц или строк в зависимости от вашего выбора механизма хранения. По умолчанию в MySQL используется механизм хранения InnoDB, который обеспечивает блокировку строк.
Перед тем как перейти к следующей статье о создании транзакций, давайте проверим как вы поняли этот урок.
Для чего нужна блокировка в СУБД ?