Página 1 de 1
Como manter a conexão MySql?
Enviado: 17 Fev 2012 01:44
por JoséQuintas
Devido a pausas no sistema, ou até mesmo o usuário fazer uma grande pausa, a conexão MySql é perdida.
Como posso evitar que ela seja fechada?
Por enquanto usei uma função pra fechar/abrir caso o último acesso tenha mais de um minuto.
Mas teria que colocar em todas as partes do sistema, e mesmo assim poderia ser fechada em momento errado.
Function TestcnMySql(cnMySql)
Static cTime := ""
If Len(cTime) == 0
cTime := Time()
Endif
If Substr(cTime,1,5) != Substr(Time(),1,5)
cnMySql:Close()
cnMySql:Open()
Endif
Return NIL
Como vocês resolvem este tipo de coisa?
Obs. Antes eu usava pra abrir/fechar o tempo todo, conforme o uso, mas aí o Windows estoura o limite, porque conexões mortas tem um tempo pra desaparecer, e o limite do Windows é de apenas 10.
Estou usando ADO, através de WinOleCreateObject("ADODB.Connection")
José M. C. Quintas
Como manter a conexão MySql?
Enviado: 17 Fev 2012 15:42
por alxsts
Olá!
Pelo que conheço em termos de "Boas Práticas", o ideal é não manter conexões de banco de dados abertas desnecessariamente. Isso economiza recursos de sistema e em muitos casos é usado por não haver um número de licenças de acesso simultâneo que comporte toda a demanda por conexões.
Funciona assim: abre a conexão quando precisa usar, usa e fecha.
Como manter a conexão MySql?
Enviado: 17 Fev 2012 17:06
por JoséQuintas
Como eu disse antes, usando desse jeito acabo tendo erros.
Open(),Close().... o Windows mantém essa conexão como half-open por algum tempo antes de excluir de vez.
O limite do Windows é de somente 10 conexões em modo half-open.
Eu sempre usei desse jeito (abrindo/fechando), mas comecei a aumentar o uso do MySql, e o limite do Windows acaba rápido.
Conferi, e as conexões ficam fechadas, em estado de espera para o Windows eliminá-las.
Já usando uma única conexão, acontece o oposto, ela é fechada quando fica sem uso por muito tempo. (10 ou 15 minutos).
É até curioso.... consultando a lista do windows: (netstat -a | find "3306")
abrindo e fechando, aparecem várias conexões em modo de espera pra fechar
sempre aberta, aparece uma única conexão
No final, não sei qual consome mais recursos, mas sei que abrir/fechar deixou de ser opção viável.
Como manter a conexão MySql?
Enviado: 17 Fev 2012 17:45
por alxsts
Olá!
Como você está conectando? Tem um modelo de
connection string que permite ativar ou não o
pooling:
Código: Selecionar todos
User ID=root;Password=myPassword;Host=localhost;Port=3306;Database=myDataBase; Direct=true;Protocol=TCP;Compress=false;Pooling=true;Min Pool Size=0;Max Pool Size=100;Connection Lifetime=0;
Como manter a conexão MySql?
Enviado: 17 Fev 2012 18:05
por JoséQuintas
nunca tinha visto esses parâmetros:
Direct=true
Protocol=TCP
Pooling=true
Min Pool Size=0
Max Pool Size=100
Connection LifeTime=0
Como manter a conexão MySql?
Enviado: 17 Fev 2012 18:25
por alxsts
Olá!
Retirei do site
ConnectionString . com. É ótimo para referência. Tem vários tipos de conexão para todos os bancos de dados. Pesquise lá. Talvez encontre algo que ajude mais.
Como manter a conexão MySql?
Enviado: 17 Fev 2012 20:16
por JoséQuintas
Dei uma olhada lá.
Essa string que passou é a que está em .NET Framework Class Library.
Só testando pra ver se vale fora do NET.
Como manter a conexão MySql?
Enviado: 21 Fev 2012 03:07
por sygecom
Se a perda da conexão for falha de uma estrutura da rede ou algo assim isso pouco adiantará. Eu não sei até onde isso é certo ou não, mas eu tenho um SET TIMER que roda a cada 30 segundos que uso para verificar se algum administrador solicitou o fechamento de alguma estação e aproveito para ver se a conexão caiu ou não executando um: select version()
Como manter a conexão MySql?
Enviado: 21 Fev 2012 22:24
por pauloa1
Olá Leonardo!
tem como postar um exemplo disso?
caso a conexão cair, dar a mensagem e tentar reconectar automaticamente.
Paulo
Como manter a conexão MySql?
Enviado: 23 Fev 2012 12:55
por sygecom
Olá,
Eu alterei meu errorsys.prg e acresentei o seguinte:
Código: Selecionar todos
IF Revisa_conexao()=.F.
IF REVISA_CONEXAO()=.F.
DO WHILE .T.
IF MY_MSGYESNO("Conexão com o Servidor Inativa, deseja tentar reconectar ?")
IF ABRE_DADOS(.T.)=.T.
RETURN .T.
ELSE
LOOP
ENDIF
ELSE
EXIT
ENDIF
ENDDO
ELSE
IF ConectionOK()=.F. // VEREFICA SE ESTA ATIVA A CONEXÃO
DO WHILE .T.
IF MY_MSGYESNO("Conexão com o Servidor Inativa, deseja tentar reconectar ?")
IF Abre_dados(.T.)=.T.
RETURN .T.
ELSE
LOOP
ENDIF
ELSE
EXIT
ENDIF
ENDDO
ENDIF
ENDIF
Código: Selecionar todos
function ConectionOk
local lOK
local oCon
local cSql
local aret :={}
if eTIPO_SQL="FIREBIRD"
cSQL := "SELECT MON$USER FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID <> CURRENT_CONNECTION"
else
cSql := "select version()"
endif
oCon:= SR_GetConnection() // Obtem o objeto da conexão ativa
oCon:Exec(cSql,.F.,.t.,@aRet)
lOK:= Len(aRet) == 0
return lOk
***********************
FUNCTION REVISA_CONEXAO
***********************
Local lRet:=.T.
HW_Atualiza_Dialogo("Revisando Conexão")
IF inetestaconectada( eHOST )=.T.
HW_Atualiza_Dialogo("Conexão: OK")
ELSE
lRet:=.F.
ShowMsg("NÃO CONECTADO")
HW_Atualiza_Dialogo("Conexão: Falhou")
ENDIF
Return(lRet)