2010-03-25 15 views
6

Tengo una base de datos de producción donde residen las estadísticas de uso. Esta base de datos es responsable de muchas otras cosas (no solo cálculos estadísticos). Utilizo php para enrollar periódicamente diferentes resoluciones (día, semana, mes, año) de estadísticas interesantes en cubos dictados por la resolución.prioridad de conexión de base de datos PHP/MySQL?

La aplicación php que he escrito "completa" sus datos cuando se ejecuta, de modo que se calcularán todas las estadísticas acumuladas para las resoluciones y los períodos desde la última ejecución. Esto es útil si queremos desactivar esto para depurar problemas de rendimiento de la base de datos, porque puedo volver a activarlo y completarlo independientemente de la frecuencia de ejecución del script (el trabajo cron se puede mover de diario a semanal, etc.).

El problema que tengo es que los cálculos son bastante intensivos y aumentan el QPS del servidor de la base de datos de producción. ¿Hay alguna manera de establecer una "prioridad" en una conexión de base de datos particular para que solo use "off-cycles" para hacer estos cálculos?

Tal vez una respuesta adecuada sería replicar las tablas en las que estoy trabajando en una base de datos de estadísticas diferente, pero, lamentablemente, no tengo los recursos para intentar tal cosa (todavía).

Gracias de antemano por cualquier ayuda, Josh

+0

¡Tengo exactamente el mismo problema! – camdixon

Respuesta

5

low_priority_updates debe hacer exactamente lo que necesita.

+0

Curioso cómo funciona esto ... "Si se establece en 1, todas las instrucciones INSERT, UPDATE, DELETE y LOCK TABLE WRITE esperan hasta que no haya SELECT pendiente o LOCK TABLE READ en la tabla afectada." Esto parece ser una configuración de servidor? No parece apropiado, porque no quiero que TODOS los insertos, actualizaciones, eliminaciones se vean afectados (es una base de datos de producción que hace muchas otras cosas). de hecho, quiero que TODAS las consultas emitidas por esta conexión sean tratadas como de baja prioridad (incluso selecciones, etc.) – Josh

+2

La documentación dice "Alcance variable: ambos", lo que significa que puede establecerlo globalmente pero también solo para la sesión/conexión. Y está marcado como "dinámico: sí", por lo que se aplica http://dev.mysql.com/doc/refman/5.0/en/dynamic-system-variables.html. – VolkerK

+0

Gracias por las respuestas: voté por las respuestas. Sin embargo, la naturaleza de las consultas que son intensivas es seleccionar avg() y seleccionar max() en conjuntos de datos grandes, así como muchas selecciones pequeñas en dominios de tiempo pequeño. no es realmente la inserción, actualización y eliminación que me preocupa en sí (están en una tabla que no tiene interacción con el producto y por lo tanto los bloqueos no son intrusivos). Estaba más preocupado por maximizar la E/S o aplastar el procesador debido a la clasificación, etc. No estoy seguro de que haya una forma general de usar simplemente el DB cuando no esté en uso, a menos que me haya perdido algo. – Josh

Cuestiones relacionadas