Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 33231|Respuesta: 6

[Fuente] MySQL analiza un alto uso de CPU en situaciones de alta concurrencia

[Copiar enlace]
Publicado en 5/9/2017 20:23:59 | | | |


Recientemente, por alguna razón, el número de visitas a sitios web ha aumentado considerablemente y, según la cifra, se puede ver que el número de conexiones concurrentes supera las 1.200

Porque la configuración del servidor es muy baja, 1 núcleo y memoria 2G, y luego la web es muy lenta de acceder cuando hay mucha gente


Usamos el comando top para comprobarlo, mysql ocupa mucha CPU y memoria, y otros procesos son php-fpm que consumen CPU y memoria, lo cual no es muy alto

Si mysql funciona normalmente, es que algunas sentencias SQL en PHP causan problemas y el usuario raíz entra en la gestión de mysql
mysql -u root -p
Introduce la contraseña y luego introduce el siguiente comando




Con este comando, podemos ver que la base de datos está ejecutando constantemente operaciones de eliminación con condiciones where.



pre_k_spider esta tabla es una tabla que registra accesos araña, presumiblemente causados por un plugin instalado

Podemos ver que pre_k_spider tabla tiene más de 100.000 registros y la consulta tarda 33 segundos



Vacía esta tabla de forma decisiva y luego ve al fondo de gestión para cerrar los complementos relevantes de la tabla y restaurarla a la normalidad.









Anterior:Servicio de Reconocimiento de Códigos de Verificación en la Nube del Marketplace en la Nube de Alibaba
Próximo:mysql 5.6.21 para ver el archivo de configuración my.cnf
 Propietario| Publicado en 6/9/2017 9:32:56 |


Hoy la web vuelve a estar atascada y se encuentra un gran número de personas dormidas

Causas del sueño:

1 El programa cliente no llamó a mysql_close() antes de salir.

2 El cliente había estado dormido más de wait_timeout o interactive_timeout segundos sin emitir ninguna solicitud al servidor.

3 El programa cliente terminó abruptamente en medio de una transferencia de datos

Si el número de procesos de suspensión en el mismo periodo es demasiado alto y el número total de conexiones en otros estados supera el valor de max_connection, entonces MySQL ya no puede procesar ninguna solicitud excepto el usuario raíz, no puede establecer conexión con ninguna petición o se queda colgado directamente

Solución:

1. Primero, comprueba si tu programa utiliza el método pconnect y, segundo, si el mysql_close() se llama a tiempo antes de ejecutar la página. Intenta no usar el método pconnect, es decir, usa mysql_connect. Cuando se ejecuta el programa, el mysql_close debe invocarse explícitamente

2. Añade wait_timeout y interactive_timeout a my.cnf, pon el valor más pequeño, por defecto el valor de wait_timeout es 8 horas, puedes cambiarlo a 1 hora o media hora. De esta manera, mysql matará las conexiones muertas más rápido. Evitar que el número total de conexiones supere el valor de max_connection.

wait_timeout demasiado grande hará que se liberen un gran número de procesos SLEEP en MySQL con el tiempo, lo que ralentiza el rendimiento del sistema, pero si la configuración es demasiado pequeña, puedes encontrarte con problemas como "MySQL ha desaparecido"

Pon el valor de max_connection en un valor más alto, pero obviamente esto no es apropiado; cuantas más conexiones tengas, más estrés supone en tu servidor. De hecho, esas conexiones son redundantes, y eliminarlas cuanto antes es la mejor política.

3. Analizar la consulta SQL del sistema paso a paso, encontrar el SQL que es demasiado lento y optimizarlo



1)interactive_timeout:
Significado del parámetro: El número de segundos que el servidor espera una actividad antes de apagar la conexión interactiva. Un cliente interactivo se define como un cliente que utiliza CLIENT_INTERACTIVE opción en mysql_real_connect().
Parámetro por defecto: 28800 segundos (8 horas)

(2)wait_timeout:
Significado del parámetro: El número de segundos que el servidor espera la actividad antes de cerrar la conexión no interactiva.
Cuando el hilo inicia, el valor de wait_timeout sesión se inicializa en función del valor global de wait_timeout o global de interactive_timeout, dependiendo del tipo de cliente (definido CLIENT_INTERACTIVE las opciones de conexión de mysql_real_connect()).
Parámetro por defecto: 28800 segundos (8 horas)

Existe un límite superior al número máximo de conexiones que MySQL Server puede soportar, ya que cada conexión se establece y consume memoria, por lo que esperamos que los clientes se desconecten y liberen la memoria ocupada tras conectarse a MySQL Server para gestionar la operación correspondiente. Si tu MySQL Server tiene un gran número de conexiones inactivas, no solo consumirán memoria en vano, sino que si las conexiones siguen acumulándose y abriéndose, eventualmente alcanzarán el número máximo de conexiones en MySQL Server, lo que reportará el error de 'demasiadas conexiones'. La fijación de valores del wait_timeout debe evaluarse según el funcionamiento del sistema. Después de que el sistema haya estado funcionando durante un tiempo, puedes comprobar el estado de la conexión del sistema actual mediante el comando mostrar la lista de procesos; si encuentras un gran número de procesos conectados en estado de suspensión, significa que el ajuste de parámetros es demasiado grande y puedes hacer ajustes apropiados para hacer ajustes más pequeños.


Comando SQL:



Este método de modificación está enTras reiniciar el servicio mysql, será inválido, por lo que lo mejor es configurar estas dos propiedades en el archivo de configuración mysql.

Modifica el archivo my.cnf en Linux:




Publicado en 6/9/2017 11:15:15 |
Tengo que conseguir un servidor maestro-esclavo
 Propietario| Publicado en 6/9/2017 11:15:49 |
Vrchary publicado el 6-9-2017 a las 11:15
Tengo que conseguir un servidor maestro-esclavo

Razón de configuración del servidor La configuración es baja   
 Propietario| Publicado en 6/9/2017 13:47:56 |
Solucionado el problema de que "mysql-bin.000001" ocupaba mucho espacio
http://www.itsvse.com/thread-2694-1-1.html
(Fuente: Arquitecto)

Después de instalar MySQL con puertos, al cabo de un tiempo vi que el espacio /var era insuficiente, comprobé y vi que mysql-bin.000001, mysql-bin.000002 y otros archivos ocupaban espacio, así que ¿para qué sirven estos archivos? Este es el registro de operaciones de la base de datos, como ACTUALIZA una tabla o ELIMINA algunos datos; incluso si la instrucción no coincide con los datos, este comando se almacenará en el archivo de registro, incluyendo el tiempo de ejecución de cada sentencia, que también se registrará.

Esto se hace principalmente para los siguientes dos propósitos:
1: Recuperación de datos
Si tu base de datos tiene un problema y ya tienes una copia de seguridad antes, puedes mirar el archivo de registro para averiguar qué comando causó el problema de tu base de datos y encontrar una forma de recuperar la pérdida.
2: Sincronizar datos entre servidores maestro-esclavo
Todas las operaciones en el servidor principal se registran en un registro que el servidor esclavo puede usar para asegurar que ambos estén sincronizados.

Solo cierra el registro


 Propietario| Publicado en 9/10/2017 14:33:30 |
mysqld está demasiado ocupado por la CPU de Windows



Solución: Optimizar la sentencia SQL
Publicado en 30/12/2021 23:15:36 |
Apoyarlo!!!!!!!!!!!!!!!!
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com