Mucho más simple ... Ejecutar este doble
SELECT SQL_NO_CACHE ...;
y mirar el segundo tiempo.
El primero calienta el buffer_pool; el segundo evita el control de calidad teniendo SQL_NO_CACHE
.
Por lo tanto, la segunda temporización es una buena indicación de cuánto tiempo lleva en un sistema de producción con una memoria caché caliente.
Además, Mira Handler cuenta
FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handlers%';
da una idea bastante clara de cuántas filas se toquen. Eso, a su vez, le da una buena idea de cuánto esfuerzo requiere la consulta. Tenga en cuenta que esto se puede ejecutar con bastante éxito (y rápidamente) en pequeños conjuntos de datos. Luego puede (a menudo) extrapolar a conjuntos de datos más grandes.
Un "Handler_read" podría estar leyendo una fila de índice o una fila de datos. Puede ser la fila 'siguiente' (de ahí probablemente almacenada en caché en el bloque que se leyó para la fila anterior), o podría ser aleatoria (por lo tanto, posiblemente esté sujeta a otro golpe de disco). Es decir, la técnica no ayuda mucho con "cuántos bloques se necesitan".
Esta técnica de manejo es impermeable a lo que está sucediendo; da resultados consistentes
"Handler_write" indica que se necesitaba una tabla tmp.
Los números que se aproximan al número de filas en la tabla (o un múltiplo de tales), probablemente indican un escaneo de tabla (s). Un número que es el mismo que LIMIT
podría significa que usted genera un índice tan bueno que consumió el LIMIT
en sí mismo.
Si lo hace tirar de la agrupación de almacenamiento, se podía observar los cambios en Innodb_buffer_pool_reads
para dar una precisa (?) La cuenta del número de páginas leídas en un sistema de frío. Esto incluiría páginas de índice no hojas, que casi siempre están en caché. Si algo más está sucediendo en el sistema, este valor STATUS
no debería ser confiable porque es 'global', no 'sesión'.
excelente respuesta, gracias. Solo tengo una pregunta ... Cuando una página de búfer está caducada, ¿está marcada como eliminada? Solo quiero asegurarme de que no se está ejecutando un hilo innodb que periódicamente borra páginas de búfer vencidas (y potencialmente crea una carga mayor en la base de datos porque el tiempo de espera es muy bajo). --- Sé que es solo temporal para las pruebas, pero necesito tener un buen manejo de estos puntos de referencia en particular – carpii
@Rolando, si tengo muchos otros programas en ejecución y necesito MySQL para usar la menor cantidad de RAM posible, ¿significa que debería establecer innodb buffer pool en cero? ¿O hay una cantidad mínima requerida? – Pacerier