Salta ai contenuti

Deadlock

Qui il problema non è il carico: è l’incastro sbagliato

Sezione intitolata “Qui il problema non è il carico: è l’incastro sbagliato”

Un deadlock succede quando due transazioni si aspettano a vicenda e nessuna può proseguire. È come due persone ferme in un corridoio stretto, ognuna in attesa che si sposti l’altra.

  • la transazione A blocca la riga 1 e poi vuole la riga 2
  • la transazione B blocca la riga 2 e poi vuole la riga 1

Risultato: si fermano entrambe.

Molti database sanno rilevare questa situazione e annullano una delle due transazioni per sbloccare il sistema.

Questo non significa che il database “ha perso dati” a caso. Di solito annulla una transazione, segnala l’errore e lascia all’applicazione il compito di riprovare se ha senso.

Puoi abbassare la probabilità di deadlock se:

  • tieni le transazioni brevi
  • accedi alle tabelle sempre nello stesso ordine
  • eviti operazioni inutilmente lunghe mentre i lock sono attivi

Capire i deadlock è importante perché ti insegna che la concorrenza non è magia: è coordinazione.

Se due parti del programma modificano sempre clienti e poi ordini, è meglio che tutte seguano quell’ordine.

Quando ogni pezzo del sistema prende le risorse nello stesso ordine, gli incastri diventano meno probabili.