Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mateusmoraes

Excesso de conexões: ASP + MySQL

Recommended Posts

Pessoal,Esses dias tive um problema bem chato com meu bd MySQL. O servidor acusou "número excessivo de conexões simultâneas" e a partir daí não consegui mais acesso aos dados. O único jeito foi reiniciar o servidor. Aí voltou a funcionar legal (até que um dia volte o problema).O site em questão não recebe centenas de visitas simultâneas. Por isso, desconfio que o problema esteja em requisições de abertura/captura de dados do bd que não foram fechadas devidamente e, com o tempo, foram se acumulando até chegar ao número máximo. Isso pode ser a causa?Existe alguma dica para "matar" todas as requisições inativas ao banco de dados?Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso pode ser a causa?

sim pode ser seu problema

Existe alguma dica para "matar" todas as requisições inativas ao banco de dados?

a cada objeto ou conexao aberta tome cuidado para fechar na mesma paginase condicione a isso sempre

Compartilhar este post


Link para o post
Compartilhar em outros sites

sempre no começo dos codigos coloco o "option explicit" pra acha principalmente as variaveis de bd, separa-las e mata-las no final da pag pra evita isso ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dica para nunca esquecer de fechar e destruir conexões e RecordSets, assim que criar digite logo abaixo a linha para destruir e vá acrescentando o que vai usar entre essas linhas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma forma q já vi funcionar uma solução para isso foi uma conexão usando o global.asa q abria e fechava qdo terminava a sessão... mas tinha um esquema meio diferente... uma única conexão servia para 30 pessoas conectadas ativas... ou seja, qdo entrava a 31 pessoa no site, ele criava uma nova conexão automatico... 60 pessoas online, 2 conexões ativas...mas o servidor mata depois de um certo tempo de inatividade tb e liberar as conexões simultaneas... poderia investigar isso e diminiuir esse tempo, caso o servidor não seja compartilhado... mas nada melhor q você corrigir sua aplicação colocando um simples include no final q fecha a conexão e elimina o obj da memória... por exemplo.;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

com certeza não vai dar problema... so naum esqueça de qdo você der um response.redirect e antes dele não fechar a conexão, teoricamente a conexão permanece ativa... pq o include está no final da página e o asp lê de cima para baixo... e qdo roda o redirect ele não processa qq coisa q esteja abaixo delemas ai entra akela papagaiada q dizem os "especialistas".. o IIS 5.1 e 6, toda a vez q a página é finalizada seu processamento no servidor ela finaliza todas as variaveis abertas q não estejam no global.asa... ou seja, ela mesmo limpa a variavel de conexão... um dia q tiver tempo vou testar isso... ehehhehe;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pelas respostas!

 

Observei que algumas dicas são exatamente o que eu faço. Por exemplo, tenho um include com a seguinte função:

 

Function Conectar()  Set objconn = Server.CreateObject("ADODB.Connection")  objconn.ConnectionTimeout = Application("Cnn_ConnectionTimeout")  objconn.CommandTimeout = Application("Cnn_CommandTimeout")  objconn.Open "driver=MySQL ODBC 3.51 Driver;DATABASE=<nome do banco de dados>;SERVER=localhost;UID=<nome de usuário>;PASSWORD=<senha>"	End FunctionFunction Desconectar()  if ucase(TypeName(objconn)) = "CONNECTION" then	objconn.Close	Set objconn = Nothing  end ifEnd Function

Sempre uso a função 'Desconectar()' no final das solicitações de abertura. No entanto, o que ocorre é que às vezes esqueço de fechar instruções do tipo:

 

Set variavel = objconn.Execute("SELECT * from clientes")

Minha dúvida agora é: se eu deixar instruções sem fechar, como no exemplo do "Select" acima, mas usar o 'Desconectar()', consigo matar todas as conexões com o banco de dados e também as requisições pendentes ou só consigo isso se usar o Global.asa?

Compartilhar este post


Link para o post
Compartilhar em outros sites
mas ai entra akela papagaiada q dizem os "especialistas".. o IIS 5.1 e 6, toda a vez q a página é finalizada seu processamento no servidor ela finaliza todas as variaveis abertas q não estejam no global.asa... ou seja, ela mesmo limpa a variavel de conexão... um dia q tiver tempo vou testar isso... ehehhehe

 

Pois é, mas a conexão no ODBC continua aberta por uns 20 minutos. As boas práticas recomendam sempre fechar as coneões o mais rápido possível. Deixá-las abertas pode trazer problemas sim. Veja o que diz a documentação do NET Framework

 

Closing the Connection

It is recommended that you always close the Connection when you are finished using it, in order for the connection to be returned to the pool. This can be done using either the Close or Dispose methods of the Connection object. Connections that are not explicitly closed might not be added or returned to the pool. For example, a connection that has gone out of scope but that has not been explicitly closed will only be returned to the connection pool if the maximum pool size has been reached and the connection is still valid.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.