Dar sentido a las estadísticas del grupo de búferes INNODB

20

Después de leer esta página en la documentación de mysql , traté de dar sentido a nuestro uso actual de InnoDB. Actualmente, asignamos 6 GB de RAM para el grupo de búferes. El tamaño de nuestra base de datos es casi el mismo. Aquí está la salida de show engine innodb status\G(estamos ejecutando v5.5)

----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 6593445888; in additional pool allocated 0
Dictionary memory allocated 1758417
Buffer pool size   393215
Free buffers       853
Database pages     360515
Old database pages 133060
Modified db pages  300
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 7365790, not young 23099457
0.00 youngs/s, 0.00 non-youngs/s
Pages read 1094342, created 185628, written 543182148
0.00 reads/s, 0.00 creates/s, 37.32 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 360515, unzip_LRU len: 0
I/O sum[2571]:cur[0], unzip sum[0]:cur[0]

Quería saber qué tan bien estamos utilizando el caché del búfer. Después de echar un vistazo inicialmente a la salida, parecía que de hecho la estábamos usando, basada en el Pages made youngy not youngtenía números en ellos y Buffer pool hit rate is 1000 / 10000(lo que vi en otra parte de la web que significa que se está usando bastante. ¿Verdadero?)

Lo que me está tirando a través de un bucle es la razón por la young-making ratey notson por lo tanto 0/1000 y el young/sy non-young/slos accesos son ambos a 0. Esos serían todas indicar que no está siendo utilizado en absoluto, ¿verdad?

¿Alguien puede ayudar a darle sentido a esto?

Safado
fuente

Respuestas:

18
 Buffer pool hit rate is 1000 / 1000

Este es el único valor realmente significativo en la situación en la que se encuentra ... y esa situación es que tiene la suerte de tener un grupo de búferes con una tasa de aciertos perfecta del 100%. No analice en exceso el resto, porque no hay nada que necesite cambiar, a menos que el sistema operativo del servidor tenga poca memoria, lo que puede causar un intercambio.

Los valores joven / no joven no son interesantes en un caso donde no hay presión en el grupo de búferes. InnoDB lo está utilizando, no hace nada sin él. Si el grupo es demasiado pequeño, las páginas se desalojan y se leen nuevas páginas y las otras estadísticas lo ayudan a comprender eso ... pero ese es un problema que no parece tener.

InnoDB nunca descuidará o dejará el espacio libre "no utilizado" en la piscina si es necesario por alguna razón, por lo que el hecho de que sea gratis significa que solo tiene un respiro para expandirse según el tamaño de su trabajo El conjunto de datos crece.

Eso es todo lo que significa, a menos que, por supuesto, haya reiniciado el servidor recientemente, en cuyo caso está incompleto. El servidor debe ejecutarse durante un período completo de uso "normal" (incluidas las copias de seguridad completas) antes de que las estadísticas cuenten toda la historia. ... ya sea una hora, un día, una semana, un mes o un año, depende de su aplicación.

Michael - sqlbot
fuente
28

The Buffer pool size 393215 Esto está en páginas no bytes.

Para ver el tamaño del grupo de búferes en GB, ejecute esto:

