Il rilevamento dei deadlock in due fasi di Aria

Stai visualizzando una vecchia versione di questo article. Visualizza la versione più recente.

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.

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.