2010-12-13 12 views
5

Stavo leggendo this post sul blog delle prestazioni di MySQL.Ottimizzazione InnoDB - "usa le transazioni quando fai gli aggiornamenti" - perché?

Sotto applicazione messa a punto si dice:

In primo luogo assicurarsi che si sta utilizzando le transazioni quando si fa aggiornamenti

Attualmente sto usando solo le transazioni in luoghi dove ci sono più inserti o aggiornamento al contemporaneamente. cioè più di un tavolo.

Devo quindi modificare ogni UPDATE per cambiarlo in una transazione?

Qual è la differenza tra:

prepare sql 
bind params 
commit 

e:

begin transaction 
prepare sql 
bind params 
execute statement 
commit transaction 

in termini di ciò che accade a livello di database, che fa più veloce rispetto agli altri?

risposta

6

InnoDB viene eseguito in modalità di autocommit per impostazione predefinita. Ciò che significa è che ogni query viene eseguita nella propria transazione e viene attivata immediatamente. In InnoDB questo significa scrivere i dati in due punti su disco (non chiedermi dettagli - sto scrivendo dalla memoria ciò che ho letto su MySQL Performance Blog una volta;)).

Ora, se si esegue un aggiornamento/inserimento/eliminazione alla volta, non ci sono molte prestazioni da ottenere. Tuttavia, se si eseguono diversi aggiornamenti/inserimenti/eliminazioni consecutive, è possibile risparmiare un po 'di tempo sul disco rigido raggruppandoli in una transazione e quindi eseguendo tutto in una volta.

+2

+1. Altre analisi tecniche: c'è un buffer che ritarda la scrittura nel log (innodb_log_buffer_size) che deve essere svuotato più frequentemente se si commette continuamente, portando a prestazioni peggiori. Il buffer viene anche scaricato automaticamente ogni 1 secondo. –

Problemi correlati