sql >> Base de Datos >  >> RDS >> Mysql

Cómo optimizar el rendimiento de MySQL usando MySQLTuner

Ejecutar MySQL con la configuración óptima para recursos específicos ayuda a manejar cargas de servidor más grandes y evita la ralentización del servidor. Generalmente, después de ajustar Apache para manejar cargas más grandes, es beneficioso ajustar MySQL para conexiones adicionales.

El ajuste de la base de datos es un tema extenso, y esta guía cubre solo los aspectos básicos de la edición de su configuración de MySQL. Las bases de datos MySQL grandes pueden requerir una cantidad considerable de memoria. Por esta razón, recomendamos usar un Linodo de memoria alta para tales configuraciones.

Nota Los pasos de esta guía requieren privilegios de root. Asegúrese de ejecutar los pasos a continuación como root o con sudo prefijo. Para obtener más información sobre los privilegios, consulte nuestra guía de usuarios y grupos.

Herramientas que pueden ayudar a optimizar MySQL

Para determinar si su base de datos MySQL necesita ser reconfigurada, es mejor ver cómo están funcionando sus recursos ahora. Esto se puede hacer con el comando superior o con el servicio LinodeLongview. Como mínimo, debe familiarizarse con el uso de RAM y CPU de su servidor, que se puede descubrir con estos comandos:

echo [PID]  [MEM]  [PATH] &&  ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 20
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -20

MySQLTuner

