MYSQL CONNECTIONS SLEEP
ABRIR A CONEXÃO
EXECUTO O QUE PRECISO
FECHO A CONEXAO--------------------------AO FECHAR ELE DEIXA A CONEXÃO EM MODO SLEEP...NO POOL DE CONEXOES..
Citação:AO FECHAR ELE DEIXA A CONEXÃO EM MODO SLEEP...NO POOL DE CONEXOES
Estranho, esta dando dispose ao fechar ?
Citação::
AO FECHAR ELE DEIXA A CONEXÃO EM MODO SLEEP...NO POOL DE CONEXOES
Estranho, esta dando dispose ao fechar ?
Sim close, dispose já tinha tentado isso a alguns anos atrás... O problema está que toda vez que abro a conexão e fecho fica 1 em modo sleep, na verdade ele deveria usar a mesma que esta e modo sleep, mais isso não acontece...
Seria algo como:
...
conn.Close();
conn,Dispose();
MySqlConnection.ClearAllPools();
...
Citação::
Não é só o MySQL que possui esse inconveniente. Outros mecanismos mantém o pool após o client solicitar o encerramento da conexão. O objeto MySqlConnection possui um método compartilhado que será útil para o seu caso. Trata-se do ClearAllPools. Após fechar a conexão e destruir a instância, chame esse método e veja se resolve, ok?
Seria algo como:...
conn.Close();
conn,Dispose();
MySqlConnection.ClearAllPools();
...
Já tinha tentado desta forma... e tambem tentei pela string de conexão.
Agrupamento de Conexões
A partir da versão 6.2, as conexões inativas são removidas do pool, liberando recursos no cliente (sockets) e no servidor (sockets e threads). Não mantenha manualmente conexões (globais) e abra fechar. Mantenha a criação e eliminação de objetos de conexão o mais apertada possÃvel, isso pode ser contra-intuitivo, mas os mecanismos de pooling vão cuidar bem do cache e seu código ficará mais limpo.
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
Pooling=True;
Este é o comportamento padrão.
MySQL
Tamanho do pool de conexão
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
MinimumPoolSize=10;maximumpoolsize=50;
Os valores padrão são 0 e 100.
MySQL
Desativar pool de conexão
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
Pooling=False;
MySQL
Estado de conexão resetado quando obtido do pool
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
ConnectionReset=True;
Faz uma viagem de ida e volta adicional para o servidor ao obter uma conexão do pool e estado de conexão será redefinido.
MySQL
Reciclar conexões no pool
Isso é útil em cenários de balanceamento de carga quando os servidores disponÃveis mudam, você não quer 100 conexões constantes no pool apontando para apenas um servidor.
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
ConnectionLifeTime=300;
Especificado em segundos, a quantidade de tempo após a criação do objeto de conexão a conexão será destruÃda. A destruição só acontecerá quando as conexões forem retornadas para o pool.
MySQL
Não atualizar as configurações do servidor nas conexões no pool
Uma conexão pode ser longa vivida no pool, no entanto, as configurações do servidor de conexões são atualizadas (SHOW VARIABLES comando) cada vez retornado para o pool. Isso torna o uso do cliente do objeto de conexão atualizado com as configurações corretas do servidor. No entanto, isso faz com que uma viagem de ida e volta e para otimizar o desempenho pooling esse comportamento pode ser desativado.
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
CacheServerProperties=True;
Esta opção está disponÃvel a partir do conector / NET versão 6.3
Pelo que sei, o Connector tem esse comportamento como padrão por questão de otimização, para reaproveitar conexões. Porque é muito custoso iniciar uma nova conexão...
Mas até onde sei, colocando um Timeout resolve o problema.
Abraços!
Citação::
Resolvido então?
Pelo que sei, o Connector tem esse comportamento como padrão por questão de otimização, para reaproveitar conexões. Porque é muito custoso iniciar uma nova conexão...
Mas até onde sei, colocando um Timeout resolve o problema.
Abraços!
DS2T Ele continua criando as conexões e não reutilizando vamos supor se eu efetuar 10 login ele cria 10 conexoes em modo sleep, toda vez que faco um con.open ele cria uma em modo sleep. Mesmo usando os comandos acima...
Pode ser algum recurso, tipo DataReader, Command que tá ficando aberto...
Abraços!
Public myCON As MySql.Data.MySqlClient.MySqlConnection
Public myCMD As MySql.Data.MySqlClient.MySqlCommand
Public myDRR As MySql.Data.MySqlClient.MySqlDataReader
[ô][ô]Strings de Conexão MySQL
Public MySQLHost As String = [Ô]MEU SERVER[Ô]
Public MySQLUsuario As String = [Ô]MEU USUARIO[Ô]
Public MySQLSenha As String = [Ô]MINHA SENHA[Ô]
Public MySQLDataBase As String = [Ô]MEU BANCO[Ô]
Public MySQLPool As Boolean = False
#Region [Ô]CONECTAR E DESCONECTAR[Ô]
Public Sub Conectar() [ô]Conecta no MySQL
Try
myCON = New MySql.Data.MySqlClient.MySqlConnection([Ô]Server=[Ô] & MySQLHost _
& [Ô];Port=[Ô] & MySQLPorta _
& [Ô];User id=[Ô] & MySQLUsuario _
& [Ô];Password=[Ô] & MySQLSenha _
& [Ô];Database=[Ô] & MySQLDataBase _
& [Ô];Pooling=[Ô] & False)
myCON.Open()
Catch ex As Exception
End Try
End Sub
Public Sub Desconectar() [ô]Desconecta do MySQL
myCON.Close()
myCON.Dispose()
myCON.ClearAllPoolsAsync()
End Sub
#End Region
Dim DadosUsuario As New DadosUsuario
Dim DadosPaciente As New DadosPaciente
Dim DadosEncaminhamento As New Encaminhamentos
Dim Atualizacao As New Atualizacao
<WebMethod()> _
Public Function EfetuarLogin(ByVal usuario As String, ByVal senha As String) As DadosUsuario
Try
Conectar()
Dim query As String
query = ([Ô]Select * From tb_login Where usuario=[ô][Ô] & usuario & [Ô][ô] and senha=[ô][Ô] & senha & [Ô][ô][Ô])
myCMD = New MySqlCommand(query, myCON)
myDRR = myCMD.ExecuteReader()
If myDRR.HasRows = True Then
While myDRR.Read()
DadosUsuario.iduser = myDRR.Item([Ô]id[Ô])
DadosUsuario.nomeuser = myDRR.Item([Ô]nome[Ô])
DadosUsuario.unidadeuser = myDRR.Item([Ô]unidade[Ô])
DadosUsuario.unidadedestinouser = myDRR.Item([Ô]unidade_destino[Ô])
DadosUsuario.encontrouuser = True
BuscaDataServidor()
End While
ElseIf myDRR.HasRows = False Then
DadosUsuario.encontrouuser = False
End If
Finally
Desconectar()
End Try
Return DadosUsuario
End Function
Public myCON As MySql.Data.MySqlClient.MySqlConnection
Public myCMD As MySql.Data.MySqlClient.MySqlCommand
Public myDRR As MySql.Data.MySqlClient.MySqlDataReader
[ô][ô]Strings de Conexão MySQL
Public MySQLHost As String = [Ô]MEU SERVER[Ô]
Public MySQLUsuario As String = [Ô]MEU USUARIO[Ô]
Public MySQLSenha As String = [Ô]MINHA SENHA[Ô]
Public MySQLDataBase As String = [Ô]MEU BANCO[Ô]
#Region [Ô]CONECTAR E DESCONECTAR[Ô]
Public Sub Conectar() [ô]Conecta no MySQL
Try
myCON = New MySql.Data.MySqlClient.MySqlConnection([Ô]Server=[Ô] & MySQLHost _
& [Ô];Port=[Ô] & MySQLPorta _
& [Ô];User id=[Ô] & MySQLUsuario _
& [Ô];Password=[Ô] & MySQLSenha _
& [Ô];Database=[Ô] & MySQLDataBase _
& [Ô];Pooling=False[Ô])
myCON.Open()
Catch ex As Exception
End Try
End Sub
Public Sub Desconectar() [ô]Desconecta do MySQL
myCON.Close()
myCON.Dispose()
myCON.ClearAllPoolsAsync()
End Sub
#End Region
Dim DadosUsuario As New DadosUsuario
Dim DadosPaciente As New DadosPaciente
Dim DadosEncaminhamento As New Encaminhamentos
Dim Atualizacao As New Atualizacao
<WebMethod()>
Public Function EfetuarLogin(ByVal usuario As String, ByVal senha As String) As DadosUsuario
Try
Conectar()
Dim query As String
query = ([Ô]Select * From tb_login Where usuario=[ô][Ô] & usuario & [Ô][ô] and senha=[ô][Ô] & senha & [Ô][ô][Ô])
myCMD = New MySqlCommand(query, myCON)
myDRR = myCMD.ExecuteReader()
If myDRR.HasRows = True Then
While myDRR.Read()
DadosUsuario.iduser = myDRR.Item([Ô]id[Ô])
DadosUsuario.nomeuser = myDRR.Item([Ô]nome[Ô])
DadosUsuario.unidadeuser = myDRR.Item([Ô]unidade[Ô])
DadosUsuario.unidadedestinouser = myDRR.Item([Ô]unidade_destino[Ô])
DadosUsuario.encontrouuser = True
BuscaDataServidor()
End While
ElseIf myDRR.HasRows = False Then
DadosUsuario.encontrouuser = False
End If
[ô][ô]fecha e libera os objetos da memória
myDRR.Close()
myDRR.Dispose()
myCMD.Dispose()
Finally
Desconectar()
End Try
Return DadosUsuario
End Function
Primeiro, modifiquei a variável booleana do Spool da string de conexão, deixei constante como string.
Segundo, fechei e liberei os recursos dos seus objetos Command e Reader...
Isso talvez ajude.
Tome cuidado também com o escopo das variáveis. Essas propriedades realmente precisavam ser públicas?
Será que o método Conectar não seria melhor tendo um escopo privado e retornando um MySqlConnection aberto pra você? Isso permitiria até você usar o tratamento Using, facilitando a leitura do bloco.
Esse Conectar público, com a propriedade Connection pública, pode ser um risco se alguém descobrir o endereço desse WebService também.
Abraços!