El rendimiento de las consultas se degrada cuando el conjunto de trabajo (los datos e índices que InnoDB lee con mayor frecuencia) no cabe en la memoria, lo que obliga a realizar lecturas repetidas en disco. El parámetro innodb_buffer_pool_size controla cuánta memoria asigna InnoDB para esta caché. Aumentarlo mantiene el conjunto de trabajo en la memoria, reduce la E/S de disco y el tiempo de espera de la CPU. Disminuirlo libera memoria para otras cargas de trabajo.
Requisitos previos
Antes de empezar, asegúrese de contar con:
Una instancia de RDS MySQL que ejecute una de las siguientes ediciones: RDS High-availability Edition, RDS Basic Edition o RDS Cluster Edition
Limitaciones
Instancias serverless: No se admite la modificación manual de
innodb_buffer_pool_size. ApsaraDB RDS for MySQL serverless ajusta automáticamente el tamaño del buffer pool cuando cambia la especificación de la instancia.Out of memory (OOM) risk: Establecer un valor demasiado alto puede provocar errores OOM y desencadenar un failover entre nodo principal y secundario. Manténgase dentro de los valores máximos recomendados en este tema.
Cuándo cambiar el tamaño del buffer pool
Aumente el buffer pool cuando la memoria del servidor sea suficiente y observe una E/S de disco alta bajo carga normal. Para comprobar si el buffer pool actual es demasiado pequeño, supervise la métrica Disk Read IOPS de su instancia en la sección Monitoring. Si las IOPS de lectura son altas e inestables bajo carga normal, es probable que el conjunto de trabajo se esté volcando al disco; considere aumentar el tamaño del buffer pool. Un buffer pool más grande también beneficia a las cargas de trabajo con muchas escrituras: las instrucciones UPDATE masivas generan menos esperas por bloqueos y menor dependencia del disco cuando las filas modificadas con frecuencia permanecen en memoria.
Disminuya el buffer pool cuando los recursos de memoria sean limitados o cuando otras aplicaciones en el host requieran más memoria.
Cómo funciona la fórmula
innodb_buffer_pool_size solo se puede configurar mediante una fórmula; no se admiten valores numéricos directos. La sintaxis de la fórmula es:
{DBInstanceClassMemory*X/Y}
Ejemplo: {DBInstanceClassMemory*7/10} establece el buffer pool en el 70 % de la memoria de la instancia.
|
Variable de la fórmula |
Descripción |
|
|
Memoria del tipo de instancia RDS (variable del sistema). |
|
|
Proporción del tamaño del buffer pool respecto a la memoria de la instancia. Elija una proporción que mantenga el buffer pool dentro del rango recomendado. |
Rango ajustable: [128 MB, DBInstanceClassMemory * 9/10]
Mínimo: 128 MB
Máximo: 90 % de la memoria de la instancia disponible para el proceso de la base de datos
Redondeo de la capacidad del buffer pool
El tamaño real del buffer pool siempre es un múltiplo de innodb_buffer_pool_chunk_size × innodb_buffer_pool_instances. Si el valor que establece no es un múltiplo exacto, el sistema lo redondea al alza hasta el múltiplo más cercano.
innodb_buffer_pool_chunk_sizetiene un valor fijo de 32 MB. En instancias creadas anteriormente, puede ser de 128 MB.
Si establece un valor que no es un múltiplo válido, el sistema lo ajusta automáticamente hacia arriba. Por ejemplo, si innodb_buffer_pool_chunk_size es 1 GB y innodb_buffer_pool_instances es 1, establecer innodb_buffer_pool_size en 1.5 GB da como resultado un valor real de 2 GB.
Valores predeterminados y recomendados
Instancias de disco local de alto rendimiento
Para los tipos de instancia que se enumeran a continuación, el tamaño predeterminado del buffer pool es del 80 % al 90 % de la memoria de la instancia. Para todos los demás tipos de instancia, el valor predeterminado es el 75 % de la memoria de la instancia (instance memory * 3/4).
|
Familia de instancias |
Tipo de instancia |
CPU y memoria |
Valor predeterminado (MB) |
Porcentaje |
|
General-purpose |
rds.mysql.s3.large |
4 núcleos, 8 GB |
7372 |
90% |
|
General-purpose |
rds.mysql.m1.medium |
4 núcleos, 16 GB |
14745 |
90% |
|
General-purpose |
rds.mysql.c1.large |
8 núcleos, 16 GB |
13107 |
80% |
|
General-purpose |
rds.mysql.c1.xlarge |
8 núcleos, 32 GB |
27852 |
85% |
|
General-purpose |
rds.mysql.c2.xlarge |
16 núcleos, 64 GB |
52428 |
80% |
|
General-purpose |
rds.mysql.c2.xlp2 |
16 núcleos, 96 GB |
78643 |
80% |
|
Dedicated |
mysql.x4.large.2 |
4 núcleos, 16 GB |
14745 |
90% |
|
Dedicated |
mysql.x8.large.2 |
4 núcleos, 32 GB |
29491 |
90% |
|
Dedicated |
mysql.x4.xlarge.2 |
8 núcleos, 32 GB |
27852 |
85% |
|
Dedicated |
mysql.x8.xlarge.2 |
8 núcleos, 64 GB |
55705 |
85% |
|
Dedicated |
mysql.x4.2xlarge.2 |
16 núcleos, 64 GB |
52428 |
80% |
|
Dedicated |
mysql.x8.2xlarge.2 |
16 núcleos, 128 GB |
104857 |
80% |
Instancias de disco
Tipos de instancia de uso general: El tamaño predeterminado del buffer pool es el 75 % de la memoria de la instancia (instance memory * 3/4).
Tipos de instancia dedicada: El tamaño predeterminado del buffer pool se calcula de la siguiente manera:
(instance memory - system reserved memory) * 3/4
La memoria reservada del sistema (en MB) se calcula así:
min(instance memory / 2, 2048) + max(instance CPU * 64, instance memory / 64) + (instance memory / 64) + 285
La siguiente tabla muestra los tamaños máximos predeterminados y recomendados del buffer pool para tipos de instancia de disco dedicada. Utilice el valor Recommended max como objetivo máximo al configurar innodb_buffer_pool_size.
|
Núcleos de CPU |
Memoria de la instancia (MB) |
Predeterminado (MB) |
Máximo recomendado (MB) |
|
2 |
4096 |
1024 |
1024 |
|
2 |
8192 |
4096 |
4096 |
|
2 |
16384 |
9216 |
10240 |
|
4 |
8192 |
4096 |
4096 |
|
4 |
16384 |
9216 |
10240 |
|
4 |
32768 |
21504 |
22528 |
|
8 |
16384 |
9216 |
10240 |
|
8 |
32768 |
21504 |
22528 |
|
8 |
65536 |
45056 |
48128 |
|
12 |
24576 |
15360 |
16384 |
|
12 |
49152 |
33792 |
35840 |
|
12 |
98304 |
69632 |
73728 |
|
16 |
32768 |
21504 |
22528 |
|
16 |
65536 |
45056 |
48128 |
|
16 |
131072 |
93184 |
99328 |
|
24 |
49152 |
32768 |
34816 |
|
24 |
98304 |
69632 |
73728 |
|
24 |
196608 |
140288 |
149504 |
|
32 |
65536 |
45056 |
47104 |
|
32 |
131072 |
93184 |
99328 |
|
32 |
262144 |
188416 |
200704 |
|
52 |
98304 |
67584 |
72704 |
|
52 |
196608 |
140288 |
149504 |
|
52 |
393216 |
283648 |
302080 |
|
64 |
262144 |
188416 |
200704 |
|
64 |
524288 |
378880 |
403456 |
|
102 |
786432 |
569344 |
607232 |
|
104 |
196608 |
138240 |
147456 |
|
104 |
393216 |
282624 |
302080 |
Cambiar el tamaño del buffer pool para una sola instancia
Vaya a la página Instances. En la barra de navegación superior, seleccione la región donde reside su instancia de RDS. Busque la instancia y haga clic en su ID.
En el panel de navegación izquierdo, haga clic en Parameters.
Busque innodb_buffer_pool_size, haga clic en
para editar el valor y luego haga clic en OK.Haga clic en Submit Parameters y luego haga clic en OK en el cuadro de diálogo de confirmación.
Modificar innodb_buffer_pool_size requiere reiniciar la instancia en RDS MySQL 5.6. Para RDS MySQL 5.7 y 8.0, no es necesario reiniciar.
Cambiar el tamaño del buffer pool para varias instancias
Cree una plantilla de parámetros que contenga el parámetro innodb_buffer_pool_size y aplíquela a las instancias de destino. Si ya cuenta con una plantilla que incluye este parámetro, actualice el valor en la plantilla y aplíquela a varias instancias simultáneamente.

Para obtener más información, consulte Use parameter templates.
Pasos siguientes
Después de ajustar innodb_buffer_pool_size, supervise su instancia para comprobar que el cambio funcione según lo esperado:
Utilice monitoring para revisar las Disk Read IOPS; una disminución sostenida indica que el conjunto de trabajo ahora cabe en la memoria.
Revise los registros de consultas lentas para identificar las consultas que aún podrían estar causando lecturas excesivas en disco.
Si la presión sobre la memoria aumenta después del cambio, consulte solución de problemas de consumo de memoria para obtener orientación.