Что такое тупик в sql-сервере и когда он возникает? Каковы проблемы с тупиком и как его решить?
Что такое тупик в базе данных?
Ответ 1
В общем, взаимоблокировка означает, что две или более сущностей блокируют некоторые источники, и ни одна из них не может завершить работу, поскольку они циклически блокируют источники.
Один пример: допустим, у меня есть таблица A и таблица B, мне нужно сделать некоторое обновление в A, а затем B, и я решил заблокировать их в момент использования (это действительно глупое поведение, но сейчас оно служит цели), В то же время кто-то другой делает то же самое в обратном порядке - сначала блокирует B, затем блокирует A.
Хронологически это происходит:
proc1: блокировка A
proc2: блокировка B
proc1: Lock B - начинает ждать, пока proc2 не выпустит B
proc2: Lock A - начинает ждать, пока proc1 выпустит A
Ни один из них никогда не закончится. Это тупик. На практике это обычно приводит к ошибкам тайм-аута, поскольку нежелательно, чтобы какой-либо запрос зависал вечно, а базовая система (например, база данных) будет убивать запросы, которые не завершаются вовремя.
Один из реальных примеров тупика - это когда вы запираете ключи от дома в машине, а ключи от машины - в своем доме.
Ответ 2
Тупик - это то, что происходит, когда двум людям требуется несколько ресурсов для выполнения, и где некоторые из ресурсов блокируются каждым из людей. Это приводит к тому, что A не может выполняться без чего-то B и наоборот.
Предположим, что у меня есть Person A и Person B. Оба они должны получить две строки для запуска (Row1 и Row2).
- Лицо A блокирует Row1 и пытается получить Row2.
- Лицо B блокирует Row2 и пытается получить Row1.
Лицо A не может работать, потому что ему нужно Row2, Person B не может работать, потому что ему нужен Row1. Ни один человек никогда не сможет выполнить, потому что они блокируют то, что нужно другим, и наоборот.
Один достаточно простой способ уменьшить тупик - во всех сложных транзакциях, вы должны выполнять операции в том же порядке. Другими словами, Access Table1, затем Table2 в том же порядке. Это поможет уменьшить количество тупиков, которые происходят.
Ответ 3
Тупик, который может возникнуть, когда две (или более) транзакции ожидая освобождения замков, которые удерживаются другим.