Как найти, какая транзакция вызывает состояние "ожидание блокировки метаданных таблицы"?



Я пытаюсь выполнить некоторые DDL на столе и SHOW PROCESSLIST приводит к сообщению "ожидание блокировки метаданных таблицы".



Как я могу узнать, какая транзакция еще не закрыта?



Я используете MySQL версии 5.5.24.

443   4  

4 ответов:

SHOW ENGINE INNODB STATUS \G

ищите раздел -

TRANSACTIONS

можно использовать базы данных information_schema таблицы.

Полезные Запросы

чтобы проверить все транзакции блокировки ждут:

USE INFORMATION_SCHEMA;
SELECT * FROM INNODB_LOCK_WAITS;

список блокирующих транзакций:

SELECT * 
FROM INNODB_LOCKS 
WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);

или

SELECT INNODB_LOCKS.* 
FROM INNODB_LOCKS
JOIN INNODB_LOCK_WAITS
  ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID);

список блокировок на таблицу определенным:

SELECT * FROM INNODB_LOCKS 
WHERE LOCK_TABLE = db_name.table_name;

список транзакций, ожидающих блокировки:

SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY
FROM INNODB_TRX
WHERE TRX_STATE = 'LOCK WAIT';

ссылка -Устранение неполадок MySQL: что делать, когда запросы не работают Глава 6 - Страница 96.

Если вы не можете найти процесс блокировки таблицы (потому что он уже мертв), это может быть поток все еще очищается, как это

раздел транзакции

show engine innodb status;

В конце

---TRANSACTION 1135701157, ACTIVE 6768 sec
MySQL thread id 5208136, OS thread handle 0x7f2982e91700, query id 882213399 xxxIPxxx 82.235.36.49 my_user cleaning up

как упоминалось в комментарии очистить взаимоблокировки транзакций?

вы можете попробовать убить поток транзакций напрямую, вот с

 KILL 5208136;

работал для меня.

mysql 5.7 предоставляет информацию о блокировке метаданных через performance_schema.metadata_locks таблица.

документация здесь

У меня была аналогичная проблема с Datagrip и ни одно из этих решений работал.

Как только я перезапустил клиент Datagrip, это больше не было проблемой, и я мог снова отбросить таблицы.

Comments

    Ничего не найдено.