none
Problema de conexão com Mysql, ele mantem mantém o pool aberto e cresce a lista RRS feed

  • Pergunta

  • Pois é, como diz o titulo, o que acontece é o seguinte, tenho um webservice que ficar recebendo get de pesquisa dos clientes e retorna um Json. Tudo funciona perfeitamente até que, em algum momento indefinido o dia, os pools param de fechar, a lista de conexões no mysql crescem e ai começa a dar timeout. 

    Toda estrutura fica dentro do using

                using (var connection = ConnectionFactory.createConnection())
                {
                    connection.Open();
    String MySql = "SELECT * FROM acessos WHERE...";
    
                    using (MySqlCommand command = new MySqlCommand(MySql, connection))
                    {
                        try
                        {
                            using (MySqlDataReader dr = command.ExecuteReader())
                            {
                                while (dr.Read())
                                {
                                leio os dados
                                return dados;
                                }
                            }
    
                            return null;
                        }
                        catch (Exception ex)
                        {
                            Email oEmail = new Email();
                            oEmail.enviaEmailSuporte("Foi identificado um erro no comando (" + MySql + ") no arquivo (" + pagina + "). Erro: (" + ex.Message + ").<br><br>");
                            return null;
                        }
                        finally
                        {
                            connection.Close();
                            connection.Dispose();
                            command.Dispose();
                            MySqlConnection.ClearPool(connection);
                        }
                    }
                }

    Com ou se .Close() e .Dispose() o problema persiste.

    No web.config a linha de conexão está assim:

    <add name="strConn" connectionString="Server=server; user id=user; password=senha; database=bancodedados; Pooling=true; Min Pool Size=2; Max Pool Size=100; Connection Lifetime=600;Asynchronous Processing=true" providerName="MySQL.Data.MySQLClient" />

    Olha como fico o mysql:

    Já troquei também a versão do connector, usei 6.8 e 6.7. Não fez diferença.

    Não sei mais o que fazer. Alguém tem uma idéia do que pode ser?

    sexta-feira, 3 de agosto de 2018 19:46

Respostas

Todas as Respostas

  • olá,

    deixa dar  opinião aqui rsrs

    talvez seja por causa o numero de clientes passa dos 100, os pool ficam ocupados, e novas conexão são impedidas de serem feitas. Timeout está dando no mysql ou webservice?

    domingo, 5 de agosto de 2018 13:53
    Moderador
  • Então, ele normalmente usa uns 10 pool abertos o dia todo, mas em algum momento o pool cresce interruptamente, não para mais de crescer, já vi chegar a 3000 pool aberto e nem temos isso tudo de máquina conectada ao banco. Ou seja, em algum momento "alguém" para de fechar o pool, fica aberto e começa a crescer até travar a máquina.

    segunda-feira, 6 de agosto de 2018 13:17
  • Boa tarde, wcsantos. Tudo bem?

    Obrigado por usar o fórum MSDN.

    Conseguiu algum avanço no teu caso? Se ainda não o que falta?

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 23 de agosto de 2018 20:26
    Moderador
  • Não descobri o que causava o problema no MySql.

    O que fiz para resolver foi, ao invés de fazer vários acessos ao banco de dados com filtros WHERE específicos, fazer apenas um acesso com um retorno de dados grande e tratar isso via código no programa.

    Sendo assim, reduzi o numero de acessos ao banco. Mas não descobri porque as conexões abriam e não fechavam...

    quinta-feira, 23 de agosto de 2018 20:32
  • Nao use datareader...use datatable.

    (MySqlDataReader

    A flower cannot blossom without sunshine, and man cannot live without love.

    segunda-feira, 10 de setembro de 2018 21:09
    Moderador