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

Sugerencias para lograr el rendimiento de la base de datos MySQL:primera parte

El backend de la base de datos afecta a la aplicación, lo que puede afectar el rendimiento de la organización. Cuando esto sucede, los responsables tienden a querer una solución rápida. Hay muchos caminos diferentes para mejorar el rendimiento en MySQL. Como opción muy popular para muchas organizaciones, es bastante común encontrar una instalación de MySQL con la configuración predeterminada. Sin embargo, es posible que esto no sea apropiado para su carga de trabajo y sus necesidades de configuración.

En este blog, lo ayudaremos a comprender mejor la carga de trabajo de su base de datos y las cosas que pueden dañarla. El conocimiento de cómo usar recursos limitados es esencial para cualquiera que administre la base de datos, especialmente si ejecuta su sistema de producción en MySQL DB.

Para garantizar que la base de datos funcione como se espera, comenzaremos con las herramientas gratuitas de monitoreo de MySQL. Luego veremos los parámetros de MySQL relacionados que puede modificar para mejorar la instancia de la base de datos. También veremos la indexación como un factor en la gestión del rendimiento de la base de datos.

Para poder lograr un uso óptimo de los recursos de hardware, analizaremos la optimización del kernel y otras configuraciones cruciales del sistema operativo. Finalmente, veremos las configuraciones modernas basadas en la replicación de MySQL y cómo se puede examinar en términos de retraso en el rendimiento.

Identificación de problemas de rendimiento de MySQL

Este análisis lo ayuda a comprender mejor el estado y el rendimiento de su base de datos. Las herramientas que se enumeran a continuación pueden ayudarlo a capturar y comprender cada transacción, lo que le permite estar al tanto de su rendimiento y consumo de recursos.

PMM (Monitoreo y Gestión de Percona)

La herramienta de supervisión y gestión de Percona es una colección de herramientas de código abierto dedicada a las bases de datos MySQL, MongoDB y MariaDB (en las instalaciones o en la nube). PPM es de uso gratuito y se basa en la conocida serie temporal DB de Grafana y Prometheus. Proporciona un análisis completo basado en el tiempo para MySQL. Ofrece paneles preconfigurados que ayudan a comprender la carga de trabajo de su base de datos.

PMM utiliza un modelo cliente/servidor. Tendrás que descargar e instalar tanto el cliente como el servidor. Para el servidor, puede usar Docker Container. Es tan fácil como extraer la imagen de la ventana acoplable del servidor PMM, crear un contenedor e iniciar PMM.

Extraer imagen del servidor PMM

docker pull percona/pmm-server:2

2: Pulling from percona/pmm-server

ab5ef0e58194: Downloading  2.141MB/75.78MB

cbbdeab9a179: Downloading  2.668MB/400.5MB

Crear contenedor PMM

docker create \

   -v /srv \

   --name pmm-data \

   percona/pmm-server:2 /bin/true

Ejecutar contenedor

docker run -d \

   -p 80:80 \

   -p 443:443 \

   --volumes-from pmm-data \

   --name pmm-server \

   --restart always \

   percona/pmm-server:2

También puede comprobar cómo se ve sin una instalación. Una demostración de PMM está disponible aquí.

Otra herramienta que forma parte del conjunto de herramientas de PMM es Query Analytics (QAN). La herramienta QAN se mantiene al tanto del tiempo de ejecución de las consultas. Incluso puede obtener detalles de consultas SQL. También brinda una vista histórica de los diferentes parámetros que son críticos para el rendimiento óptimo de un servidor de base de datos MySQL. Esto a menudo ayuda a comprender si algún cambio en el código podría dañar su rendimiento. Por ejemplo, se introdujo un nuevo código sin su conocimiento. Un uso simple sería mostrar consultas SQL actuales y resaltar problemas para ayudarlo a mejorar el rendimiento de su base de datos.

PMM ofrece visibilidad histórica y puntual del rendimiento de la base de datos MySQL. Los tableros se pueden personalizar para cumplir con sus requisitos específicos. Incluso puede expandir un panel en particular para encontrar la información que desea sobre un evento pasado.

Monitoreo gratuito de bases de datos con ClusterControl

ClusterControl proporciona monitoreo en tiempo real de toda la infraestructura de la base de datos. Admite varios sistemas de bases de datos a partir de MySQL, MariaDB, PerconaDB, MySQL NDB Cluster, Galera Cluster (tanto Percona como MariaDB), MongoDB, PostgreSQL y TimescaleDB. Los módulos de monitoreo e implementación son de uso gratuito.

ClusterControl consta de varios módulos. En la Edición comunitaria gratuita de ClusterControl podemos usar:

Los asesores de rendimiento ofrecen consejos específicos sobre cómo abordar problemas de bases de datos y servidores, como como rendimiento, seguridad, gestión de registros, configuración y planificación de la capacidad. Los informes operativos se pueden utilizar para garantizar el cumplimiento en cientos de instancias. Sin embargo, el seguimiento no es gestión. ClusterControl tiene funciones como administración de copias de seguridad, recuperación automática/conmutación por error, implementación/escalamiento, actualizaciones continuas, seguridad/cifrado, administración del balanceador de carga, etc.

