Переглянути останні кілька тупиків innodb


12

Я бачу, що я можу переглянути останню безвихідь у mysql / innodb, але чи є спосіб переглянути минулі тупики? У нас є дві проблеми з тупиком, одна важлива, а інша - ні. Менш важливий тупик відбувається кілька разів на день, тому він стає "останнім" тупиком.

Відповіді:


15

Існує налаштування, яке було введено в MySQL 5.5.30: innodb_print_all_deadlocks

Якщо цей параметр увімкнено, інформація про всі тупикові місця в транзакціях користувача InnoDB записується в журнал помилок mysqld. В іншому випадку ви бачите інформацію лише про останній тупик, використовуючи команду SHOW ENGINE INNODB STATUS. Випадковий тупик InnoDB не обов'язково є проблемою, оскільки InnoDB виявляє стан негайно, і повертає одну з транзакцій автоматично. Ви можете скористатися цією опцією, щоб вирішити, чому виникають тупикові місця, якщо програма не має відповідної логіки керування помилками, щоб виявити відкат та повторити його роботу. Велика кількість тупиків може вказувати на необхідність реструктуризації транзакцій, які видають оператори DML або SELECT ... FOR UPDATE для декількох таблиць, щоб кожна транзакція отримувала доступ до таблиць в одному порядку, тим самим уникаючи умови тупикового зв'язку.

Просто додайте цей параметр до my.cnf

[mysqld]
innodb_print_all_deadlocks = 1

або

[mysqld]
innodb_print_all_deadlocks = on

Вам не доведеться перезавантажувати mysql. Просто увійдіть в mysql і запустіть

mysql> SET GLOBAL innodb_print_all_deadlocks = 1;

or

mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';

Ця настройка також нова для мене.

Спробуйте і скажіть нам все, що ви думаєте !!!


Ми працюємо 5.5.34. Чи є варіанти для нашої версії?
gwgeller

Моя помилка. Він знаходиться в 5,5 dev.mysql.com/doc/refman/5.5/en / ... . Я оновлю свою відповідь.
RolandoMySQLDBA

Працює як рекламується, дякую! Я змінив налаштування за допомогою sql, тому мені не довелося перезавантажувати. Випадково у журналі помилок сталося кілька менш серйозних тупиків.
gwgeller

Встановлення значення під час виконання для мене не працює, воно нічого не записує в журнал помилок.
лапо

1
@Jordan AWS ніколи не видає SUPER, і я згадував про це 6 років тому: dba.stackexchange.com/questions/34525/… . Вони використовують тригери, щоб переконатися, що ви не можете зламати mysql.userта запускати FLUSH PRIVILEGES;.
RolandoMySQLDBA
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.