2015-07-30 22 views
5

Il progetto per la Grande transazione ..MySQL transazione: Una transazione di grandi dimensioni contro più piccole transazioni

START TRANSACTION; 
    /* 
     INERT for login detail 
    */ 
    /* 
     INSERT for personal information 
    */ 
    /* 
     INSERT for user's transaction account 
    */ 
COMMIT; 

e il design per le piccole transazioni ..

START TRANSACTION; 
    /* 
     INSERT for login detail 
    */ 
COMMIT; 

START TRANSACTION; 
    /* 
     INSERT for personal information 
    */ 
COMMIT; 

START TRANSACTION; 
    /* 
     INSERT for user's transaction account 
    */ 
COMMIT; 

risultati attuali

  • Ho provato entrambi nella nostra applicazione azione e utilizzando la transazione "Big" abbiamo riscontrato un deadlock in una determinata tabella.

  • Utilizzando le piccole transazioni, è possibile che uno o due dei tre non vengano eseguiti e causino discrepanza.

La mia esperienza nella gestione di tali casi non è sufficiente per fornire la migliore soluzione in questo tipo di scenario. Che tipo di soluzione può essere fatta qui?

risposta

0

Dopo alcuni anni di esperienza nel mio lavoro , Ho trovato questa soluzione .. perché i dati per i moduli interessati sono tutti intatti con successo o fallimento. Grazie a tutti per l'aiuto

START TRANSACTION; 
    /* 
     INSERT for login detail 
    */ 
    /* 
     INSERT for personal information 
    */ 
    /* 
     INSERT for user's transaction account 
    */ 
COMMIT; 
2

Il punto di utilizzo della transazione è garantire la coerenza dei dati memorizzati. Quando si effettua una transazione, tutti gli inserti, gli aggiornamenti e le eliminazioni non vengono memorizzati nel database immediatamente, il DB blocca le tabelle (o le righe a seconda della configurazione) con i dati provvisori fino a quando non raggiunge il comando di commit. A quel punto i dati vengono scritti e i blocchi vengono rilasciati.

Se si effettuano transazioni "piccole", è come non effettuare transazioni.

Se la tua "grande" transazione si blocca, trova la tabella che sta causando il deadlock e perché lo sta facendo. Ci sono molte ragioni tra cui inserimenti/aggiornamenti/eliminazioni simultanee sulla tabella, blocchi non rilasciati in tempo, transazioni precedenti che rimangono "vivi" (cioè che non raggiungono il comando di commit), DB che impiega troppo tempo a memorizzare i dati sul tavolo , troppo tempo tra gli inserti, violazione di chiave esterna, ecc

si può leggere questo articolo che spiega come funzionano le transazioni e come si può identificare ed evitare situazioni di stallo http://flylib.com/books/en/1.142.1.79/1/

+0

Sì utilizzando una Transazione implementa la 'A' in 'ACID' che è Atomicity, è o tutto viene eseguito o non succede nulla. Grazie per aver fornito un'informazione disponibile nella documentazione di MySQL;) – Avidos

+0

Beh, sto cercando di essere d'aiuto date le informazioni limitate sul caso e la domanda non specifica che viene fatta lol –