Como manter a conexão MySql?
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Como manter a conexão MySql?
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 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Como manter a conexão MySql?
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.
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.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Como manter a conexão MySql?
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.
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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Como manter a conexão MySql?
Olá!
Como você está conectando? Tem um modelo de connection string que permite ativar ou não o pooling:
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;[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Como manter a conexão MySql?
nunca tinha visto esses parâmetros:
Direct=true
Protocol=TCP
Pooling=true
Min Pool Size=0
Max Pool Size=100
Connection LifeTime=0
Direct=true
Protocol=TCP
Pooling=true
Min Pool Size=0
Max Pool Size=100
Connection LifeTime=0
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Como manter a conexão MySql?
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.
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.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Como manter a conexão MySql?
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.
Essa string que passou é a que está em .NET Framework Class Library.
Só testando pra ver se vale fora do NET.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Como manter a conexão MySql?
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()
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
pauloa1
- Usuário Nível 3

- Mensagens: 227
- Registrado em: 25 Jun 2008 14:57
- Localização: Augusto Pestana-RS
Como manter a conexão MySql?
Olá Leonardo!
tem como postar um exemplo disso?
caso a conexão cair, dar a mensagem e tentar reconectar automaticamente.
Paulo
tem como postar um exemplo disso?
caso a conexão cair, dar a mensagem e tentar reconectar automaticamente.
Paulo
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Como manter a conexão MySql?
Olá,
Eu alterei meu errorsys.prg e acresentei o seguinte:
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)
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql