Le insert concorrenti
Lo Storage Engine MyISAM supporta le insert concorrenti (concurrent insert). Questa funzionalità permette l'esecuzione delle SELECT
mentre una INSERT
è in corso, riducendo la contenzione.
Se le insert concorrenti sono abilitate o meno dipende dalla variabile di sistema concurrent_insert
, che può avere i seguenti valori:
NEVER
(0) disabilita le insert concorrenti.AUTO
(1) permette di usare le insert concorrenti solo su tabella che non hanno blocchi liberi (cioè non sono stati cancellati dati nel mezzo della tabella dopo l'ultimaOPTIMIZE TABLE
). Questo è il valore predefinito.ALWAYS
(2) permette sempre l'uso delle insert concorrenti.
Se si utilizza il log binario, le istruzioni CREATE TABLE ... SELECT
e INSERT ... SELECT
non possono utilizzare le insert concorrenti. Inoltre questi comandi richiedono un lock in lettura sulla tabella, perciò le insert concorrenti dovranno attendere. Questo garantisce che il log binario possa essere utilizzato in modo sicuro per recuperare i dati.
Se un'istruzione INSERT
contiene la clausola HIGH_PRIORITY
, le insert concorrenti non possono essere usate. La parola chiave DELAYED
in genere non è necessaria se le insert concorrenti sono abilitate.
LOAD DATA INFILE
usa le insert concorrenti solo se la parola chiave CONCURRENT
è specificata. Questo rende il comando più lento (anche se nessun'altra sessione accede alla tabella) ma riduce la contenzione.
LOCK TABLES
consente le insert concorrenti che non sono in conflitto, se si usa il lock di tipo READ LOCAL
. Se la parola LOCAL
è omessa, le insert concorrenti non sono consentite.