consultas do dorminhoco do MySQL

1

Quando mostrar a lista de processos completa; retorna um número de consultas de status "sleep" com a coluna 0 time, o que poderia estar causando isso? Como o MySQL realmente decide se uma conexão precisa ou não dormir? O aplicativo que está falando com o mysql não está usando conexões persistentes.

    
por deadprogrammer 11.06.2009 / 17:45

2 respostas

5

O estado de suspensão indica apenas uma conexão inativa. Esse é um cliente que está conectado, mas não está realizando nenhuma consulta.

Eu sugeriria verificar se o seu aplicativo fecha qualquer encadeamento do MySQL não utilizado assim que terminar, mesmo se você não estiver usando conexões persistentes.

As conexões ociosas podem ser do lado "controlado" do servidor com a variável wait_timeout . Mas é melhor você encontrar a causa raiz do problema.

    
por 11.06.2009 / 17:53
2

O que você ganha quando você

mysql> show global variables like "wait%";

Tente reduzi-lo editando my.cnf ou com o seguinte código (como root)

mysql> SET GLOBAL wait_timeout=28801;

Há um bom artigo sobre (o excelente) MySQL Performance Blog que lida com consultas para dormir

Vale a pena conferir link

Outro pensamento releitura do comentário de Dan: O tempo de sono (0) é estranho, no entanto. Parece indicar-me que existem conexões persistentes que não estão realmente dormindo, mas fazendo algo pelo menos a cada segundo para redefinir o cronômetro. Se você sabe que o webapp não está usando conexões persistentes, talvez esteja chamando sleep () diretamente, em algum lugar em uma função de loop ou temporizador?

Adicionalmente , se você estiver usando, digamos, PHP, você pode entrar no php.ini e definir mysql.allow_persistent = Off e ver o que acontece.

PS Qual versão do MySQL você está executando? Algo similar foi reportado como um bug sério em 4.1, mas isso foi em 2005 ...

    
por 12.06.2009 / 16:30

Tags