Nuestros desarrolladores estrellas han agotado sus provisiones de café, por su búsqueda a tiempo completo por la respuesta, hasta que Joaquín encontró el arreglo en Gogs así que hoy la comparte contigo.
Solución:
Si tu corres show processlist;
le mostrará todas las conexiones que se ejecutan en su base de datos. Corriendo show status like 'Conn%'
puede mostrar cuántas conexiones están activas
Puede pensar que una gran cantidad de conexiones aumentaría la CPU, pero en última instancia, depende de lo que esas conexiones estén tratando de lograr, si no están haciendo mucho pero impiden que su aplicación principal ejecute sus conexiones, entonces el nivel de procesamiento normal será bajar mientras no está ejecutando sus procesos normales
Lo molesto es poder ejecutar el comando show processlist que necesita para estar realmente conectado a la base de datos, lo que no podrá hacer ya que tiene conexiones máximas.
Una pequeña solución es aumentar sus conexiones máximas (si puede) y configurar un monitoreo en algún lugar que se ejecute de vez en cuando (cada 5 minutos lo habría detectado) y cuando tenga más de 50 conexiones, ejecute un comando que descarga todas las conexiones activas en algún lugar para que pueda revisarlas más tarde.
En su RDS, primero verifique todas las métricas de IOPS.
RDS proporciona una cierta cantidad de IOPS, y si su instancia de RDS tiene SSD de 10 GB, probablemente su cantidad de IOPS sea de 100 IOPS (predeterminado), este valor aumenta según el tamaño de SSD de la instancia.
Si no tiene suficientes IOPS, su RDS se bloquea para las operaciones de E/S, lo que provoca el ‘Envío de datos’ en su MySQL y tiempos de espera elevados, pero no cambia el uso de la CPU o la memoria, porque se trata de un problema de disco.
Para solucionarlo, cambie las configuraciones de MySQL, en Dashboard lo cambia.
Tengo MySQL en la instancia EC2, de bajo costo para mí.
Ver mi.cnf
[mysqld]
port = 3306
user = mysql
default-storage-engine = InnoDB
socket = /var/lib/mysql/mysql.sock
pid-file = /var/lib/mysql/mysql.pid
log-error = /var/lib/mysql/mysql-error.log
log-queries-not-using-indexes = 1
slow-query-log = 0
slow-query-log-file = /var/lib/mysql/mysql-slow.log
log_error_verbosity = 2
max-allowed-packet = 6M
skip-name-resolve
sql-mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY
sysdate-is-now = 1
datadir = /var/lib/mysql
key-buffer-size = 128M
query_cache_size = 128M #100M384M
tmp_table_size = 256M
max_heap_table_size = 256M
innodb-buffer-pool-size = 2G
innodb_log_buffer_size = 8M
innodb_log_file_size = 1G
wait_timeout = 10
interactive_timeout = 300
max-connect-errors = 100000
max-connections = 200
sort_buffer_size = 4M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
join_buffer_size = 2M
thread_stack = 4M
thread-cache-size = 80
performance_schema = on
query_cache_type = 1 #0 #1
query_cache_limit = 128M
table_open_cache = 2680
open-files-limit = 1024000
table-definition-cache = 3024
# IOPS OPTIMIZATION #
innodb-flush-method = O_DIRECT
innodb-log-files-in-group = 2
innodb-flush-log-at-trx-commit = 2
innodb_buffer_pool_instances = 1
innodb_stats_on_metadata = 0
innodb_io_capacity = 100
innodb_use_native_aio = 1
innodb-file-per-table = 0
explicit_defaults_for_timestamp = 1
[This conf is for 2 vcpu and 4GB RAM, 10GB SSD with 100IOPS]
Funciona bien para mí en AWS NLB + Auto Scaling Service.
Otras optimizaciones serían aumentar el búfer de innodb al 50 % de la memoria de la instancia e innodb_log_file_size al 50 % del valor de innodb-buffer-pool-size.
Lea esto: https://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-diskio.html
Espero ayudarte a ti o a otros usuarios con el mismo problema. =)
Eres capaz de animar nuestro estudio escribiendo un comentario o dejando una valoración te damos las gracias.