Visualizza gli ultimi deadlock innodb


12

Vedo che posso visualizzare l'ultimo deadlock in mysql / innodb, ma c'è un modo per visualizzare i deadlock passati? Abbiamo due problemi di deadlock, uno importante e l'altro no. Il deadlock meno importante si verifica più volte al giorno, quindi diventa il deadlock "più recente".

Risposte:


15

C'è un'impostazione introdotta in MySQL 5.5.30: innodb_print_all_deadlocks

Quando questa opzione è abilitata, le informazioni su tutti i deadlock nelle transazioni degli utenti di InnoDB vengono registrate nel registro degli errori mysqld. In caso contrario, vengono visualizzate informazioni solo sull'ultimo deadlock, utilizzando il comando SHOW ENGINE INNODB STATUS. Un deadlock occasionale di InnoDB non è necessariamente un problema, poiché InnoDB rileva immediatamente la condizione e ripristina automaticamente una delle transazioni. È possibile utilizzare questa opzione per risolvere il motivo per cui si verificano deadlock se un'applicazione non dispone di una logica di gestione degli errori appropriata per rilevare il rollback e riprovare a eseguire l'operazione. Un gran numero di deadlock potrebbe indicare la necessità di ristrutturare le transazioni che emettono istruzioni DML o SELECT ... FOR UPDATE per più tabelle, in modo che ogni transazione acceda alle tabelle nello stesso ordine, evitando così la condizione di deadlock.

Aggiungi questa impostazione a my.cnf

[mysqld]
innodb_print_all_deadlocks = 1

o

[mysqld]
innodb_print_all_deadlocks = on

Non è necessario riavviare mysql. Accedi a mysql ed esegui

mysql> SET GLOBAL innodb_print_all_deadlocks = 1;

or

mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';

Questa impostazione è nuova anche per me.

Fai una prova e ci dice tutto quello che pensi !!!


Stiamo eseguendo 5.5.34. Ci sono opzioni per la nostra versione?
gwgeller,

Errore mio. È in 5.5 dev.mysql.com/doc/refman/5.5/en/… . Aggiornerò la mia risposta.
RolandoMySQLDBA

Funziona come pubblicizzato, grazie! Ho modificato l'impostazione usando sql, quindi non ho dovuto riavviare. Per coincidenza, si sono verificati un paio di deadlock meno gravi che sono comparsi nel registro degli errori.
gwgeller,

L'impostazione del valore in fase di runtime non funziona per me, non scrive nulla nel registro degli errori.
lapo

1
@Jordan AWS non emette mai SUPER e l'ho menzionato 6 anni fa: dba.stackexchange.com/questions/34525/… . Usano i trigger per assicurarsi che non sia possibile hackerare mysql.usered eseguire FLUSH PRIVILEGES;.
RolandoMySQLDBA,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.