2012-04-20 18 views
13

En mi aplicación web utilizo dos eventos recurrentes que "limpian" una de las tablas en la base de datos, ambas ejecutadas cada 15 minutos más o menos.¿Qué tan costosos son los eventos MySQL?

Mi pregunta es, ¿podría provocar problemas de rendimiento en el futuro? Como he leído en algún lugar, no recuerdo dónde exactamente, se supone que el MySQL events se debe ejecutar una vez al mes más o menos. La cosa es que estos mismos eventos mantienen la tabla en un tamaño bastante reducido (ya que borran registros de más de 15 minutos), tal vez esto compense la frecuencia de su ejecución, ¿no?

Además, ¿es mejor tener un gran evento de MySQL o muchos pequeños si se llaman en la misma frecuencia?

Respuesta

4

No creo que haya una indicación de rendimiento en la base mensual simplemente una sugerencia más de qué hacer con ella. Así que creo que estás bien con tu limpieza usando los eventos.

Al final, el documentation suggets que los eventos son

Conceptualmente, esto es similar a la idea de la crontab de Unix (también conocido como un “trabajo de cron”) o el programador de tareas de Windows.

Y el concepto para ellos es que puede ejecutar una tarea cada minuto si así lo desea.


En la segunda parte de la pregunta:

Serialize o propagación hacia arriba. Si los divide en muchos eventos que se ejecutarán al mismo tiempo, creará picos de uso posiblemente muy alto de la CPU que pueden ralentizar la aplicación al procesar los eventos.

Así que empaque todo en un evento para que se ejecute en sucesión o disemine los eventos individuales para que se ejecuten en diferentes momentos durante el marco de tiempo de 15 minutos. Personalmente creo que el primero es preferible, empaquételos en un único evento ya que se garantiza que se ejecutarán en sucesión, incluso si uno de ellos sigue funcionando más de lo habitual.

Lo mismo vale para cronjobs. Si planifica 30 exportaciones de larga ejecución de una sola vez, su aplicación va a fallar miserablemente durante ese intervalo de tiempo (lo aprendió de la peor manera).

+0

Gracias por su respuesta hombre! Muy detallado. Creo que iré con la segunda opción que mencionaste, teniendo varios eventos pero ejecutándolos de forma asíncrona para distribuir el uso de la CPU – federicot

+1

@JohnDoe por cierto, si estás buscando crear un registro o algo, deberías echarle un vistazo a mongo-db para eso, hay una función llamada colecciones limitadas que limitará el tamaño de una tabla y la limpiará automáticamente: http://www.mongodb.org/display/DOCS/Capped+Collections – bardiir

Cuestiones relacionadas