Grails / Hibernate banco de dados cai sob carga: Não é possível conectar (mesmo quando o agrupamento)
-
05-09-2019 - |
Pergunta
Tenho uma aplicação em Grails. Eu uso Hibernate para acessar o banco de dados (por regras Grails padrão) Eu uso MySql e as obras do site e é estável (por 6 meses).
Estou fazendo testes de carga, e recentemente descobriu que as conexões rejeita banco de dados quando sob carga.
Usando o MySQL 5, eu posso ver tópicos relacionados oscilando em torno de 20. Pensei que salta entre 11 - 30.
mysql> show status like '%con%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Aborted_connects | 72 |
| Connections | 65539 |
| Max_used_connections | 101 |
| Ssl_client_connects | 0 |
| Ssl_connect_renegotiates | 0 |
| Ssl_finished_connects | 0 |
| Threads_connected | 1 |
+--------------------------+-------+
7 rows in set (0.00 sec)
A minha configuração de banco de dados é padrão. (O servidor MySQL está instalado localmente, não mostrado)
dataSource {
pooled = false
driverClassName = "com.mysql.jdbc.Driver"
username = "username"
password = "secret"
maxIdle = 15
maxActive = 100
}
Eu deveria investigar C3P0? Ou devo Ratched minha maxActive para 1000 e esperar o melhor?
Solução
O erro é Grails relatórios quando não pode obter uma conexão com o banco? Tempo esgotado? Recusou?
Quando você executar o teste, como carregado é a caixa? CPU por cento, uso de memória, etc.
É possível que o banco de dados é tão sobrecarregado que Grails é o tempo limite recebendo ligações. Se você deseja manipular carga, você vai querer ir para conexões de banco de dados agrupados. Sem pooling, Grails irá abrir e fechar uma conexão DB com cada solicitação.
Outras dicas
Verifique a configuração do mysql (/etc/mysql.conf ou equivalente local), particularmente as conexões max e conn máximo por configurações de usuário; Isso soa como se ele pode ser provenientes de mysql e não Grails.