2012-04-20 8 views
13

Nella mia app Web utilizzo due eventi ricorrenti che "puliscono" una delle tabelle nel database, entrambe eseguite ogni 15 minuti o giù di lì.Quanto sono costosi gli eventi MySQL?

La mia domanda è, potrebbe portare a problemi di prestazioni in futuro? Poiché ho letto da qualche parte - non ricordo esattamente dove - si suppone che lo MySQL events debba essere eseguito una volta al mese circa. Il fatto è che gli stessi eventi mantengono il tavolo in una dimensione abbastanza ridotta (dato che cancellano i record più vecchi di 15 ~ minuti), forse questo compensa la frequenza della loro esecuzione, giusto?

Inoltre, è meglio avere un grande evento MySQL o molti piccoli se vengono chiamati con la stessa frequenza?

risposta

4

Non penso ci sia un'indicazione di prestazioni nella base mensile solo più di un suggerimento su cosa fare con esso. Quindi penso che tu stia bene con la tua pulizia usando gli eventi.

Alla fine il documentation suggets che gli eventi sono

Concettualmente, questo è simile all'idea di crontab Unix (noto anche come “cron”) o la pianificazione di Windows.

E il concetto per quelli è che è possibile eseguire un'attività ogni minuto se si desidera farlo.


Nella seconda parte di tale questione:

Serialize o diffonderlo su. Se li dividi in molti eventi che verranno eseguiti nello stesso momento creerai picchi di utilizzo della CPU possibilmente molto elevato che potrebbero rallentare l'applicazione durante l'elaborazione degli eventi.

Quindi, è possibile inserire tutto in un evento in modo che funzioni in successione o distribuisca i singoli eventi in modo che vengano eseguiti in tempi diversi durante i 15 minuti. Personalmente penso che il primo sia da preferire, confezionarlo in un singolo evento, in quanto è garantito che corrano in successione, anche se uno solo di loro continua a funzionare più a lungo del solito.

Lo stesso vale per cronjobs. Se esporti 30 esportazioni di lunga durata in una sola volta, la tua applicazione fallirà miseramente durante quel periodo di tempo (apprese che è difficile).

+0

Grazie per la tua risposta, amico! molto dettagliato. Penso che andrò con la seconda opzione che hai menzionato, avendo diversi eventi ma eseguendoli in modo asincrono per distribuire l'uso della CPU – federicot

+1

@JohnDoe btw, se stai cercando di creare un registro o qualcosa dovresti dare un'occhiata a mongo-db per questo, c'è una funzione chiamata collezioni con limite che limiterà la dimensione di una tabella e la pulirà automaticamente: http://www.mongodb.org/display/DOCS/Capped+Collections – bardiir