El script MySQLTuner evalúa su instalación de MySQL y luego genera sugerencias para aumentar el rendimiento y la estabilidad de su servidor.

  1. Descargue el script MySQLTuner:

     wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
    
  2. Cambie los permisos de los scripts para que sean ejecutables:

     chmod +x mysqltuner.pl
    
  3. Ejecute mysqltuner.pl texto. Se le pedirá que ingrese su nombre de usuario y contraseña administrativos de MySQL:

     ./mysqltuner.pl
    
  4. El script devolverá resultados similares a los siguientes:

    >>  MySQLTuner 1.4.0 - Major Hayden <[email protected]>
             >>  Bug reports, feature requests, and downloads at http://mysqltuner.com/
             >>  Run with '--help' for additional options and output filtering
            Please enter your MySQL administrative login: root
            Please enter your MySQL administrative password:
            [OK] Currently running supported MySQL version 5.5.41-0+wheezy1
            [OK] Operating on 64-bit architecture
    
            -------- Storage Engine Statistics -------------------------------------------
            [--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM
            [--] Data in InnoDB tables: 1M (Tables: 11)
            [--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17)
            [!!] Total fragmented tables: 11
    
            -------- Security Recommendations  -------------------------------------------
            [OK] All database users have passwords assigned
    
            -------- Performance Metrics -------------------------------------------------
            [--] Up for: 47s (113 q [2.404 qps], 42 conn, TX: 19K, RX: 7K)
            [--] Reads / Writes: 100% / 0%
            [--] Total buffers: 192.0M global + 2.7M per thread (151 max threads)
            [OK] Maximum possible memory usage: 597.8M (60% of installed RAM)
            [OK] Slow queries: 0% (0/113)
            [OK] Highest usage of available connections: 0% (1/151)
            [OK] Key buffer size / total MyISAM indexes: 16.0M/99.0K
            [!!] Query cache efficiency: 0.0% (0 cached / 71 selects)
            [OK] Query cache prunes per day: 0
            [OK] Temporary tables created on disk: 25% (54 on disk / 213 total)
            [OK] Thread cache hit rate: 97% (1 created / 42 connections)
            [OK] Table cache hit rate: 24% (52 open / 215 opened)
            [OK] Open file limit used: 4% (48/1K)
            [OK] Table locks acquired immediately: 100% (62 immediate / 62 locks)
            [OK] InnoDB buffer pool / data size: 128.0M/1.2M
            [OK] InnoDB log waits: 0
            -------- Recommendations -----------------------------------------------------
            General recommendations:
                Run OPTIMIZE TABLE to defragment tables for better performance
                Enable the slow query log to troubleshoot bad queries
            Variables to adjust:
                query_cache_limit (> 1M, or use smaller result sets)
    MySQLTuner ofrece sugerencias sobre cómo mejorar el rendimiento de la base de datos. Si desconfía de actualizar su base de datos por su cuenta, seguir las sugerencias de MySQLTuner es una de las formas más seguras de mejorar el rendimiento de su base de datos.

Ajuste de MySQL

Al modificar la configuración de MySQL, esté alerta a los cambios y cómo afectan a su base de datos. Incluso cuando se siguen las instrucciones de programas como MySQLTuner, es mejor tener cierta comprensión del proceso.

El archivo de configuración de MySQL almacenado en la siguiente ubicación:/etc/mysql/my.cnf .

Nota

Antes de actualizar su configuración de MySQL, cree una copia de seguridad de my.cnf archivo:

cp /etc/mysql/my.cnf ~/my.cnf.backup

Las mejores prácticas sugieren que realice pequeños cambios, uno a la vez, y luego supervise el servidor después de cada cambio. Debe reiniciar MySQL después de cada cambio:

Para distribuciones usando systemd:

systemctl restart mysqld

Para distribuciones con diferentes sistemas de inicio:

service mysql restart

Al cambiar valores en my.cnf archivo, asegúrese de que la línea que está cambiando no haya sido comentada con la libra (# ) prefijo.

key_buffer

Cambiando el key_buffer asigna más memoria a MySQL, lo que puede acelerar sustancialmente sus bases de datos, suponiendo que tenga la memoria libre. El key_buffer El tamaño generalmente no debe ocupar más del 25 por ciento de la memoria del sistema cuando se usa el motor de tabla MyISAM, y hasta el 70 por ciento para InnoDB. Si el valor se establece demasiado alto, se desperdician recursos.

Según la documentación de MySQL, para servidores con 256 MB (o más) de RAM con muchas tablas, se recomienda una configuración de 64 MB. Los servidores con 128 MB de RAM y menos tablas se pueden configurar en 16 M, el valor predeterminado. Los sitios web con incluso menos recursos y tablas pueden tener este valor establecido más bajo.

max_allowed_packet

Este parámetro le permite establecer el tamaño máximo de un paquete que se puede enviar. Un paquete es un solo estado de SQL, una sola fila que se envía a un cliente o un registro que se envía desde una base de datos de origen a una réplica. Si sabe que su servidor MySQL va a procesar paquetes grandes, es mejor aumentar esto al tamaño de su paquete más grande. Si este valor se establece demasiado pequeño, recibirá un error en su registro de errores.

pila_de_hilos

Este valor contiene el tamaño de la pila para cada subproceso. MySQL considera el valor predeterminado de thread_stack variable suficiente para un uso normal; sin embargo, si se produce un error relacionado con thread_stack ser registrado, esto se puede aumentar.

tamaño_caché_hilo

Si thread_cache_size está "apagado" (establecido en 0), entonces cualquier nueva conexión que se realice necesita un nuevo hilo creado para ello. Cuando las conexiones se sueltan, el hilo se destruye. De lo contrario, este valor establece la cantidad de subprocesos no utilizados para almacenar en un caché hasta que necesiten usarse para una conexión. En general, esta configuración tiene poco efecto en el rendimiento, a menos que esté recibiendo cientos de conexiones por minuto, momento en el que este valor debe aumentarse para que la mayoría de las conexiones se puedan realizar en subprocesos almacenados en caché.

conexiones_máximas

Este parámetro establece la cantidad máxima de concurrentes conexiones Es mejor considerar la cantidad máxima de conexiones que ha tenido en el pasado antes de establecer este número, por lo que tendrá un búfer entre ese número superior y max_connections valor. Tenga en cuenta que esto no indica la cantidad máxima de usuarios en su sitio web a la vez; más bien muestra la cantidad máxima de usuarios que realizan solicitudes al mismo tiempo.

table_cache

Este valor debe mantenerse más alto que sus open_tables valor. Para determinar este valor use:

1
SHOW STATUS LIKE 'open%';

Más información

Es posible que desee consultar los siguientes recursos para obtener información adicional sobre este tema. Si bien estos se proporcionan con la esperanza de que sean útiles, tenga en cuenta que no podemos garantizar la precisión o la puntualidad de los materiales alojados externamente.

  • Biblioteca de documentación de MySQL
  • Parámetros del servidor de ajuste de MySQL
  • Tuner MySQL