SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 21.09.2013 04:19:52

dark_drakon
Участник
Зарегистрирован: 24.07.2013
Сообщений: 4

зависание всех процессов mysql при количестве потоков более 100

Всем доброго дня.

Возникла следующая проблема.
Есть таблица задач для многопроцессового демона.
Формат таблицы (id,task,work). Движок - innodb. task - это задача, work - флаг занятости. Изначально при добавлении задачи work=0.

Параллельно работает много процессов. Одна задача должна достаться только одному процессу.

Беру задачу запросом вида:
SELECT `id`,`task` FROM `xxx` WHERE `work`=0 ORDER BY `id` ASC LIMIT 1 FOR UPDATE
И сразу же помечаем ее как занятую
UPDATE `xxx` SET `work`=1 WHERE `id`={xxx}
Ну и коммит в итоге:
$sql->commit();

У каждого процесса свое подключение к базе.

Теперь что касается проблемы. Если количество потоков примерно 90-100, то все работает прекрасно.

Но если количество потоков превышает эту цифру, ту спустя секунд 20-30 после запуска, все процессы подвисают
на операции SELECT `id`,`task` FROM `xxx` WHERE `work`=0 ORDER BY `id` ASC LIMIT 1 FOR UPDATE со статусом Sending data. Т.е. висит штук 200 процессов с описанными параметрами. Сама база отвечает, но никакие запросы не обрабатывает. Все идет в кучу к зависающим процессам.

Судя по всему, все упирается в какой-то установленный лимит. Но вот что это за лимит - никак не найду.
Дамп переменных сервера во вложенном файле.

Всем заранее спасибо за ответы.

Отредактированно dark_drakon (21.09.2013 04:22:18)


Прикрепленные файлы:
Attachment Icon var.txt, Размер: 8,374 байт, Скачано: 1,286

Неактивен

 

#2 08.10.2013 16:00:22

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: зависание всех процессов mysql при количестве потоков более 100

Точно все в одинаковом состоянии "Sending data" или какая-то одна в другом состоянии? Что видно снаружи - хватает ли памяти на сервере, используется ли диск. Пишется ли что-то в логи?

Неактивен

 

#3 08.10.2013 16:04:57

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: зависание всех процессов mysql при количестве потоков более 100

А остальные процессы в каком состоянии? И что в SHOW ENGINE INNODB STATUS?
И, может, они не подвисают, а реально пытаются получить данные? smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson