TRANSACTION ISOLATION LEVEL READ COMMITTED
счет идет на сотни тысяч. приложения не используют транзакции. это сам mysql сервер их подставляет? репликация row
Вопрос возник т.к. реплика споткнулась об один такой запрос и встала в состояние
Slave_SQL_Running_State: Waiting for dependent transaction to commit
на двух разных серверах на одной позиции
Что то мне подсказывает у вас клиент выставляет уровень изоляции
Логично предположить судя по объему этих транзакций в бинлоге, но, специально, в коде транзакции не ставятся точно. клиент на php yii2
Проблема не в том, что у вас транзакции используются, в innoDB, как уже заметила Света, даже select запрос - это транзакция. Реплика встала, вероятно потому, что у вас параллельные воркеры сконфигурены. Независимые транзакции будут параллельно применяться, а зависимые операции будут ждать друг друга. Грубо говоря, если транзакция 1 вставляет в таблицу запись, а транзакция 2 потом обновляет данные в этой записи, то 2 не может выполниться раньше 1. Скорее всего у вас просто какой-то очень долгий запрос (Update/Delete) применяется на реплике, в результате просто все остальное висит и ждет его. Я бы в эту сторону смотрел. А на счет READ COMMITTED - это не дефолтный уровень изоляции. Следовательно либо у вас глобально изменен уровень изоляции, либо ваш клиент выставляет этот уровень.
Да, многопоточность была настроена, но, после того как реплика стопнулась на полчаса, многопоточность убрали и перезапускали реплику в один поток, но это не помогло. Помогло только скипнуть эту танзакцию
ну так вам нужно разобраться, почему конкретно этот запрос бежал долго, проблема не в транзакционности, а в том, что запрос бежит очень долго
Обсуждают сегодня