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:
|