Estamos recebendo um erro intermitente em nosso site:
Aviso: mysql_connect() [function.mysql-connect]: O usuário '557574_prod' excedeu o recurso 'max_user_connections' (valor atual: 10)
O que impede que o site seja acessado e efetivamente está fora do ar.
(obviamente, aumentar o 'max_user_connections' resolveria isso, mas isso não é uma opção em nosso esquema de hospedagem)
Posso ter 'consertado', mas não tenho 100% de certeza de que entendi o problema e gostaria de ser claro. Achei que o problema devia ser causado por muitos trabalhos cron usando as conexões (temos alguns em execução a cada minuto) e reduzi o número de trabalhos cron e isso parecia diminuir a quantidade de erros. Eu criei uma conta de usuário separada para os trabalhos cron, portanto, se esse era o problema, ele deve ser resolvido agora.
No entanto, nosso sistema de registro não registra o erro quando ele ocorre, por isso ainda estou preocupado.
Então eu estou perguntando: o que constitui um 'user_connection' no MySQL?
- existe uma conexão separada para cada chamada de banco de dados?
- caso contrário, quando as chamadas de banco de dados exigiriam uma conexão separada?
- por que esse erro ocorreria apenas no site de produção ao vivo? talvez haja uma conexão separada para cada ip ou simialr exclusivo?
Eu sinto que estou pensando demais nisso. . .
Observe a composição do mysql.user:
Observe a coluna max_user_connections. Ele coloca uma moratória no número de conexões que um usuário pode fazer por hora. Verifique e certifique-se de que o usuário '557574_prod' não esteja se conectando ao mysql várias vezes em menos de uma hora.
Isso é usado em conjunto com a opção max_user_connections que você pode definir em /etc/my.cnf
Por favor, altere max_user_connections em /etc/my.cnf ou, se o usuário individual tiver esta coluna configurada, aquela coluna mysql.user.max_user_connections. Se você não tem controle de configuração sobre my.cnf e não pode fazer SQL contra o esquema mysql, então você implora e implora à sua empresa de hospedagem para aumentar esses limites para você.
Acredito que você pode definir max_user_connections como uma variável de sessão, mas pode precisar de certos privilégios, provavelmente SUPER.
Quanto ao estabelecimento de conexões, você precisa manter essas conexões abertas. Talvez enviando uma pulsação de algum tipo fazendo um SELECT. Mas adivinha??? As colunas db max_questions monitoram consultas SELECT por hora e max_updates monitora INSERTs, UPDATEs, DELETEs por hora. Você pode precisar verificar essas colunas em mysql.user. Você pode verificar rapidamente esses números com:
Não tenho certeza se os limites de conexão por hora do usuário são por thread ou por usuário. Você pode responder isso rapidamente conectando-se ao banco de dados agressivamente usando 2 ou 3 conexões de banco de dados ao mesmo tempo e a mensagem de erro deve se manifestar. Cabe a você como contar o número de conexões, talvez "MOSTRAR STATUS LIKE 'Conexões';" Ele deve atingir os limites máximos da conexão dentro de uma conexão ou pode ser a soma do valor do status da conexão de todas as conexões.
Verifique também os valores wait_timeout e Interactive_timeout. O padrão é 28800 em um servidor independente. Eles já podem estar definidos. Você não pode configurá-los dentro de uma conexão atual. Você deve ser capaz de configurá-los da seguinte forma: (para novas conexões chegando)
Se você não consegue executar nem mesmo esses comandos, meus pêsames!!! :(