Комментарии 11
А ты так, от скуки написал? Или решал бизнес-задачу? :)
Можете пояснить, пожалуйста, в какой ситуации это может понадобиться?
В первую очередь этот патч добавляет поддержку детектора дедлоков в user level lockи, что полезно если они используются в любых нетривиальных сценариях.
А в остальном, думаю надо разбираться по ситуации, скорее всего это связано как-то с управлением задачами или очередями — когда нужно исключить возможность одновременной работы двух или более клиентов, выполнить какую-то нетривиальную синхронизацию.
А в остальном, думаю надо разбираться по ситуации, скорее всего это связано как-то с управлением задачами или очередями — когда нужно исключить возможность одновременной работы двух или более клиентов, выполнить какую-то нетривиальную синхронизацию.
Эх, вот бы ещё патчик, который бы позволял в одном запросе более одного раза обращаться к временной таблице…
Очень круто, спасибо.
Можешь объяснить, в какой ситуации может повиться дедлок — эти user lock'и же не участвуют в транзакциях, не привязаны ни к каким ресурсам — откуда дедлоки, если они еще и рекурсивны теперь?..
Можешь объяснить, в какой ситуации может повиться дедлок — эти user lock'и же не участвуют в транзакциях, не привязаны ни к каким ресурсам — откуда дедлоки, если они еще и рекурсивны теперь?..
Дедлок был возможен всегда например вот в такой ситуации:
connection c1:
lock table t1 write;
connection c2:
select get_lock('test', 0)
connection c1:
select get_lock('test', 7200)
connection c2:
lock table t2 write;
Ну а теперь может быть такой дедлок:
connection c1:
select get_lock('test1', 0)
connection c2:
select get_lock('test2', 0)
connection c1:
select get_lock('test2', 7200)
connection c2:
select get_lock('test1', 7200)
Патч все такие дедлоки ловит, выдаёт ошибки. Точнее, ловит MDL, патч просто это всё использует.
connection c1:
lock table t1 write;
connection c2:
select get_lock('test', 0)
connection c1:
select get_lock('test', 7200)
connection c2:
lock table t2 write;
Ну а теперь может быть такой дедлок:
connection c1:
select get_lock('test1', 0)
connection c2:
select get_lock('test2', 0)
connection c1:
select get_lock('test2', 7200)
connection c2:
select get_lock('test1', 7200)
Патч все такие дедлоки ловит, выдаёт ошибки. Точнее, ловит MDL, патч просто это всё использует.
Здесь точно разные таблицы?
(пример №1)
connection c1:
lock table t1 write;
connection c2:
lock table t2 write;
(пример №1)
connection c1:
lock table t1 write;
connection c2:
lock table t2 write;
Опечатка, одна коненчо. Принцип понятен :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Патч, позволяющий каждому коннекту иметь много user lock объектов