Concurrent inserts

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

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'ultima OPTIMIZE 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.

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.