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: 15232|Respuesta: 3

[Fuente] Solución 100% alta de CPU MySQL

[Copiar enlace]
Publicado en 11/10/2018 11:20:31 | | | |
Abro el administrador de tareas del servidor y descubro que el proceso de la CPU siempre ha sido del 99%, y la vista está ocupada por el proceso mysql, que ha estado alto.


La salida del comando de lista de procesos muestra qué hilos están en ejecución, y puedes comprobar el estado actual de ejecución de la base de datos.

1. Ir al directorio mysql/bin e introducir mysqladmin proceslist;
2. Inicia mysql e introduce la lista de procesos de mostrar (ver la lista de procesos).
Si tienes el permiso SUPER, puedes ver todos los hilos, si no, solo puedes ver los hilos de tu cuenta.





El significado y propósito de cada columna

id: Un identificador
user: muestra el usuario actual, si no es root, este comando solo mostrará sentencias SQL dentro de tus permisos.
host: muestra de qué IP proviene esta sentencia de qué puerto
db: Muestra la base de datos a la que está conectado actualmente el proceso.
comando: Muestra los comandos ejecutados por la conexión actual, normalmente suspensión de la línea, consulta y conexión.
tiempo: El tiempo que dura este estado en segundos.
estado: Muestra el estado de la instrucción sql que utiliza la conexión actual, pero solo se ha consultado un estado determinado en la ejecución de la sentencia, una sentencia sql, por ejemplo, puede necesitar pasar por la copia a la tabla tmp, resultado de ordenamiento, envío de datos, etc
info: Muestra esta sentencia SQL, porque la longitud es limitada, por lo que la sentencia SQL larga no se muestra completamente, pero es una base importante para juzgar la sentencia del problema.


Se descubre que hay dos sentencias de consulta SQL que tardan más tiempo y no se han ejecutado en más de 1000 segundos, y las sentencias SQL que copiamos del campo info son una consulta conjunta, como sigue:

selecciona cast(count(*) como SIGNED) como col_0_0_ de 'RatedPassenger' ratedpasse0_, 'BaseInfoCompany' baseinfoco1_, 'OrderMatch' ordermatch2_ donde baseinfoco1_. CompanyId=ratedpasse0_. Identificación de la empresa y ordermatch2_. OrderId=ratedpasse0_. OrderId

Eliminamos el proceso de estas dos sentencias de consulta

Después de esperar 10 segundos, descubrí que la CPU había bajado mucho, pero seguía siendo muy alta, ¡y seguiré preguntando la razón!



Para la instrucción de consulta conjunta de unión, añade un índice al campo asociado o modifica el código de consulta del programa.
Crear una sentencia SQL de índice

Fin





Anterior:C# iniciar sesión en Wordpress
Próximo:Modificar el método de mapeo de puertos para contenedores docker
 Propietario| Publicado en 11/10/2018 13:03:02 |
El más crítico de este comando es la columna de estado, y los estados listados en mysql son principalmente los siguientes:

Tabla de control  
  Revisando la hoja de datos (esto es automático).  
  Tablas de cierre  
  Los datos modificados en la tabla se están vaciando al disco, y la tabla que se ha consumido se está cerrando. Es una operación rápida; si no, deberías comprobar si el espacio en disco está lleno o si el disco está cargado.  
  Conéctate  
  El servidor esclavo de replicación se conecta al servidor principal.  
  Copiando a la tabla tmp en disco  
  Como el conjunto de resultados temporal es mayor que tmp_table_size, la tabla temporal se convierte de la memoria a almacenamiento en disco para ahorrar memoria.  
  Creación de la tabla tmp  
  Se está creando una tabla temporal para contener algunos de los resultados de la consulta.  
  Eliminación de la tabla principal  
  El servidor está realizando la primera parte de una eliminación de varias tablas y acaba de eliminar la primera tabla.  
  Eliminación de tablas de referencia  
  El servidor realiza la segunda parte de la eliminación de varias tablas, que consiste en eliminar registros de otras tablas.  
  Tablas de descarga  
  Haciendo las TABLAS FLUSH, esperando a que otros hilos cierren la tabla de datos.  
  Muerto  
  Si se envía una solicitud de muerte a un hilo, este comprobará la bandera de eliminación y abandonará la siguiente petición de muerte. MySQL comprueba las banderas de eliminación en cada bucle principal, aunque en algunos casos el hilo puede fallar durante un corto periodo de tiempo. Si el hilo está bloqueado por otro hilo, la solicitud de eliminación se activará inmediatamente al liberar el bloqueo.  
  Bloqueado  
  Bloqueado por otras consultas.  
  Envío de datos  
  El registro de la consulta SELECT se está procesando mientras los resultados se envían al cliente.  
  Ordenación por grupo  
  Ordenando para AGRUPAR POR.  
  Ordenación por orden  
  Se está ordenando para ORDER BY.  
  Tablas de apertura  
  Este proceso debería ser rápido salvo que otros factores lo interfieran. Por ejemplo, una tabla de datos no puede ser abierta por otro hilo hasta que se ejecute la instrucción ALTER TABLE o LOCK TABLE. Intentando abrir una mesa.  
  Eliminación de duplicados  
  Se está ejecutando una consulta SELECT DISTINCT, pero MySQL no puede optimizar los registros duplicados en la etapa anterior. Por lo tanto, MySQL necesita eliminar los registros duplicados de nuevo antes de enviar los resultados al cliente.  
  Tabla de reapertura  
  Se obtiene un bloqueo en una tabla, pero debe modificarse después de modificar la estructura de la tabla. Ya solté el bloqueo, cerré la hoja de datos y está intentando reabrir la tabla de datos.  
  Reparación mediante clasificación  
  La instrucción de corrección es ordenar para crear un índice.  
  Reparación con keycache  
  La directiva fix utiliza la caché de índices para crear nuevos índices uno a uno. Será más lento que Reparar por ordenación.  
  Buscando filas para actualizar  
  Los registros elegibles se están identificando para actualizarse. Debe hacerse antes de que la ACTUALIZACIÓN modifique el registro relevante.  
  Durmiendo  
  Esperando a que el cliente envíe una nueva solicitud.  
  Bloqueo del sistema  
  Esperando para obtener un bloqueo de sistema externo. Si no hay servidores mysqld ejecutándose al mismo tiempo solicitando la misma tabla, los bloqueos externos del sistema pueden prohibirse añadiendo el parámetro –skip-external-lock.  
  Mejora de la esclusa  
  INSERT DELAYED está intentando que una tabla de cerraduras inserte un nuevo registro.  
  Actualización  
  Buscar registros coincidentes y modificarlos.  
  Bloqueo de usuario  
  está esperando GET_LOCK().  
  Esperando mesas  
  Se notificó al hilo que la estructura de la hoja de datos había sido modificada y que debía reabrirse para obtener la nueva estructura. Luego, para volver a abrir la tabla de datos, debes esperar a que todos los demás hilos cierren la tabla. Esta notificación ocurre en los siguientes casos: FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE o OPTIMIZE TABLE.  
  Esperando el inserto del manejador  
  INSERT DELAYED ha procesado todas las inserciones pendientes y está esperando una nueva solicitud.  
  La mayoría de los estados corresponden a operaciones rápidas; mientras un hilo permanezca en el mismo estado unos segundos, puede haber un problema que deba ser comprobado.
 Propietario| Publicado en 1/3/2019 10:26:49 |
 Propietario| Publicado en 1/3/2019 10:34:13 |


Se tarda 10 segundos en consultar un dato.
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