практика 'Блокировки'
This commit is contained in:
@@ -0,0 +1,21 @@
|
|||||||
|
-- Задание 1
|
||||||
|
SELECT * FROM mnoskov.users WHERE id = 1;
|
||||||
|
-- Если две одновременные сессии выполнят этот запрос, то в обеих все выведется, и ошибок или очереди не бкдет
|
||||||
|
-- Потому что этот запрос только на чтение
|
||||||
|
|
||||||
|
|
||||||
|
-- Задание 2
|
||||||
|
-- Первая сессия будет просто ждать окончания выполнения первой
|
||||||
|
-- Если разрешить обоимUPDATE пройти одновременно, то получится какая-то херня пологаю, они смешаются, или че-то такое
|
||||||
|
-- У Alice в итоге останется второй email, тк он выполнится последним. Порядок COMMIT важен, тк в последствии этого порядка будут выполняться запросы
|
||||||
|
|
||||||
|
|
||||||
|
-- Задание 3
|
||||||
|
-- select выполнится тк просто читает, а update встанет в очередь, тк он попытается изменить 'забронированные данные'
|
||||||
|
-- FOR UPDATE помогает избежать ошибок когда происходит покупка товара или че то такое, когда идет процесс изменений в данных
|
||||||
|
|
||||||
|
|
||||||
|
-- Задание 4
|
||||||
|
-- Дедлок возникает потому что каждая сессия заблокировал то, что нужно другой сессии. База отменит одну из сессий, чтобы прошла хоть какая-то
|
||||||
|
-- Чтобы дедлок не возникал, нужно обновления все производить в одном порядке
|
||||||
|
-- Если при массовых обновлениях не соблюдать порядок строк, то будет возникать жопа из дедлоков
|
||||||
Reference in New Issue
Block a user