Sugerencias en ajuste de parámetros de RDS for MySQL
Los parámetros son elementos de configuración clave en un sistema de base de datos. La configuración de parámetros incorrecta puede afectar negativamente al rendimiento de la base de datos. Esta sección describe algunos parámetros importantes para su referencia. Para obtener más información, visite el sitio web oficial de MySQL.
Para obtener más información sobre cómo modificar los parámetros de RDS for MySQL en la consola, consulte Modificación de parámetros de una instancia de RDS for MySQL.
Parámetros sensibles
Los siguientes parámetros pueden dar lugar a problemas de seguridad y estabilidad del sistema si se configuran incorrectamente:
- lower_case_table_names
Valor predeterminado: 1
Función: Controla si los nombres de bases de datos y tablas almacenados en discos distinguen entre mayúsculas y minúsculas. El valor 1 indica que los nombres de bases de datos y tablas no distinguen entre mayúsculas y minúsculas de forma predeterminada.
RDS for MySQL 8.0 no admite este parámetro.
Impacto: El cambio de este valor de parámetro puede provocar excepciones de replicación primaria/en espera. Realice esta operación con precaución.
- Si desea cambiar este valor de parámetro de 1 a 0, cámbielo en réplicas de lectura y reinicie primero y, a continuación, repita las operaciones en la instancia de base de datos principal.
- Si desea cambiar este valor de parámetro de 0 a 1, cámbielo en la instancia de base de datos principal y reinicie primero y, a continuación, ejecute SELECT @@GLOBAL.GTID_EXECUTED en réplicas de lectura. Espere hasta que el conjunto de resultados sea al menos el mismo que la instancia de base de datos principal y, a continuación, cambie este valor de parámetro en réplicas de lectura y reinícielas.
- innodb_flush_log_at_trx_commit
Valor predeterminado: 1
Función: Controla el equilibrio entre el estricto cumplimiento de ACID para las operaciones de compromiso y un mayor rendimiento. La configuración predeterminada de 1 es necesaria para el cumplimiento total de ACID. Los registros se escriben y se vacían en los discos en cada confirmación de transacción. Si el valor está establecido en 0, los registros se escriben y se vacian en los discos una vez por segundo. Si el valor se establece en 2, los registros se escriben en cada confirmación de transacción y se vacian en los discos cada dos segundos.
Impacto: si este parámetro no se establece en 1, no se garantiza la seguridad de los datos. Si el sistema falla, los datos pueden perderse.
Valor recomendado para POC: 2
- sync_binlog
Valor predeterminado: 1
Función: Controla la frecuencia con la que el servidor RDS for MySQL sincroniza los registros binarios con el disco. La configuración predeterminada de 1 requiere la sincronización del registro binario al disco en cada confirmación de transacción. Si el valor se establece en 0, la sincronización del registro binario en el disco no está controlada por el servidor RDS for MySQL, sino que depende del sistema operativo para vaciar el registro binario en el disco. Esta configuración proporciona el mejor rendimiento. Sin embargo, si se produce un corte de energía o el sistema operativo se bloquea, toda la información de registro binario de binlog_cache se perderá.
Impacto: si este parámetro no se establece en 1, no se garantiza la seguridad de los datos. Si el sistema falla, los registros binarios pueden perderse.
Valor recomendado para POC: 1000
- innodb_large_prefix
Valor predeterminado: OFF
Función: especifica la longitud máxima de un índice de una sola columna en una tabla InnoDB.
Este parámetro solo está disponible para RDS for MySQL 5.6.
Impacto: cambiar este valor de parámetro durante la ejecución de DDL podría provocar excepciones de replicación primaria/en espera. Realice esta operación con precaución.
- Si desea cambiar este valor de parámetro de OFF a ON, primero cámbielo en réplicas de lectura y luego en la instancia de base de datos principal.
- Si desea cambiar este valor de parámetro de ON a OFF, primero cámbielo en la instancia de base de datos principal y luego en réplicas de lectura.
- innodb_buffer_pool_size
Valor predeterminado: varía según las clases de instancia de la base de datos.
Función: especifica el tamaño del grupo de búferes InnoDB. El grupo de búferes InnoDB se utiliza para almacenar en caché la tabla y los datos de índice. Al aumentar el valor de este parámetro se reduce la E/S del disco.
Impacto: establecer este parámetro en un valor grande podría provocar un fallo del sistema. Tenga cuidado al cambiar este valor de parámetro.
Valor recomendado para POC: del 70% al 75% de la memoria para las instancias de base de datos con 32 GB de memoria o superior
Parámetros de rendimiento
Los siguientes parámetros pueden afectar al rendimiento de la base de datos:
- Los valores de innodb_spin_wait_delay y query_alloc_block_size están determinados por las especificaciones de instancia de base de datos. Si aumenta sus valores, el rendimiento de la base de datos puede verse afectado.
- Si max_connections se establece en un valor pequeño, el acceso a la base de datos se verá afectado.
- Los valores predeterminados de los siguientes parámetros están determinados por las especificaciones de instancia de base de datos innodb_buffer_pool_size, max_connections, y back_log. Estos valores de parámetros son default antes de ser especificados.
- Los valores de innodb_io_capacity_max y innodb_io_capacity están determinados por el tipo de almacenamiento. Estos valores de parámetros son default antes de ser especificados.
Parámetros asociados
- character_set_server: Si cambia el valor de este parámetro, el sistema cambia los valores de collation_server, character_set_database, y collation_database en consecuencia.
Los parámetros character_set_server y collation_server están correlacionados entre sí. Por ejemplo, para RDS for MySQL 5.7, cuando character_set_server es de latin1, el valor predeterminado de collation_server es de latin1_swedish_ci. El valor collation_server debe comenzar por latin1.
- innodb_io_capacity: El valor de este parámetro debe ser menor o igual que el valor de innodb_io_capacity_max. Por ejemplo, si innodb_io_capacity_max se establece en 2000, el valor máximo de innodb_io_capacity es de 2000.
- innodb_buffer_pool_size: El valor de este parámetro debe ser un múltiplo del producto del valor para innodb_buffer_pool_chunk_size y innodb_buffer_pool_instances. Por ejemplo, si innodb_buffer_pool_chunk_size es 134217728 y innodb_buffer_pool_instances es 1, el valor de innodb_buffer_pool_size debe ser un múltiplo de 134217728.
Restricciones en la modificación de parámetros
- Cuando los parámetros innodb_adaptive_hash_index y innodb_buffer_pool_size se modifican al mismo tiempo, el valor de innodb_adaptive_hash_index no se cambia de OFF a ON.
- El valor de innodb_buffer_pool_size debe ser un múltiplo entero del producto de innodb_buffer_pool_instances y innodb_buffer_pool_chunk_size.
- Si innodb_buffer_pool_instances se establece en 2, el valor de innodb_buffer_pool_size debe ser mayor o igual a 1 (unidad: GB).
- Para MySQL 8.0, si la versión del núcleo es anterior a 8.0.18, el valor de max_prepared_stmt_count no puede exceder 1048576.
Otros parámetros
- max_prepared_stmt_count: limita el límite superior de las sentencias preparadas. Demasiadas sentencias preparadas consumen recursos de memoria del servidor. Si este parámetro se establece en un valor pequeño, la instancia de base de datos puede ser vulnerable a los ataques de denegación de servicio (DoS). Se recomienda cambiar este valor de parámetro en función de los requisitos de servicio.
- Los valores de los siguientes parámetros se ajustarán en función de las reglas del kernel:
- key_cache_age_threshold: se ajusta automáticamente a un múltiplo de 100.
- join_buffer_size y key_cache_block_size: se ajustan automáticamente a múltiplos de 128.
- query_cache_size, query_prealloc_size, innodb_log_buffer_size, max_allowed_packet, y thread_stack: se ajustan automáticamente a múltiplos de 1024.
- read_buffer_size, read_rnd_buffer_size, binlog_cache_size, y binlog_stmt_cache_size: se ajustan automáticamente a múltiplos de 4096.
- data_buffer_size, log_buffer_size, shared_pool_size, y temp_buffer_size: se ajustan automáticamente a múltiplos de 1048576.
- binlog_format: se establece en row de forma predeterminada, lo que indica que los registros binarios se registran como los datos modificados por fila, incluidos los datos antes y después de la modificación. Se recomienda no cambiar el valor de este parámetro.
- log_timestamps: controla la zona horaria de las marcas de tiempo en los mensajes escritos en el registro de errores y, en general, los mensajes de registro de consultas y de registro de consultas lentas escritos en archivos. El valor predeterminado es la zona horaria del sistema y no se puede cambiar.
- skip_name_resolve: se establece en ON de forma predeterminada, lo que indica que el sistema omite la resolución de nombres de dominio y determina si se puede configurar una conexión en función de la dirección IP de la lista blanca.
- innodb_strict_mode: restringe la política de comprobación de InnoDB. El valor predeterminado es OFF.
- binlog_rows_query_log_events: controla si se escriben sentencias SQL originales en binlogs. Si este parámetro se establece en ON, el rendimiento de la base de datos puede deteriorarse cuando se actualiza una gran cantidad de datos. Antes de cambiar el valor del parámetro, considere la compatibilidad con herramientas como Otter.