🗄️ SQL и базы данных  ·  20 вопросов  ·  ~43 мин  ·  ⏱ Таймер 43:00  ·  Сложный  · 

Блокировки и взаимные блокировки

Блокировка в тесте — не абстрактный запрет, а конкретное ожидание между транзакциями. Нужно понять, что удерживает UPDATE, зачем SELECT FOR UPDATE резервирует строки, как NOWAIT и SKIP LOCKED меняют поведение очереди, почему долгие транзакции увеличивают конфликтность и как противоположный порядок захвата двух ресурсов создаёт deadlock, который СУБД разрывает откатом.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выбери один ответ из четырёх. В тесте 20 вопросов и 43 минут. После завершения откроются общий процент, четыре тематические шкалы, правильные ответы и разбор каждого задания.
Вопрос 1 из 20
Когда UPDATE обычно удерживает блокировку изменённой строки?
SQL
BEGIN;
UPDATE accounts SET balance=balance-10 WHERE id=1;
-- блокировка строки id=1 удерживается
COMMIT;
Вопрос 2 из 20
Что делает SELECT ... FOR UPDATE?
SQL
BEGIN;
SELECT * FROM jobs
WHERE id=10
FOR UPDATE;
-- затем UPDATE
COMMIT;
Вопрос 3 из 20
Блокирует ли обычный SELECT строку так же, как FOR UPDATE?
SQL
-- сравните
SELECT * FROM jobs WHERE id=5;
SELECT * FROM jobs WHERE id=5 FOR UPDATE;
Вопрос 4 из 20
Почему условие FOR UPDATE без индекса может увеличить проблему конкуренции?
Вопрос 5 из 20
Когда освобождается блокировка после ROLLBACK TO SAVEPOINT для строк, изменённых после savepoint в PostgreSQL?
Вопрос 6 из 20
Что происходит со вторым UPDATE той же строки, пока первая транзакция не завершена?
SQL
-- T1
BEGIN; UPDATE accounts SET balance=90 WHERE id=1;

-- T2
UPDATE accounts SET balance=80 WHERE id=1; -- ожидает
Вопрос 7 из 20
Для чего полезен NOWAIT?
SQL
SELECT * FROM seats WHERE id=10 FOR UPDATE NOWAIT;
Вопрос 8 из 20
Для чего полезен SKIP LOCKED в очереди задач?
SQL
SELECT id FROM jobs
WHERE status='new'
ORDER BY id
FOR UPDATE SKIP LOCKED
LIMIT 1;
Вопрос 9 из 20
Какой риск у SKIP LOCKED вне очередей?
Вопрос 10 из 20
Что следует проверить при долгом ожидании блокировки?
Вопрос 11 из 20
Как возникает классический deadlock двух переводов?
SQL
-- T1: UPDATE account 1; затем UPDATE account 2
-- T2: UPDATE account 2; затем UPDATE account 1
Вопрос 12 из 20
Что делает PostgreSQL после обнаружения deadlock?
SQL
-- T1: UPDATE a; затем UPDATE b;
-- T2: UPDATE b; затем UPDATE a;
Вопрос 13 из 20
Чем обычное ожидание отличается от deadlock?
Вопрос 14 из 20
Почему deadlock может возникнуть не только на строках одной таблицы?
Вопрос 15 из 20
Что произойдёт с работой отменённой транзакции-жертвы?
Вопрос 16 из 20
Какая мера сильнее всего снижает риск deadlock при обновлении набора счетов?
SQL
SELECT id FROM accounts
WHERE id IN (8, 3, 5)
ORDER BY id
FOR UPDATE;
Вопрос 17 из 20
Почему транзакцию не стоит держать открытой, пока пользователь заполняет форму?
Вопрос 18 из 20
Как правильно реагировать на deadlock в приложении?
Вопрос 19 из 20
Почему слишком широкий WHERE увеличивает риск конфликтов?
Вопрос 20 из 20
Несколько работников параллельно забирают готовые задачи из одной таблицы. Какой вариант надёжнее для пакетной обработки?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу