2009-04-06 21 views
7

Tengo un proceso de larga ejecución en MySQL. Ha estado funcionando por una semana. Hay una otra conexión, a un maestro de replicación, pero he detenido el procesamiento de esclavos, por lo que efectivamente no sucede nada más.¿Cómo saber si un proceso MySQL está atascado?

¿Cómo puedo saber si este proceso todavía está funcionando? Sabía que tomaría mucho tiempo y por eso lo puse en su propia instancia de base de datos, pero esto es más de lo que esperaba. Obviamente, si todavía está haciendo un trabajo, no quiero matarlo. Si está zombie, entonces no sé cómo hacer el trabajo que se supone que debe hacer.

Está en el estado "Enviando datos". La tabla es una de InnoDB, pero sin referencias FK utilizadas por la consulta. El estado de InnoDB no muestra errores ni bloqueos desde que se inició la consulta.

Cualquier pensamiento es apreciado.

Respuesta

3

Tienes que matarlo y obtener mejores índices.

Hice un trabajo para un hombre. Tenía una mesa con alrededor de 35 millones de filas. Su proceso por lotes, como el suyo, ha estado ejecutando a la semana, sin final a la vista. Agregué algunos índices, realicé algunos cambios en el orden y los métodos de su proceso por lotes, y reduje todo a aproximadamente dos y medio horas. En una máquina más lenta.

+0

Tiene razón en que no está indexado tan bien como podría ser. Pero seguramente si la mejora de los índices haría que el proceso se ejecute, dejarlo funcionar como lo hará tendrá éxito, justo después de un tiempo más prolongado. Lo que no puedo decir es si está haciendo algo en absoluto, en este momento. – user87843

5

Pruebe "MOSTRAR LISTA DE PROCESOS" para ver lo que está activo.

Por supuesto, si lo mata, es posible que desee tomar el mismo tiempo para devolverlo.

+0

Está activo en la lista de procesos, en el estado 'Enviar datos'. La cantidad de segundos que ha estado activo continúa aumentando. Simplemente no sé cómo decir si realmente está haciendo algo o no. – user87843

+0

¿Están cambiando los tamaños de archivo? Además, debería ver algún efecto en SHOW STATUS (en varias escrituras y caché). – dkretz

0

Teniendo en cuenta lo que ha dicho, no está atascado. Sin embargo, no hay absolutamente ninguna garantía de que termine en algo que se parezca a un período de tiempo razonable. Es casi seguro que agregar indices ayudará, y dependiendo del tipo de consulta, refactorizarlo en una serie de consultas que usan tablas temporales podría darle un gran aumento de rendimiento. No recomendaría esperar a que termine.

1

Para un mejor rendimiento en una base de datos de ese tamaño, es posible que desee consultar una base de datos basada en documentos como mongoDB. Se necesitará más espacio en el disco duro para almacenar la base de datos, pero dependiendo de su esquema actual, puede obtener un mejor rendimiento.

Cuestiones relacionadas