herramienta para pruebas de carga SQL personalizadas

herramienta para pruebas de carga SQL personalizadas

Me gustaría ejecutar algunas pruebas para comparar nuestra aplicación MySQL en varias configuraciones. Pero no quiero usar algo como sysbench u pruebas oltp, porque tenemos una lógica de procedimientos almacenados pesada. Entonces... quiero realizar pruebas con nuestros procedimientos.

¿Existe alguna aplicación/marco de prueba que podamos utilizar para ejecutar consultas personalizadas (como opción, en paralelo) y ver estadísticas? ¿Algo así como Siege para web? Lo que ya encontré generalmente usa sus propios esquemas y escenarios de bases de datos generados.

Podría pedirles a mis desarrolladores que creen alguna interfaz Java personalizada y usen Siege para ello, pero no quiero agregar gastos generales ni afectar los números.

Saludos, Ígor.

Respuesta1

Jmeter puede realizar pruebas de carga de bases de datos utilizando JDBC:http://jakarta.apache.org/jmeter/usermanual/build-db-test-plan.html

No he usado la funcionalidad jdbc antes, así que no sé si manejará sus consultas complejas.

Respuesta2

Puede seguir los principios generales de la mayoría de los motores de pruebas unitarias para crear un motor de pruebas unitarias MySQL simple.

Construimos algo como esto para MS SQL en el pasado

la idea era la siguiente

1) Escribimos procedimientos de prueba unitaria y les damos prefijos con el mismo nombre, como "test_". En MS SQL también usamos propiedades extendidas como metainformación para describir algunos parámetros específicos de nuestras pruebas (al igual que en NUnit, se pueden usar diferentes atributos de prueba)

2) Escribimos un procedimiento/script que abre un cursor, selecciona del catálogo todos los nombres de procedimientos que inician "test_" y ejecuta cada uno de ellos en la declaración EXEC (@procedure_name). Si la prueba falla, el procedimiento de prueba debería generar un error.

3) Los resultados de la ejecución de la prueba se almacenan en una tabla.

4) Para ejecutar la prueba con los mismos datos y obtener resultados predecibles, tenemos una base de datos de prueba de muestra de la que hicimos una copia de seguridad una vez y la restauramos desde la copia de seguridad antes de la ejecución de cada prueba.

Respuesta3

Si desea una herramienta que ahora viene incluida con MySQL 5.1, lo peor que podría hacer es intentarlo.MySQL Slap (también conocido como mysqlslap). Un ejemplo directamente de la documentación:

Proporcione sus propias declaraciones SQL de creación y consulta, con 50 clientes realizando consultas y 200 selecciones para cada uno:

mysqlslap --delimiter=";" \  
--create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)" \  
--query="SELECT * FROM a" --concurrency=50 --iterations=200

Esto proporciona la opción de ejecutar las pruebas en paralelo, aunque la implementación del paralelismo utilizando varios clientes puede no ser exactamente de su agrado. Aquí hay una breve descripción (nuevamente, palabra por palabra):

mysqlslap se ejecuta en tres etapas:

  1. Cree un esquema, una tabla y, opcionalmente, cualquier programa o dato almacenado que desee utilizar para la prueba. Esta etapa utiliza una única conexión de cliente.

  2. Ejecute la prueba de carga. Esta etapa puede utilizar muchas conexiones de clientes.

  3. Limpiar (desconectar, soltar la mesa si se especifica). Esta etapa utiliza una única conexión de cliente.

Si esto no es exactamente de su agrado, puede usar un script cron para activar MySQL Slap en un momento específico para muchos usuarios, o para muchas máquinas idénticamente configuradas/especificadas, con rutas de red idénticas al servidor, etc. (este último es muy importante, ya que la evaluación comparativa debería eliminar cualquier posible discrepancia para evitar conclusiones oscurecidas).

Si (como es probable) está ejecutando una versión anterior de MySQL,este enlaceproporciona información útil sobre cómo compilar el código fuente 5.1 para 5.0; Probablemente no sea posible realizar más backporting.

Aquí hay un tutorial básico.

Respuesta4

terminé usandoSQLIO para estresar los discos, y luego escribí algunas consultas personalizadas para generar una gran cantidad de datos y luego hacer varios cálculos en tablas grandes y simular una base de datos muy cargada, pero mal optimizada. Luego aumenté el número de conexiones simultáneas hasta que murió.

información relacionada