powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Deadlock при delete/insert
8 сообщений из 8, страница 1 из 1
Deadlock при delete/insert
    #39133347
petr12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется таблица активность пользователей
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE IF NOT EXISTS `user_onlines` (
  `id` bigint(14) NOT NULL,
  `gender` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



В нее происходит запись когда юзер логинится
Код: sql
1.
INSERT INTO `user_onlines` (`id`, `gender`) VALUES($user_id, $gender)



и удаление записи когда выходит.
Код: sql
1.
DELETE FROM `user_onlines` WHERE id=$user_id



Периодически (не часто) раз в несколько дней получается deadlock

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
mysql> SHOW ENGINE INNODB STATUS;
...
------------------------
LATEST DETECTED DEADLOCK
------------------------
2015-12-20 06:43:28 7fe014e92700
*** (1) TRANSACTION:
TRANSACTION 11805790882, ACTIVE 0 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 2 lock struct(s), heap size 360, 1 row lock(s)
MySQL thread id 372661, OS thread handle 0x7fe00da00700, query id 4037658 127.0.0.1 root updating
DELETE FROM `user_onlines` WHERE id=14505852416379
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 32472 page no 5 n bits 320 index `PRIMARY` of table `dating`.`user_onlines` trx table locks 1 total table locks 2  trx id 11805790882 lock_mode X locks rec but not gap waiting lock hold time 0 wait time before grant 0
*** (2) TRANSACTION:
TRANSACTION 11805790875, ACTIVE 0 sec inserting
mysql tables in use 1, locked 1
3 lock struct(s), heap size 1184, 2 row lock(s)
MySQL thread id 372662, OS thread handle 0x7fe014e92700, query id 4037646 127.0.0.1 root update
INSERT INTO `user_onlines` (`id`, `gender`) VALUES(14505852416379, 1)
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 32472 page no 5 n bits 320 index `PRIMARY` of table `dating`.`user_onlines` trx table locks 1 total table locks 2  trx id 11805790875 lock mode S locks rec but not gap lock hold time 0 wait time before grant 0
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 32472 page no 5 n bits 320 index `PRIMARY` of table `dating`.`user_onlines` trx table locks 1 total table locks 2  trx id 11805790875 lock_mode X locks rec but not gap waiting lock hold time 0 wait time before grant 0
*** WE ROLL BACK TRANSACTION (1)



Кто-то может объяснить почему ловится дедлок и что делать?
...
Рейтинг: 0 / 0
Deadlock при delete/insert
    #39133368
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petr12345,

В какой-то момент вы одновременно пытаетесь и вставить запись с id=14505852416379, и удалить её же.
...
Рейтинг: 0 / 0
Deadlock при delete/insert
    #39133387
petr12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что делать?
...
Рейтинг: 0 / 0
Deadlock при delete/insert
    #39133390
petr12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С тем что одновременно приходят запросы - тоже понятно. Но почему так происходит? Кто что блокирует?
Никаких транзакция я явно не открываю.
...
Рейтинг: 0 / 0
Deadlock при delete/insert
    #39133393
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petr12345,

Откуда у вас происходит значение $user_id ?
...
Рейтинг: 0 / 0
Deadlock при delete/insert
    #39133402
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petr12345Никаких транзакция я явно не открываю.Они открываются автоматически при любом UPDATE/INSERT/DELETE. И, если не включен автокоммит, остаются открытыми до явного или неявного завершения.
...
Рейтинг: 0 / 0
Deadlock при delete/insert
    #39133418
petr12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
Из запроса к бекенду.

Как я понимаю insert получает сперва блокировку S, в этот момент другой запрос просит блокировку X для delete, затем первый просит блокировку X. Если это так, то вопрос - на фига insert-у блокировка S ?
...
Рейтинг: 0 / 0
Deadlock при delete/insert
    #39142462
Artemeey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petr12345,

Если добавляются транзакции - их лучше убрать - это атомарная операция.
Так же необходимо проверить, когда делаются бекапы или оптимизации таблиц, если они делаются по крону - то нужно помнить, что такие операции блокируют таблицы полностью на запись.

Так же можно попробовать использовать дополнительную колонку `last_active` = NOW() ()в таблице с пользователями или отдельно, и обновлять строку (без удалений и вставок).
Если значение `last_active` больше чем NOW() - 60*5 - то человек скорее всего онлайн.
В вашем варианте человек может не нажать "выход" и будет онлайн всегда (если это не контролирует другая функция).
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Deadlock при delete/insert
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]