Supervisión y Asesores

ClusterControl Community Edition ofrece monitoreo gratuito de la base de datos que proporciona una vista unificada de todas sus implementaciones en los centros de datos y le permite profundizar en los nodos individuales. Similar a PMM, podemos encontrar tableros basados ​​en datos en tiempo real. Es saber lo que está sucediendo ahora, con métricas de alta resolución para una mayor precisión, paneles preconfigurados y una amplia gama de servicios de notificación de terceros para alertas.

Los sistemas locales y en la nube se pueden monitorear y administrar desde un solo punto . Se implementan comprobaciones de estado inteligentes para topologías distribuidas, por ejemplo, detección de particiones de red aprovechando la vista del equilibrador de carga de los nodos de la base de datos.

ClusterControl Workload Analytics en uno de los componentes de monitoreo que puede ayudarlo fácilmente a realizar un seguimiento de las actividades de su base de datos. Proporciona claridad en las transacciones/consultas de las aplicaciones. Nunca se esperan excepciones de rendimiento, pero ocurren y es fácil pasarlas por alto en un mar de datos. El descubrimiento de valores atípicos obtendrá cualquier consulta que de repente comience a ejecutarse mucho más lentamente de lo habitual. Realiza un seguimiento del promedio móvil y la desviación estándar para los tiempos de ejecución de consultas y detecta/avisa cuando la diferencia entre el valor excede la media por dos desviaciones estándar.

Como podemos ver en la imagen a continuación, pudimos detectar algunas consultas que entre un día tienden a cambiar el tiempo de ejecución en un momento específico.

Para instalar ClusterControl haga clic aquí y descargue el script de instalación. El script de instalación se encargará de los pasos de instalación necesarios.

También debe consultar la demostración de ClusterControl para verlo en acción.

También puede obtener una imagen acoplable con ClusterControl.

$ docker pull severalnines/clustercontrol

Para obtener más información al respecto, siga este artículo.

Indización de la base de datos MySQL

Sin un índice, ejecutar esa misma consulta da como resultado un escaneo de cada fila en busca de los datos necesarios. La creación de un índice en un campo de una tabla crea una estructura de datos adicional, que es el valor del campo y un puntero al registro con el que se relaciona. En otras palabras, la indexación produce un atajo, con tiempos de consulta mucho más rápidos en tablas expansivas. Sin un índice, MySQL debe comenzar con la primera fila y luego leer toda la tabla para encontrar las filas relevantes.

En términos generales, la indexación funciona mejor en aquellas columnas que son el tema de las cláusulas WHERE en sus consultas comúnmente ejecutadas.

Las tablas pueden tener múltiples índices. La gestión de índices inevitablemente requerirá poder enumerar los índices existentes en una tabla. La sintaxis para ver un índice se encuentra a continuación.

Para comprobar los índices en la tabla MySQL ejecute:

SHOW INDEX FROM table_name;

Dado que los índices solo se usan para acelerar la búsqueda de un campo coincidente dentro de los registros, es lógico pensar que la indexación de campos usados ​​solo para la salida sería simplemente una pérdida de espacio en disco. Otro efecto secundario es que los índices pueden extender las operaciones de inserción o eliminación y, por lo tanto, deben evitarse cuando no se necesitan.

Intercambio de base de datos MySQL

En servidores donde MySQL es el único servicio en ejecución, es una buena práctica establecer vm.swapiness =1. La configuración predeterminada es 60, lo que no es apropiado para un sistema de base de datos.

vi /etc/sysctl.conf
vm.swappiness = 1

Páginas enormes transparentes

Si está ejecutando su MySQL en RedHat, asegúrese de que las páginas gigantes transparentes estén deshabilitadas.

Esto se puede verificar con el comando:

cat /proc/sys/vm/nr_hugepages
0

(0 significa que las páginas grandes transparentes están deshabilitadas).

Programador de E/S de MySQL 

En la mayoría de las distribuciones, los planificadores de E/S noop o de fecha límite deben estar habilitados de forma predeterminada. Para comprobarlo, ejecute

cat /sys/block/sdb/queue/scheduler 

Opciones del sistema de archivos MySQL

Se recomienda utilizar sistemas de archivos registrados como xfs, ext4 o btrfs. MySQL funciona bien con todos ellos y es más probable que las diferencias vengan con el tamaño de archivo máximo admitido.

  • XFS (tamaño máximo del sistema de archivos 8EB, tamaño máximo de archivo 8EB)
  • XT4 (tamaño máximo del sistema de archivos 8EB, tamaño máximo de archivo 16TB)
  • BTRFS (tamaño máximo del sistema de archivos 16EB, tamaño máximo de archivo 16EB)

La configuración predeterminada del sistema de archivos debería aplicarse correctamente.

Demonio NTP

Es una buena práctica instalar el demonio del servidor de tiempo NTP en los servidores de la base de datos. Utilice uno de los siguientes comandos del sistema.

#Red Hat
yum install ntp
#Debian
sudo apt-get install ntp

Conclusión

Esto es todo por la primera parte. En el próximo artículo, continuaremos con la configuración de los sistemas operativos de variables MySQL y consultas útiles para recopilar el estado de rendimiento de la base de datos.