2012-04-20 11 views
13

In meiner Webanwendung verwende ich zwei wiederkehrende Ereignisse, die eine der Tabellen in der Datenbank "bereinigen", die alle etwa 15 Minuten ausgeführt werden.Wie teuer sind MySQL-Ereignisse?

Meine Frage ist, könnte dies zu Problemen in der Leistung in der Zukunft führen? Weil ich irgendwo gelesen habe - ich weiß nicht, wo genau -, dass MySQL events geplant werden soll, einmal im Monat oder so zu laufen. Die Sache ist, diese gleichen Ereignisse halten die Tabelle in einer ziemlich reduzierten Größe (wie sie Datensätze löschen älter als 15 ~ Minuten), vielleicht kompensiert dies die Häufigkeit ihrer Ausführung, nicht wahr?

Ist es auch besser, ein großes MySQL-Ereignis oder viele kleine zu haben, wenn sie in der gleichen Häufigkeit aufgerufen werden?

Antwort

4

Ich glaube nicht, dass es eine Leistungsindikation in der monatlichen Basis nur mehr von einem Vorschlag, was damit zu tun ist. Also ich denke, Sie sind in Ordnung mit Ihrer Aufräumaktion mit den Ereignissen. Konzeptionell ist dies ähnlich wie die Idee des Unix crontab (auch als „cron-Job“ bekannt) oder dem Windows-Taskplaner

Am Ende der documentation suggets, dass die Ereignisse

sind.

Und das Konzept für diese ist, dass Sie eine Aufgabe jede Minute ausführen können, wenn Sie dies wünschen.


Im zweiten Teil dieser Frage:

Serialize oder verteilt es auf. Wenn Sie sie in viele Ereignisse aufteilen, die zur gleichen Zeit ausgeführt werden, erzeugen Sie Spitzen von möglicherweise sehr hoher CPU-Auslastung, die die Anwendung während der Verarbeitung der Ereignisse verlangsamen könnten.

Also packen Sie alles in ein Ereignis, so dass es nacheinander läuft oder die einzelnen Ereignisse verteilt werden, so dass sie zu verschiedenen Zeiten während des 15-Minuten-Zeitrahmens ausgeführt werden. Persönlich denke ich, dass die erste zu bevorzugen ist, packe sie zu einem einzigen Event zusammen, denn dann laufen sie garantiert hintereinander, auch wenn einer von ihnen länger läuft als gewöhnlich.

Das gleiche gilt für Cronjobs. Wenn Sie 30 langwierige Exporte auf einmal planen, wird Ihre Anwendung während dieses Zeitfensters kläglich scheitern (das wurde auf die harte Tour gelernt).

+0

Danke für Ihre Antwort Mann! sehr detailiert. Ich denke, ich werde mit der zweiten Option gehen, die Sie erwähnt haben, mehrere Ereignisse aber asynchron ausführen, um die CPU-Nutzung – federicot

+1

@ JohnDoe BTW zu verteilen, wenn Sie in ein Protokoll erstellen oder etwas suchen, sollten Sie sich mongo-db ansehen Dafür gibt es ein Feature namens capped collections, das die Größe einer Tabelle begrenzt und sie automatisch bereinigt: http://www.mongodb.org/display/DOCS/Capped+Collections – bardiir

Verwandte Themen