2010-06-21 12 views
8

Ho un'app Django che utilizza MySQL e il motore InnoDB per l'archiviazione. Per qualche ragione, Django a volte lascia le serrature sul posto, anche dopo che la query è stata completata. (Li posso vedere con Innotop).perché il django lascia i blocchi in mysql?

L'unica operazione di gestione delle cose che faccio nel mio codice è che ho django.db.transaction.commit_on_success specificato per alcuni dei miei metodi save() in cui sto lavorando con il multi-tavolo eredità.

Se riavvio il server Apache, i blocchi scompaiono.

Qualcuno ha visto qualcosa di simile? Potrei aver scritto in qualche anti-pattern che causerebbe questo?

risposta

1

L'unica volta che sono riuscito a farlo è stato impostando attività "pianificate" in Django che non erano correlate a richieste/viste. Il sistema di gestione transazioni di commit automatico predefinito commette solo transazioni quando una coppia richiesta/risposta è completata e restituita all'utente finale, quindi la creazione di lavori kron-esque che vengono eseguiti senza che venga inviata una richiesta ignora tale meccanismo.

Altrimenti è generalmente piuttosto difficile che non riesca a rilasciare un lucchetto. Sei sicuro che non ci siano blocchi di codice estremamente lunghi (magari facendo affidamento su un servizio esterno che sta scadendo o qualcosa del genere) che lega le cose?

Problemi correlati