SELECT FORMAT(BufferPoolPages*PageSize/POWER(1024,3),2) BufferPoolDataGB FROM
(SELECT variable_value BufferPoolPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

Database pages 360515 Este es el número de páginas con datos dentro del grupo de búferes

Para ver la cantidad de datos en el tamaño de la agrupación de almacenamiento intermedio en GB, ejecute esto:

SELECT FORMAT(BufferPoolPages*PageSize/POWER(1024,3),2) BufferPoolDataGB FROM
(SELECT variable_value BufferPoolPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_data') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

Para ver el porcentaje de la agrupación de almacenamientos intermedios en uso, ejecute esto:

SELECT CONCAT(FORMAT(DataPages*100.0/TotalPages,2),' %') BufferPoolDataPercentage FROM
(SELECT variable_value DataPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_data') A,
(SELECT variable_value TotalPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') B;

Modified db pages 300Este es el número de páginas en el Grupo de búferes que se deben volver a escribir en la base de datos. También se les conoce como páginas sucias.

Para ver el espacio ocupado por páginas sucias, ejecute esto:

SELECT FORMAT(DirtyPages*PageSize/POWER(1024,3),2) BufferPoolDirtyGB FROM
(SELECT variable_value DirtyPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_dirty') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

Para ver el porcentaje de páginas sucias, ejecute esto:

SELECT CONCAT(FORMAT(DirtyPages*100.0/TotalPages,2),' %') BufferPoolDirtyPercentage FROM
(SELECT variable_value DirtyPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_dirty') A,
(SELECT variable_value TotalPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') B;

En cuanto a las otras cosas en la pantalla, ejecute esto:

SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool%';

Verá todas las variables de estado para el Buffer Pool. Puede aplicar las mismas consultas a lo que necesite examinar.

RolandoMySQLDBA
fuente
¡Gracias! Entonces, de esto, deduzco que nuestro caché de búfer se está utilizando, pero lo que quiero saber es si lo estamos utilizando EFICAZMENTE. Si entiendo el concepto de las páginas jóvenes y viejas, supongo que un buen indicador de que el caché del búfer se está utilizando al máximo sería en el número de páginas hechas jóvenes y los accesos a las páginas jóvenes, ¿correcto? Usamos mysqldump para hacer copias de seguridad cada 3 horas, lo que explicaría por qué está lleno. Pero con young-making rate 0 / 1000y 0.00 youngs/s, eso nos dice que realmente no lo estamos utilizando. ¿Estoy leyendo esto bien?
Safado
2
La tasa de creación de jóvenes de 0/1000 le indica que las páginas de datos para las consultas que está ejecutando no solo se ajustan a la memoria caché, sino que también se ajustan al tamaño más pequeño (3/8) de la memoria caché joven. Es decir, las consultas no están utilizando suficientes datos para envejecer algunas de las páginas en el gran caché no joven.
Thomas Jones-Low
Una breve explicación sobre las variables de estado innodb_buffer_pool restantes será muy útil. ¿Puedes añadirlo a tu respuesta
Vidyadhar
5

No estaré de acuerdo con la evaluación de que "tienes la suerte de tener un grupo de búferes con una tasa de aciertos del 100% perfecta"

En la parte superior de la salida (que está cortada), hay una línea similar a:

Per second averages calculated from the last 16 seconds

Esto me dice que no hubo lecturas en los últimos 16 segundos, por lo que (artificialmente) le da una puntuación perfecta de '1000/1000'.

0.00 reads/s, 0.00 creates/s, 37.32 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000

Mientras tanto hubo algunas escrituras. Posiblemente se trata de escrituras diferidas para el vaciado de páginas "sucias" o la limpieza de índices del "búfer de cambios".

Probablemente tampoco hubo actividad en el área joven / caliente en los últimos 16 segundos.

Rick James
fuente
Bueno, promediamos entre 6k-10k SELECTs por segundo y al mismo tiempo puedo ver casi 0 actividad de lectura de disco en el servidor, así que no creo que este sea el caso
Safado
¿El "caché de consultas" satisface la mayoría de las consultas? SHOW VARIABLES LIKE 'query%';y SHOW GLOBAL STATUS LIKE 'Qc%';y SHOW GLOBAL VARIABLES LIKE 'Com_SELECT';.
Rick James
0

El grupo de búferes se divide en dos partes, una lista joven y una lista no joven. La tasa de creación muestra cuántas páginas en los grupos de búferes se barajan entre las dos listas.

Las páginas hechas jóvenes son páginas que no son jóvenes (es decir, que se leen fuera de la memoria caché. Las páginas hechas que no son jóvenes son páginas movidas de la lista joven porque son demasiado viejas o porque la lista joven está llena.

La velocidad en las páginas que se mueven entre los dos depende de la cantidad de la agrupación de almacenamiento intermedio que se está utilizando actualmente frente al tamaño de la agrupación joven. Establecer en cero significa que su conjunto activo (las páginas que está utilizando) es más pequeño que el grupo joven.

Thomas Jones-Low
fuente