Il rilevamento dei deadlock in due fasi di Aria
Spiegazione
Lo Storage Engine Aria è capace di rilevare e gestire automaticamente i deadlocks.
Questa caratteristica è controllata da quattro variabili di configurazione: due controllano la profondità della ricerca e due controllano il timeout.
deadlock_search_depth_long
deadlock_search_depth_short
deadlock_timeout_long
deadlock_timeout_short
I dettagli della configurazione di queste variabili si trovano alla pagina Aria Server System Variables.
Come funziona
Se Aria non riesce ad acquisire un lock, potrebbe essersi verificato un deadlock. Esistono principalmente due modi per determinare se un deadlock è effettivamente presente. Il primo è cercare un wait-for graph e il secondo è semplicemente aspettare e lasciare che il deadlock si manifesti. Il rilevamento dei deadlock in due fasi di Aria si basa su una combinazione dei due metodi.
Prima, se la richiesta del lock non può essere soddisfatta immediatamente, esegue una breve ricerca del wait-for graph con una profondità limitata, configurata tramite la variabile deadlock_search_depth_short
. La profondità ha un limite perché il grafo potrebbe (teoricamente) essere arbitrariamente grande e non è desiderabile attraversarlo interamente con una ricerca ricorsiva. La breve ricerca iniziale è molto veloce e la maggior parte dei deadlock viene rilevata subito. Se non si trovano cicli, il sistema attende l'ammontare di tempo configurato in deadlock_timeout_short
per vedere se i conflitti dei lock vengono rimossi e la richiesta viene soddisfatta. Se questo non accare, il sistema passa alla seconda fase, che è una ripetizione del procedimento ma questa volta con una maggiore profondità, determinata da deadlock_search_depth_long
. Se non viene rilevato alcun deadlock, attende per il tempo stabilito da deadlock_timeout_long
e poi avviene il timeout.
Se viene rilevato un deadlock il sistema utilizza una algoritmo di controllo per determinare quale thread nel deadlock debba essere terminato, e lo termina.