"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.

Не знаю, откуда первопричина проблемы...


Ответы (0 шт):