"Mutex at 0x7f5392142140 '&lock_sys->wait_mutex', lock var 1"
Дано:
- Debian GNU/Linux 9
- mysql Ver 15.1 Distrib 10.1.41-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
- cpu: 8 cores
- mem: 64Gb
- dsk: ssd (не знаю чьё производство)
Имеется база db2go. В ней несколько таблиц. Основная работа производится с двумя таблицами: tbl_sm
и tbl_act
.
Запросов к базе — около 10к в секунду.
Чтобы не выдавать одни и те же данные юзерам (конкуренция?) пришлось воткнуть транзакции.
Запросы на выборку данных (транзакция) выглядит так:
START TRANSACTION;
SELECT * FROM tbl_sm USE INDEX (comb_count) WHERE user_team_id IN (100,185,210,402,437,439) AND service_id = 'srv_code' AND country_id = 'ru' AND status = 0 AND count = 0 LIMIT 1 FOR UPDATE;
UPDATE tbl_sm SET status='1' WHERE data=значение;
INSERT INTO tbl_act ... ;
COMMIT;
Спустя какое-то время — от 5 минут до 10 часов (может и дольше проработать) — всё падает.
В SHOW FULL PROCESSLIST
100 500 висящих запросов, которые не выполняются, а запросы со стороны юзеров просто отваливаются по таймауту (Apache + PHP).
SHOW ENGINE INNODB STATUS;
показывает гору такого (под тысячу строк):
--Thread 139961126549248 has waited at lock0wait.cc line 80 for 0.0000 seconds the semaphore:
Mutex at 0x7f5392142140 '&lock_sys->wait_mutex', lock var 1
При этом настройка транзакции выставлена как READ-COMMITED
.
Не знаю, откуда первопричина проблемы...