2011-05-24 11 views
7

¿Hay un comando simple que me permita ajustar una instancia de base de datos MySQL para ejecutar más lento de lo normal?Des-optimización de MySQL

Estoy trabajando en un código que registra y reproduce las interacciones de la base de datos. Una de las cosas que hace es realizar un seguimiento de cuánto tarda en ejecutarse una consulta/comando determinada, y si se ejecuta mucho más lento durante la reproducción, arroja una advertencia. Por supuesto, si no lo prueba, no funciona; Estoy tratando de encontrar una prueba automatizada para esta función. ¿Hay algo que pueda hacer en mi DB de prueba que arruine el rendimiento? Todo lo que necesito hacer es agregar de manera confiable 2+ milisegundos a cualquier consulta dada y estoy configurado.

+0

es el código que está escribiendo en MySQL, o se trata de alguna otra lengua y simplemente observando su Databse? – AllenG

+0

Es código Perl que funciona con una base de datos MySQL. – BlairHippo

Respuesta

9

Si lo que desea es probar consultas largas, haga lo siguiente: SELECT SLEEP(1);

No debería importar lo que la consulta es en sí mismo si lo que quieres hacer es probar si funciona su detección duración.

(sé que esto rompe el verdadero aspecto de "repetición", pero debería ser trivial para añadir SLEEP(1) durante la "reproducción" a algunas sentencias de selección.)

EDIT:

Una segunda idea, que se podría gustarle mejor: crea un bloqueo en una mesa desde otra conexión. Ejecute el script Espera un poco. Quita ese bloqueo. No implicará jugar con ninguna de sus consultas de reproducción.

+0

Amigo. Todo lo que tengo que hacer es copiar el archivo de reproducción para afirmar que 'SELECT SLEEP (1);' solo debería necesitar un milisegundo para ejecutarse y esto me dará el comportamiento que busco cada vez. Esto parece ser precisamente lo que necesito. Una marca de verificación brillante será tuya tan pronto como tenga la prueba en ejecución. ¡Gracias! – BlairHippo

+0

... y si por alguna razón eso no funciona, la solución de bloqueo gratuito parece casi tan sabrosa. – BlairHippo

+0

@BlairHippo, debería funcionar lo suficientemente bien entonces. Vea mi edición si quiere una solución que no implique ese engaño. (Editar: como parece que tienes ahora) – Matthew

1

Procedimiento básico de este modo:

  1. iniciar la transacción

  2. hacer sus cosas sql

  3. 2ms del sueño en Perl o SQL

  4. cometer

la clave es la parte de comenzar/confirmar: mantendrá los bloqueos que hayas adquirido, haciendo las cosas tan despacio como quieras.

Otra prueba para tener en cuenta:

  1. comienzan transacción en dos procesos

  2. hacer sus cosas sql en el primer proceso

  3. hacer sus cosas sql en el segundo proceso

  4. hacer más cosas sql en cada proceso

  5. cometen cada proceso