
Comenzamos hace mucho tiempo, queríamos replicar la carga de trabajo en un entorno que no fuera de producción, y ha habido varios intentos para lograr ese objetivo (Reproducción de la demanda es solo uno de ellos). Pero hay otro punto de vista, en el que debe anotar su carga de trabajo para hacerlo.
Ambos tienen pros y contras
Reproduce la carga de trabajo:
Ventajas:
- Simplemente para implementar
- Listo para ir
Contras:
- Necesitamos reconstruir el medio ambiente cada vez
Guiones personalizados:
Ventajas:
- Posiblemente tenga una carga de trabajo más realista
- Puedes reutilizar el medio ambiente.
- Puede usar Sysbench, que le permite cambiar muchas opciones en su prueba, como aumentar los cables o limitar el rendimiento.
Contras:
- Debe invertir mucho tiempo para crear los scripts para tener una carga de trabajo realista
¿Es posible tener lo mejor de ambos mundos?
Mi idea es simple; Utilice el registro de consultas lentas para obtener un script de plantilla de carga de trabajo utilizable. Esto puede parecer simple, pero es necesario definir los pasos necesarios:
- Necesitamos un lector de consultas lento
- Necesitamos identificar cada modelo de demanda
- Necesitamos hacer un seguimiento de las preguntas que se hacen por sesión, cómo queremos simular las sesiones.
Otros dos aspectos importantes serán recopilar los datos en las consultas para crear variables que se llenarán de funciones válidas y cada sesión tiene “variables” que se repiten a lo largo de la ejecución.
Lector lento de consultas
No es complicado, pero necesitamos dividir la pregunta en tres partes, así que una pregunta como esta:
SELECCIONE `id`, `edad` DESDE `persona` DONDE` fecha de nacimiento`> ‘2004-01-09’
SELECCIONE `identificación`, `años` SÍ `persona` INDUNI `fecha de nacimiento` > ’09 -01-2004′ |
Tendrás esta plantilla de aplicación:
SELECCIONE `id`,` edad` DESDE `persona` DONDE` fecha de nacimiento`>% s
SELECCIONE `identificación`, `años` SÍ `persona` INDUNI `fecha de nacimiento` > %s |
Este modelo de datos:
Y los datos reales son:
Analizar datos para consulta
Como vamos a tener preguntas que ejecutan el mismo modelo de aplicación con el mismo modelo de datos, podemos recopilar los datos reales por posición y proceso. Por ejemplo, si tenemos todas estas preguntas hechas:
SELECCIONE `id`, `edad` FROM `persona` DONDE` fecha de nacimiento`> ‘2004-01-24’; SELECCIONE `id`, `edad` FROM `persona` DONDE` fecha de nacimiento`> ‘2004-12-01’; SELECCIONE `id`, `edad` FROM `persona` DONDE` fecha de nacimiento`> ‘2005-05-27’; SELECCIONE `id`,` edad` DESDE `persona` DONDE` fecha de nacimiento`> ‘2005-09-13’;
SELECCIONE `identificación`, `años` SÍ `persona` INDUNI `fecha de nacimiento` > ‘2004-01-24’; SELECCIONE `identificación`, `años` SÍ `persona` INDUNI `fecha de nacimiento` > ‘2004-12-01’; SELECCIONE `identificación`, `años` SÍ `persona` INDUNI `fecha de nacimiento` > ‘2005-05-27’; SELECCIONE `identificación`, `años` SÍ `persona` INDUNI `fecha de nacimiento` > ‘2005-09-13’; |
Necesitamos extraer todo este valor entero para establecer que en la columna 1, los valores estarán entre 2004 y 2005, los valores en la columna 2 entre 01 y 12, y para la columna 3, entre 01 y 27.
El mismo análisis debe hacerse para considerar:
- Números enteros y si tienen una distribución específica
- Valor alfa o alfanumérico y duración
- hexadecimal
Analizar la carga de trabajo
Como queremos reproducir la carga de trabajo real, las solicitudes deben enviarse en el mismo orden en que fueron ejecutadas por la aplicación y necesitamos procesar las variables. Por ejemplo, si tenemos una sesión en ejecución:
SELECCIONE `id`, `edad` FROM `persona` WHERE` fecha de nacimiento` <'2000-01-01'; ACTUALIZAR `persona` SET` col1` = 5050 DONDE `id` = 10; ACTUALIZAR `persona` SET` col2` = 'otro valor' DONDE `id` = 10;
SELECCIONE `identificación`, `años` SÍ `persona` INDUNI `fecha de nacimiento` < ‘2000-01-01’; ACTUALIZAR `persona` COLOCAR `col1`=5050 INDUNI `identificación` = 10; ACTUALIZAR `persona` COLOCAR `col2`=«otro valor» INDUNI `identificación` = 10; |
Necesitamos identificar el 10 como una variable de nivel de aplicación para la sesión que podría estar en otros valores y cadenas. Con esta información, podemos desarrollar un modelo de sesión y necesitamos sintetizar esta información ya que la mayoría de las veces las aplicaciones ejecutan las mismas consultas en el mismo orden pero con datos diferentes.
Combina la información de la colección
Una vez que tenemos las funciones que generan los valores para llenar las plantillas de solicitud y la plantilla de sesión, podemos simular la carga de trabajo. Sysbench podrá obtener los datos en archivos que se generan dinámicamente y se envían a la base de datos.
¿Que sigue?
Estaba trabajando en una herramienta que lo hace, pero perl y bash no eran las mejores opciones, así que ahora ya estoy trabajando en una herramienta escrita en C y usando GLib. Espero que se publique pronto.