Быстрое онлайн-решение для устранения неполадок в Mysql

причина:

        Для нескольких сеансов sql из-за конкуренции за ресурсы обе стороны ожидают освобождения блокировки, и в это время произойдет взаимоблокировка.

тип блокировки mysql:

        Общая блокировка, блокировка чтения, блокировка S: несколько транзакций могут совместно использовать блокировку для одних и тех же данных и могут только читать, но не записывать.
        Эксклюзивная блокировка, блокировка записи, блокировка X: только одна транзакция может получить ее одновременно. Когда данные заблокированы, другие транзакции не могут их изменить.

        Блокировка намерения ix — это
        транзакция A, которая изменяет запись r пользовательской таблицы, она дает записи r монопольную блокировку на уровне строки (X) и в то же время дает пользовательской таблице монопольную блокировку намерения (IX) , В это время транзакция B предоставит
        монопольную блокировку на уровне таблицы для пользовательской таблицы. Таким образом, блокировки намерений реализуют сосуществование блокировок строк и блокировок таблиц и отвечают требованиям изоляции транзакций.

пример:     

t1:
        начать транзакцию;
        выберите * из fenqu, где id=30 для обновления;
        обновить тестовый набор code=30, где id=31;

t2:
        начать транзакцию;
        выберите * из fenqu, где id=31 для обновления;
        обновить тестовый набор code=31, где id=30;

t1 изменяет 31 после блокировки 30, а t2 изменяет 30 после блокировки 31. В
это время, поскольку 30 и 31 оба установлены с эксклюзивными блокировками, они ждут освобождения другой стороны, таким образом образуя взаимоблокировку.

План быстрого устранения неполадок:

Вариант первый:

        запрос таблицы

        В собственной библиотеке mysql есть две таблицы INFORMATION_SCHEMA:
        INNODB_LOCKS: Предоставляет информацию о каждой блокировке, которую транзакция InnoDB запросила, но еще не получила, и о каждой блокировке, удерживаемой транзакцией, которая предотвращает другую транзакцию.
        INNODB_LOCK_WAITS: содержит одну или несколько строк для каждой заблокированной транзакции InnoDB с указанием запрошенных блокировок и любых блокировок, блокирующих этот запрос.

        ВЫБЕРИТЕ * ИЗ INFORMATION_SCHEMA.INNODB_LOCKS;

         Идентификатор транзакции 249187 заблокирован блокировкой с идентификатором 249119

Вариант 2:

        запрос журнала

        ПОКАЗАТЬ СТАТУС ДВИГАТЕЛЯ INNODB;

        

третье решение:

        При использовании облачных сервисов Alibaba;

        ApsaraDB для DAS -> выбор экземпляра -> производительность в реальном времени -> анализ блокировок -> немедленная диагностика; 

        

 

Supongo que te gusta

Origin blog.csdn.net/weixin_56766616/article/details/127785994
Recomendado
Clasificación