Domanda

ho un sacco di voci nel log delle query lente che hanno solo "commit" su di loro, prendono circa 3 secondi, che è lento ma non terribile rispetto ad alcune altre query.

le voci simile a questa:

COMMIT;
# Time: 120111 14:11:05
# User@Host: root[root] @ localhost []
# Query_time: 3.140228  Lock_time: 0.000000 Rows_sent: 0  Rows_examined: 0
SET timestamp=1326291065;
COMMIT; 
# Time: 120111 14:14:03
# User@Host: root[root] @ localhost []
# Query_time: 2.036250  Lock_time: 0.000000 Rows_sent: 0  Rows_examined: 0
SET timestamp=1326291243;
COMMIT;

La mia domanda è: perché sarebbero rotaie essere l'emissione di un "commit"?

La mia comprensione è che dovrebbe essere utilizzando autocommit a meno che non sto facendo le operazioni manualmente.

È stato utile?

Soluzione

Rails effettuare una transazione in molti casi.

Per esempio, se si salva un record con un modello nidificato (come argomento che ha molti commenti), Rails vi avvolgerà aggiornamenti (1 argomento e n commenti) in una transazione per mantenere il vostro database coerente .

Modifica

Non appena si hanno due o più query legate tra loro che ha cambiato la banca dati è necessario disporre di una transazione, ma sembra che Rails eseguire un Iniziamo / commit anche su query singoli. Penso che sia progettato in questo modo per evitare inutili auto-commit di attivazione / disattivazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top