Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 15232|Resposta: 3

[Fonte] Solução 100% alta de CPU MySQL

[Copiar link]
Publicado em 11/10/2018 11:20:31 | | | |
Abra o gerenciador de tarefas do servidor e veja que o processo da CPU sempre foi 99%, e a visualização está ocupada pelo processo mysql, que tem sido alto.


A saída do comando processlist mostra quais threads estão em execução, e você pode verificar o status atual em execução do banco de dados.

1. Vá ao diretório mysql/bin e insira a lista de processos mysqladmin;
2. Inicie o mysql e insira a lista de processos de exibição.
Se você tiver permissão SUPER, pode ver todos os tópicos, caso contrário, só pode ver os tópicos da sua conta.





O significado e o propósito de cada coluna

id: Um identificador
user: exibe o usuário atual, se não for root, esse comando só exibirá instruções SQL dentro das suas permissões.
host: mostra de qual IP essa instrução vem de qual porta
db: Exibe o banco de dados ao qual o processo está atualmente conectado.
comando: Exibe os comandos executados pela conexão atual, geralmente suspensão, consulta e conexão.
tempo: O tempo que esse estado dura, em segundos.
estado: Exibe o status da instrução sql que usa a conexão atual, mas apenas um determinado estado na execução da instrução, uma instrução sql, foi consultada, por exemplo, pode ser necessário passar pela cópia para a tabela tmp, resultado de ordenação, envio de dados, etc
info: Exibe essa instrução SQL, porque o comprimento é limitado, então a instrução SQL longa não é totalmente exibida, mas é uma base importante para julgar a declaração do problema.


Descobriu-se que existem duas instruções de consulta SQL que levam mais tempo e não foram executadas por mais de 1000 segundos, e as instruções SQL que copiamos do campo info são uma consulta conjunta, da seguinte forma:

selecione elenco (count(*) como ASSINADO) como col_0_0_ de 'RatedPassenger' ratedpasse0_, 'BaseInfoCompany' baseinfoco1_, 'OrderMatch' ordermatch2_ onde baseinfoco1_. Id da Companhia=ratedpasse0_. Empresa ID e ordermatch2_. OrderId=ratedpasse0_. OrderId

Nós eliminamos o processo dessas duas instruções de consulta

Depois de esperar 10 segundos, percebi que o processador tinha caído bastante, mas ainda estava muito alto, e continuarei questionando o motivo!



Para a instrução de consulta conjunta de junção, adicione um índice ao campo associado ou modifique o código da consulta do programa.
Criar uma instrução SQL de índice

Fim





Anterior:C# faça login no Wordpress
Próximo:Modificar o método de mapeamento de portas para contêineres docker
 Senhorio| Publicado em 11/10/2018 13:03:02 |
O mais crítico desse comando é a coluna de estado, e os estados listados no mysql são principalmente os seguintes:

Tabela de verificação  
  Conferindo a folha de dados (isso é automático).  
  Tabelas de encerramento  
  Os dados modificados na tabela estão sendo esvaziados para o disco, e a tabela que foi usada está sendo fechada. Essa é uma operação rápida, se não, você deve verificar se o espaço no disco está cheio ou se o disco está sob carga.  
  Conecte-se  
  O servidor escravo de replicação está conectando ao servidor principal.  
  Copiando para a tabela tmp no disco  
  Como o conjunto de resultados temporários é maior que tmp_table_size, a tabela temporária está sendo convertida da memória para armazenamento em disco para economizar memória.  
  Criando tabela tmp  
  Uma tabela temporária está sendo criada para armazenar alguns dos resultados das consultas.  
  Excluindo da tabela principal  
  O servidor está realizando a primeira parte de uma exclusão de múltiplas tabelas e acabou de deletar a primeira tabela.  
  Exclusão das tabelas de referência  
  O servidor está realizando a segunda parte da exclusão de múltiplas tabelas, que é a exclusão de registros de outras tabelas.  
  Mesas de descarga  
  Fazendo as TABELAS FLUSH, esperando que outros threads fechem a tabela de dados.  
  Mortos  
  Se um pedido de eliminação for enviado para um thread, o thread verificará a flag de kill e abandonará o próximo pedido de kill. O MySQL verifica flags de morte em cada loop principal, embora em alguns casos a thread possa morrer por um curto período de tempo. Se a thread for travada por outra thread, a kill request terá efeito imediatamente assim que o lock for liberado.  
  Trancado  
  Travado por outras dúvidas.  
  Envio de dados  
  O registro da consulta SELECT está sendo processado enquanto os resultados são enviados ao cliente.  
  Ordenação por grupo  
  Ordenando para GRUPO POR.  
  Ordenação por ordem  
  A classificação está sendo feita para ORDER BY.  
  Tabelas de abertura  
  Esse processo deve ser rápido, a menos que outros fatores o atrapalhem. Por exemplo, uma tabela de dados não pode ser aberta por outra thread até que a instrução ALTER TABLE ou LOCK TABLE seja executada. Tentando abrir uma mesa.  
  Remoção de duplicados  
  Uma consulta SELECT DISTINCT está sendo executada, mas o MySQL não consegue otimizar os registros duplicados na etapa anterior. Portanto, o MySQL precisa remover novamente os registros duplicados antes de enviar os resultados para o cliente.  
  Mesa de reabertura  
  Um bloqueio em uma tabela é obtido, mas ele deve ser modificado após a modificação da estrutura da tabela. Já soltei o bloqueio, fechei a folha de dados e está tentando reabrir a tabela de dados.  
  Reparo por ordenação  
  A instrução de correção é ordenar para criar um índice.  
  Reparo com keycache  
  A diretriz de fixação está usando o cache de índices para criar novos índices um a um. Será mais lento que Reparar por seleção.  
  Buscando linhas para atualização  
  Registros elegíveis estão sendo identificados para atualização. Isso deve ser feito antes que a ATUALIZAÇÃO modifique o registro relevante.  
  Dormindo  
  Esperando o cliente enviar um novo pedido.  
  Bloqueio do sistema  
  Aguardando para obter um bloqueio de sistema externo. Se não houver servidores mysqld rodando ao mesmo tempo solicitando a mesma tabela, bloqueios externos de sistema podem ser proibidos adicionando o parâmetro –skip-external-lock.  
  Atualização da eclusa  
  INSERT DELAYED está tentando fazer uma tabela de bloqueios inserir um novo registro.  
  Atualização  
  Buscar registros correspondentes e modificá-los.  
  Bloqueio do Usuário  
  está esperando por GET_LOCK().  
  Esperando mesas  
  A thread foi notificada de que a estrutura da folha de dados havia sido modificada e precisava ser reaberta para obter a nova estrutura. Então, para reabrir a tabela de dados, você deve esperar até que todas as outras threads fechem. Essa notificação ocorre nos seguintes casos: FLUSH TABLES tbl_name, ALTERAR TABELA, RENOMEAR TABELA, TABELA DE REPARO, TABELA DE ANÁLISE ou OTIMIZAR TABELA.  
  Aguardando o inserto do manipulador  
  INSERT DELAYED processou todas as inserções pendentes e está aguardando uma nova solicitação.  
  A maioria dos estados corresponde a operações rápidas, desde que uma thread permaneça no mesmo estado por alguns segundos, pode haver um problema que precise ser verificado.
 Senhorio| Publicado em 01/03/2019 10:26:49 |
 Senhorio| Publicado em 01/03/2019 10:34:13 |


Leva 10 segundos para consultar um dado.
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com