Locking delle tabelle in MySQL

23 dicembre 2008

Il procedimento detto Locking (“blocco” o anche “uso esclusivo”) delle tabelle o dei record di un database rappresenta un soluzione grazie alla quale è possibile risolvere il problema della “concorrenza” (o “collo di bottiglia”), cioè quel fenomeno che si verifica quando più di un processo cerca di manipolare i dati contenuti all’interno di uno stesso archivio.

Il database manager MySQL mette a disposizione due tipologie differenti per il locking:

  • Locking a carico delle tabelle, in cui intere tabelle vengono riservate per l’esecuzione di determinati processi;
  • Locking a carico dei records, in cui soltanto i records specificati sono riservati per determinati processi.

Nello stesso modo, il DBMS è in grado di gestire due diverse procedure di locking:

  • Internal Locking: può essere effettuato direttamente tramite MySQL per la gestione delle priorità durante i processi simultanei; viene definito “Locking interno” perché essendo completamente gestito dal database server stesso non necessita di programmi esterni per il controllo della concorrenza.
  • External locking: viene effettuato sinergicamente e in modo coordinato dal database server e da un programma esterno (da cui la definizione “Locking esterno”), entrambi partecipano nello stabilire quali applicazioni possono accedere ai dati e in quale momento.

Il locking rappresenta una soluzione ottimale sia per una gestione razionale dei processi che per il risparmio delle risorse messe a disposizione da un sistema, è bene però stabilire in quali casi esso dovrebbe essere applicato e in quali risulterebbe invece una procedura superflua o addirittura controproducente.

Tipologie di uso esclusivo delle tabelle

Il locking si basa su specifiche tipologie di variabili chiamate Locks e dotate di particolari proprietà, un Database server MySQL con impostazioni predefinite presenta di default una variabile Lock associata ad ogni tabella.; nel momento in cui un utilizzatore impiega una variabile Lock per una specifica tabella, nessun altro utente potrà effettuare operazioni su di essa.

Per ogni tabella saranno possibili due tipologie di Lock dette anche locktypes:

  • READ Locks (o “Locking in lettura”), che permettono l’accesso alle tabelle in sola lettura;
  • WRITE Locs (o “Locking in scrittura”), che permettono l’accesso alle tabelle in lettura e scrittura.

Nel primo caso, a tutti gli utenti di MySQL sarà accordato il permesso di leggere il contenuto di una determinata tabella, ma nessuno di essi, compreso l’utilizzatore che ha impostato il Lock, avrà il permesso di apportare modifiche a carico della struttura dei dati; non sarà possibile definire Lock di tipo READ quando su una tabella sussiste già un blocco di tipo WRITE.

Nel secondo caso, locking in scrittura, soltanto l’utilizzatore che ha impostato il Lock potrà accedere alla tabella bloccata in lettura, mentre gli altri utenti si vedranno negato anche il permesso di lettura. Non è possibile impostare blocchi di tipo WRITE su tabelle in cui già sussiste un vincolo di tipo READ.

Alle due tipologie appena elencate corrispondono due ulteriori procedure di locking meno vincolanti rispetto a quelle in lettura e scrittura:

  • READ LOCAL Locks: sono molto simili ai Locks di tipo READ ma consentono le esecuzioni di istruzioni basate su INSERT quando queste non alterano i records preesistenti;
  • LOW PRIORITY WRITE: funzionano in modo molto simile ai blocchi di tipo WRITE, ma a seconda dei casi gli altri utilizzatori saranno vincolati ad un nuovo Lock in lettura durante i tempi di attesa al termine dei Locks di tipo READ o WRITE definiti.

Le variabili Lock nascono per soddisfare una semplice ma fondamentale esigenza: evitare che due utilizzatori apportino contemporaneamente delle modifiche sugli stessi dati.

Se vuoi aggiornamenti su Locking delle tabelle in MySQL inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Locking delle tabelle in MySQL

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento dei dati per attività di marketing