Devo me preocupar com o processo de status de suspensão do mysql na lista de processos

11

Durante a operação do site, na lista de processos do mysql, vejo alguns processos com a coluna "command" marcada como "SLEEP".

Eu deveria me preocupar? Como parar com isso?

Hao
fonte

Respostas:

17

Até os mais poderosos de nós precisam dormir algumas vezes. Sem dormir, a pessoa fica ansiosa e a insônia pode levar a todos os tipos de sintomas graves.

Mais sério: estado de suspensão significa que o processo MySQL terminou sua consulta, mas o lado do cliente ainda não saiu. Muitas aplicações web não limpam suas conexões posteriormente, o que leva a processos MySQL adormecidos. Não se preocupe se houver apenas um punhado deles; O MySQL os limpará após um período de tempo limite configurável (wait_timeout).

Ou, se o seu aplicativo da Web usa conexões persistentes e pool de conexões, é perfeitamente normal ter muitos processos inativos: nesse caso, o aplicativo apenas abre, por exemplo, 100 conexões SQL e as mantém abertas. Isso reduz a sobrecarga de abertura / fechamento da conexão. A menos que seu aplicativo seja muito ocupado, é normal que nem todo processo SQL tenha algo a fazer, portanto eles dormem.

Janne Pikkarainen
fonte
5

Não, não se preocupe com eles, a menos que você tenha milhares deles. Geralmente eles indicam uma conexão com o banco de dados que atualmente não está fazendo nada, mas que ainda está ativo.

Muitos sites são construídos de forma que, no início do processamento de uma página, uma conexão com o banco de dados seja aberta, usada durante toda a geração da página e finalmente descartada no final. Se o descarte for feito corretamente, a conexão com o banco de dados será fechada e o servidor eliminará o encadeamento relevante, o que significa que essa conexão desaparece da lista de processos.

Se a conexão não estiver fechada, ela poderá permanecer no estado "DORMIR" até o tempo limite. Nesse caso, você pode acabar com muitos processos adormecidos. mas, a menos que você tenha problemas de memória no servidor db, também não será um grande problema.

wolfgangsz
fonte
3

Antes de aumentar a variável max_connections, você deve verificar quantas conexões não interativas possui executando o comando show processlist.

Se você tiver muitas conexões de suspensão, precisará diminuir o valor da variável "wait_timeout" para fechar a conexão não interativa após aguardar algumas vezes.

  • Para mostrar o valor wait_timeout:
MOSTRAR VARIÁVEIS DA SESSÃO COMO 'wait_timeout';

+ --------------- + ------- +
| Nome da variável | Valor
+ --------------- + ------- +
| wait_timeout | 28800
+ --------------- + ------- +

o valor está em segundo, significa que a conexão não interativa ainda tem até 8 horas.

  • Para alterar o valor da variável "wait_timeout":
Sessão SET wait_timeout = 600;
Consulta OK, 0 linhas afetadas (0,00 s)

Após 10 minutos, se a conexão de suspensão ainda estiver inativa, o mysql ou o MariaDB eliminam essa conexão.

S.Bao
fonte