2010-04-28 11 views
23

¿Qué sucede si matas una consulta alternativa de larga ejecución? ¿La consulta alternativa simplemente revertirá? ¿Cuánto tiempo podría tomar eso (como una proporción del tiempo que ya ha estado funcionando)?¿Qué sucede si matas una consulta alternativa de larga ejecución?

¿Qué pasa si esa consulta está siendo replicado en otro servidor? ¿Eliminar el proceso en el otro servidor revertir la consulta alternativa del servidor original?

Estamos ejecutando mysql

+27

Jaja, lo siento, tengo una imagen mental hilarante de un grupo de ingenieros acurrucados alrededor de un monitor, mirando a través de sus cejas sudorosas en este post - solo esperando una respuesta - mientras un servidor mysql en el fondo comienza a fumar. –

+0

jaja, tuvimos que dejarlo fumar hasta que la consulta terminó. Pero sería bueno saberlo para la próxima vez ... Dios no lo quiera –

+0

Bueno, aquí estoy. Estaba en el caso en que se hizo una copia, por lo que detenerlo estaba bien, pero había sudoración involucrada. Gracias a Dios que no estaba en producción, pero el bloqueo de escritura es infame. – Aki

Respuesta

12

Depende de lo que esté haciendo. Si está ejecutando an alter table...add index de comandos en una mesa de InnoDB (no tan seguro de MyISAM), entonces, sólo se va a correr y correr como copia el conjunto de mesa maldito bloqueo en acciones y el barril en primer lugar: si está en el medio de "copia a la mesa temporal "entonces es bastante imparable.

See here:

En la mayoría de los casos, ALTER TABLE funciona hacer una copia temporal de la tabla original . La alteración se realiza en la copia, y luego se elimina la tabla original y la nueva se renombra. Mientras ALTER TABLE es ejecución, la tabla original es legible por otras sesiones. Las actualizaciones y las escrituras en la tabla están detenidas hasta que la nueva tabla esté lista, y luego se redireccionan automáticamente a la nueva tabla sin ninguna actualización fallida.

+2

Parece que nuestro caso era una donde "no hay ninguna tabla temporal es necesario" - pero parece que nuestras mesas todavía encerrados, nuestras conexiones abiertas pinchos, y tuvimos un corte de 5 a 10 minutos. Si eliminamos una consulta que * no * crea una copia ... ¿entonces qué? –

+0

@BT: ¿Cómo es que no se creó una tabla temporal, cuál es su caso específico? – Aki

+2

BTW, eliminé el proceso durante la copia en la tabla temporal, eliminó el bloqueo de escritura y los datos todavía estaban allí y accesibles. No tengo idea de dónde fue la copia temporal. – Aki

0

¿Qué pasa si esa consulta se está replicando en otro servidor?

El ALTER se ejecutará también en ese servidor, con los impactos asociados.

¿Va a matar el proceso en el otro servidor revertir la nueva consulta del servidor original?

Nope. El servidor original no tiene un canal de retorno para conocer qué ocurrió (o no) en el esclavo. Si matas ALTER en el esclavo, terminarás en la situación en la que el maestro tiene la nueva restricción o índice, y el esclavo no. Esto rara vez es una receta para la felicidad :)

Una vez que un ALTER entra en el registro de replicación, o bien tienen que dejar que se ejecute en todas partes, o matar a todas partes.

Cuestiones relacionadas