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

Vista: 33231|Resposta: 6

[Fonte] MySQL analisa o alto uso de CPU em situações de alta concorrência

[Copiar link]
Publicado em 05/09/2017 20:23:59 | | | |


Recentemente, por alguns motivos, o número de visitas ao site aumentou drasticamente, e pelo número, pode-se ver que o número de conexões simultâneas ultrapassa 1.200

Como a configuração do servidor é muito baixa, com 1 núcleo e memória 2G, e o site é muito lento para acessar quando há muitas pessoas


Usamos o comando top para verificar, o mysql consome muita CPU e memória, e outros processos são php-fpm que ocupam CPU e memória, o que não é muito alto

Se o mysql está rodando normalmente, é que algumas instruções SQL no PHP causam a descoberta de problemas, e o usuário root entra no gerenciamento do mysql
mysql -u raiz -p
Digite a senha e depois insira o seguinte comando




Com esse comando, podemos ver que o banco de dados está constantemente executando operações de exclusão com condições where.



pre_k_spider essa tabela é uma tabela que registra acessos spider, presumivelmente causados por um plugin instalado

Podemos ver que pre_k_spider tabela tem mais de 100.000 registros, e a consulta leva 33 segundos



Esvazie decisivamente essa tabela e, depois, vá para o background de gerenciamento para fechar os plug-ins relevantes da tabela e restaurar ao normal!









Anterior:Serviço de Reconhecimento de Códigos de Verificação do Alibaba Cloud Cloud Marketplace
Próximo:mysql 5.6.21 para visualizar o arquivo de configuração my.cnf
 Senhorio| Publicado em 06/09/2017 09:32:56 |


Hoje o site travou novamente, e um grande número de pessoas dorme

Causas do sono:

1 O programa cliente não chamou mysql_close() antes de sair.

2 O cliente estava dormindo mais de wait_timeout ou interactive_timeout segundos sem emitir nenhuma solicitação ao servidor.

3 O programa cliente terminou abruptamente no meio de uma transferência de dados

Se o número de processos de suspensão no mesmo período for muito alto, e o número total de conexões em outros estados exceder o valor max_connection, então o MySQL não consegue mais processar nenhuma requisição, exceto o usuário raiz, não consegue estabelecer conexão com nenhuma requisição ou trava diretamente

Solução:

1. Primeiro, verifique se seu programa usa o método pconnect e, segundo, verifique se o mysql_close() é chamado a tempo antes da execução da página. Tente não usar o método pconnect, ou seja, use mysql_connect. Quando o programa é executado, o mysql_close deve ser explicitamente invocado

2. Adicione wait_timeout e interactive_timeout ao my.cnf, defina o valor menor, por padrão o valor do wait_timeout é 8 horas, você pode mudar para 1 hora ou meia hora. Assim, o mysql vai matar conexões mortas mais rápido. Evite que o número total de conexões ultrapasse o valor max_connection.

wait_timeout muito grande fará com que um grande número de processos SLEEP no MySQL seja liberado a tempo, prejudicando o desempenho do sistema, mas se as configurações forem muito pequenas, você pode encontrar problemas como "O MySQL desapareceu"

Defina o valor max_connection para um valor maior, mas isso obviamente não é apropriado; quanto mais conexões você tem, mais estresse isso coloca no seu servidor. Na verdade, essas conexões são redundantes, e eliminá-las o quanto antes é a melhor política.

3. Analisar a consulta SQL do sistema passo a passo, encontrar o SQL que está muito lento e otimizá-lo



1)interactive_timeout:
Significado do parâmetro: O número de segundos que o servidor espera por uma atividade antes de desligar a conexão interativa. Um cliente interativo é definido como um cliente que utiliza CLIENT_INTERACTIVE opção em mysql_real_connect().
Parâmetro padrão: 28800 segundos (8 horas)

(2)wait_timeout:
Significado do parâmetro: O número de segundos que o servidor espera pela atividade antes de fechar a conexão não interativa.
Quando a thread inicia, o valor da wait_timeout sessão é inicializado com base no valor global wait_timeout ou global interactive_timeout, dependendo do tipo de cliente (definido CLIENT_INTERACTIVE as opções de conexão de mysql_real_connect()).
Parâmetro padrão: 28800 segundos (8 horas)

Existe um limite máximo para o número máximo de conexões que o MySQL Server pode suportar, pois cada conexão é estabelecida e consome memória, então esperamos que os clientes desconectem e liberem a memória ocupada após a conexão ao MySQL Server para realizar a operação correspondente. Se seu MySQL Server tiver um grande número de conexões ociosas, não só elas vão consumir memória em vão, mas se as conexões continuarem se acumulando e abrindo, eventualmente atingirão o número máximo de conexões no MySQL Server, o que reportará o erro 'conexões demais'. A definição de valores do wait_timeout deve ser avaliada de acordo com o funcionamento do sistema. Depois que o sistema estiver rodando por um período de tempo, você pode verificar o status da conexão do sistema atual pelo comando mostrar processlist; se encontrar um grande número de processos conectados no estado de suspensão, significa que a configuração de parâmetros é muito grande, e você pode fazer ajustes apropriados para fazer ajustes menores.


Comando SQL:



Esse método de modificação está emApós reiniciar o serviço mysql, ele ficará inválido, então é melhor configurar essas duas propriedades no arquivo de configuração mysql.

Modificar o arquivo my.cnf no Linux:




Publicado em 06/09/2017 11:15:15 |
Preciso conseguir um servidor mestre-escravo
 Senhorio| Publicado em 06/09/2017 11:15:49 |
Vrchary postado em 2017-9-6 às 23:15
Preciso conseguir um servidor mestre-escravo

Razão da configuração do servidor A configuração é baixa   
 Senhorio| Publicado em 06/09/2017 13:47:56 |
Resolvi o problema de "mysql-bin.000001" ocupar uma grande quantidade de espaço
http://www.itsvse.com/thread-2694-1-1.html
(Fonte: Architect)

Depois de instalar MySQL com portas, depois de um tempo percebi que o espaço /var era insuficiente, verifiquei e descobri que mysql-bin.000001, mysql-bin.000002 e outros arquivos ocupavam espaço, então para que servem esses arquivos? Este é o log de operações do banco de dados, como ATUALIZAR uma tabela ou DELETE alguns dados; mesmo que a instrução não corresponda aos dados, esse comando será armazenado no arquivo de log, incluindo o tempo de execução de cada sentencia, que também será registrado.

Isso é feito principalmente para os seguintes dois propósitos:
1: Recuperação de dados
Se seu banco de dados tiver um problema e você já tiver um backup antes, pode olhar o arquivo de log para descobrir qual comando causou o problema do banco de dados e encontrar uma forma de recuperar a perda.
2: Sincronizar dados entre servidores mestre-escravo
Todas as operações no servidor principal são registradas em um log que o servidor escravo pode usar para garantir que ambos estejam sincronizados.

É só fechar o tronco


 Senhorio| Publicado em 09/10/2017 14:33:30 |
mysqld está ocupando muito o Windows por CPU abaixo



Solução: Otimizar a instrução SQL
Publicado em 30/12/2021 23:15:36 |
Apoie!!!!!!!!!!!!!!!!
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