Concurrent inserts
Lo Storage Engine MyISAM supporta le insert concorrenti. 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
uses concurrent inserts if the CONCURRENT
keyword is specified. This makes the statement slower (even if no other sessions access the table) but reduces contetion.
LOCK TABLES
allowes non-conflicting concurrent inserts if READ LOCAL
lock is used. Concurrent inserts are not allowed if the LOCAL
keyword is omitted.