Clipper On Line • Ver Tópico - Reaproveitamento de conexão MySQL

Reaproveitamento de conexão MySQL

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

 

Reaproveitamento de conexão MySQL

Mensagempor cjp » 23 Mai 2017 18:17

Entendo, meu caro. De qualquer forma agradeço a disposição em ajudar.

Testei com um número de conexão inexistente, retornou zero, assim como com conexão existente.

Não sei mais qual teste poderia fazer. Alguma sugestão?

O maior problema é que ela às vezes não está chamando a conexão, daí fica tentando executar uma query na conexão errada (a que já estava antes), e daí dá erro.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Reaproveitamento de conexão MySQL

Mensagempor cjp » 03 Jun 2017 12:55

É normal que duas conexões retornem o mesmo número?

Tenho notado que isso tem ocorrido frequentemente. E daí complica tudo, pois como vou saber qual é qual?

Existe algum jeito de evitar isso?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Reaproveitamento de conexão MySQL

Mensagempor NiltonGM » 13 Jun 2017 13:01

Eu uso HMG 3.4.4 e não preciso desses RDD's para acessar o MySQL, acesso direto pelo HBMySQL pelas classes TMySQLServer(). Tenho uma aplicação em Harbour que acessa 4 banco de dados MySQL para estatística, as conexões são apenas um ponteiro em seu aplicativo onde vc pode armazenar em uma variável, logo vc poderá ter n conexões, o que vocês não devem esquecer é que cada banco de dados como o MySQL tem um timeout para cada conexão, isso é regra nos provedores pois imagina uma conexão esquecida de ser fechada pelo aplicativo que ficará aberta eternamente?! Então faço o seguinte procedimento, abro uma conexão qdo preciso acessar o BD, executo uma ou várias QUERY's e depois fecho. Se por ventura entre uma Query e outra passar tempo demais e ocorrer o Timeout pelo servidor MySQL, reabro uma nova conexão, como? Qdo for executar uma Query sempre verifico se aquela conexão (nResultHandle ou nSocket) ainda está aberta, se tiver executo, se não, abro nova conexão ali mesmo na função da query. Também temos que verificar após uma Query se o servidor não retornou ocupado 'server has gone away'
As classes estão no manual anexo.

Abraços e qualquer dúvida estamos por aqui.
Anexos
Biblioteca do Programador Harbour hbMySql.pdf
(239.58 KiB) Baixado 91 vezes
Nilton Medeiros
nilton@sistrom.com.br
Avatar de usuário

NiltonGM
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 393
Data de registro: 05 Jun 2014 23:47
Cidade/Estado: Caieiras/SP
Curtiu: 249 vezes
Mens.Curtidas: 24 vezes

Reaproveitamento de conexão MySQL

Mensagempor cjp » 13 Jun 2017 14:55

Era tudo que eu queria!!!

Mas não uso HMG e não sei como usar. Tem que baixar algum DLL, ou algum fonte para usar HMG?

Vi o manual, está muito claro, e parece bem simples de usar.

Só preciso mesmo saber como compilar com HMG, por favor.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Reaproveitamento de conexão MySQL

Mensagempor Mário Isa » 23 Jun 2017 10:49

venho pedir a ajuda de quem já está utilizando o banco MySQL a mais tempo que eu

portanto ...
meu provedor não me deixa conectar mais de 12 conexões ao mesmo tempo ao banco q está na internet...
e para isso eu preciso ficar
conectando e desconectando para dar lugar a outros que irão se conectar só para uma consulta.

mas .... se eu conectar uma vez no banco e desconectar
e se fizer isso pela segunda vez o programa fica meio crazy ... e fecha ....

outra coisa q percebo é q depois de feito a conexão e desconexão pela segunda vez a função q verifica a net conectada volta falso (quando na verdade tem internet disponível)

então segue o código do meu teste
vez := 2
ctavez := 1
while ctavez <= vez
cConString1 :="MySQL=IPdoMEUbanco;UID=usuarioDObanco;pwd=SENHAdoBANCO;dtb=NOMEdoBANCO;PRT=3306"
sinn := SR_AddConnection( CONNECT_MYSQL, cConString1 )
if sinn <= 0
  return nil
end

SR_ENDCONNECTION(sinn)

netconectada := verificanet()

ctavez++
end


Ou seja, se eu ajustar a variavel VEZ para 2 .... na segunda vez a variavel netconectada fica .F.

segue a função verificanet()
*******************************
Function VerificaNet( cAddress )
*******************************
LOCAL aHosts
LOCAL cName
InetInit()
IF cAddress == NIL
cAddress := "www.google.com.br"
ENDIF
aHosts := InetGetHosts( cAddress )
IF aHosts == NIL .or. len(aHosts)=0
InetCleanup()
RETURN .f.
endif
InetCleanup()
RETURN .t.


Pergunta:

Será que, na hora de finalizar a conexão com a função:
 SR_ENDCONNECTION(sinn)


Eu não estaria esquecendo de finalizar alguma outra coisa ?
:%
Avatar de usuário

Mário Isa
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 902
Data de registro: 07 Jul 2004 13:54
Cidade/Estado: Ilha Solteira-sp
Curtiu: 5 vezes
Mens.Curtidas: 8 vezes

Reaproveitamento de conexão MySQL

Mensagempor fladimir » 23 Jun 2017 13:52

Vc já tentou mudar o limite de conexões simultaneas setado no seu banco de dados remoto?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Reaproveitamento de conexão MySQL

Mensagempor Mário Isa » 23 Jun 2017 19:56

boa noite..
o limite de conexões é de apenas 12 simultâneas
prá mudar eles querem 399,00 / mês ....

e o sistema só vai conectar de quando em quando prá fazer umas verificações

então eu precisava que conectasse .... executasse querys ... e desconectasse. ....

se eu fizer com o Toledo falou:
Inácio, faz o que o JoséQuintas falou, faz a conexão apenas uma vez no início do programa (no PRG principal/inicial) e só desconecta quando for finalizar o programa. Ai quando for executar as querys, não precisa conectar novamente, apenas construa a query e execute ela.


dá certinho ... conectar no início e só desconectar quando for embora...

pelo que vejo vou ter que encerrar a aplicação e re-executá-la

tudo que tentei não deu jeito...

Tentei dar
Clear Memory + dbcloseall()
.... após a desconexão....
.... tentei ... REQUEST SR_MYSQL

aliás .... teria como fazer o contrário do REQUEST ??

REQUEST é quando eu estou requisitando .....
e se eu quiser dispensar essa chamada ? ou seja .... dar um clear nela ? dispensar a requisição e chamá-la de novo ?
tem jeito ?
Avatar de usuário

Mário Isa
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 902
Data de registro: 07 Jul 2004 13:54
Cidade/Estado: Ilha Solteira-sp
Curtiu: 5 vezes
Mens.Curtidas: 8 vezes

Reaproveitamento de conexão MySQL

Mensagempor Mário Isa » 23 Jun 2017 20:01

Ainda outra coisa:
Existe algum comando que suspenda a conexão para retomá-la logo a seguir?

pois entendo que

SR_ADDCONNECTION está adicionando mais conexões ....
apessar que entendo tb que SR_ENDCONNECTION deveria finalizar a conexão e o sistema esquecer que ela existiu ..
mas parece q isso não tá funcionando...

....
Avatar de usuário

Mário Isa
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 902
Data de registro: 07 Jul 2004 13:54
Cidade/Estado: Ilha Solteira-sp
Curtiu: 5 vezes
Mens.Curtidas: 8 vezes

Reaproveitamento de conexão MySQL

Mensagempor JoséQuintas » 23 Jun 2017 22:43

Vamos lá....

Tenho um banco MySQL na internet, não faço idéia do limite.

Uso o da internet para o webservice de CEP, utilizado pelo aplicativo.
Uso também pra atualizar tabelas nos clientes.

Tenho um banco MySQL no MEU SERVIDOR, acessado por todos os clientes.

Uso pra disparar e-mails de NFE. Fica um aplicativo rodando 24 horas.
Todos os XMLs de NFE estão nele, o aplicativo atualiza sempre.
Antigamente também era usado pelos clientes pra acessar PDF de documentos, PDF gerado pelo Unidanfe, direto pelo aplicativo.
Tenho IP dinâmico, e o servidor é acessado através do no-ip.org

E tenho o banco MySQL em CADA CLIENTE.

Depois que fiz isso, comecei a transferir os XMLs de meu servidor para cada cliente.
É usado pelo aplicativo pra muita coisa do cliente.

A intenção final é que não precise mais do meu servidor.
Por enquanto está servindo de backup dos XMLs, além de enviar e-mails.

Do lado do cliente, o aplicativo pode acessar os três servidores, depende da situação/rotina.
O servidor do cliente é acessado o tempo todo, durante todo aplicativo.
O meu servidor é acessado pra disparar e-mails apenas, pode ser várias vezes por dia.
O da internet, é via webservice, ou então eventualmente pra atualizar tabelas do aplicativo.

O servidor da internet existe há muitos anos.
O meu servidor tá asim há uns 8 ou 9 anos.
O servidor dos clientes, uns 2 anos ou 3 anos.

Uso ADO, conexão MySQL do cliente conectada o tempo todo, as demais conectar/desconectar.

O que acontece no Windows:

O limite de half-open connections é 8 (OITO), se não foi aumentado.
Isso se refere a conexões "meio-abertas", que não podem ser consideradas nem abertas nem fechadas.
Antes do Windows XP Service Pack 1 ou 2, o limite era 16 MILHÕES, depois virou 8 UNIDADES.

O Windows faz cache de conexões, pra agilizar a tarefa.
Quando você fecha a conexão, ela fica pendente por um tempo, e não é fechada instantâneo.
Se ficar abrindo e fechando conexões, haverá uma fila de espera, cada vez maior, por causa do limite de 8 conexões.
Pode chegar ao ponto de travar tudo: Windows, roteador e tudo mais.
Não é limite de conexões abertas, é limite de conexões "meio-abertas".
Conta nisso conexões em fase de fechamento e conexões em fase de abertura.

Tem os limites do Windows pra manter uma conexão aberta fora de uso, tem limites do Windows pra manter um terminal conectado fora de uso, e tem outros limites.

Também tem a internet brasileira, que pode ter uma breve caída, e trocar o endereço de IP, e caso seja conexão via internet lá se foi a conexão.

Se ficar o bicho pega, se correr o bicho come.....
Só resta manter conexão aberta, e contornar eventuais problemas, se acontecerem.

Lembrando que além das suas conexões, tem as várias conexões que Windows e aplicativos costumam fazer....
É leitor de email, navegador de internet, programas de banco podendo fiscalizar conexões, antivírus, etc.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Reaproveitamento de conexão MySQL

Mensagempor JoséQuintas » 24 Jun 2017 10:06

esqueci de mencionar:

Dá pra dar uma olhada no andamento das conexões, com o comando NETSTAT -A
Opcionalmente acrescentando um filtro, por exemplo pra conexões TCP, ou porta 3306.

netstat -a | find /i "TCP"
TCP 192.168.1.4:49377 msnbot-65-52-108-229:https ESTABLISHED
TCP 192.168.1.4:49447 msnbot-65-52-108-194:https ESTABLISHED
TCP 192.168.1.4:49481 91.190.219.39:12350 ESTABLISHED
TCP 192.168.1.4:49483 40.69.164.178:https ESTABLISHED
TCP 192.168.1.4:49493 cb-in-f109:imaps ESTABLISHED
TCP 192.168.1.4:49494 imap03-farm74:imap ESTABLISHED
TCP 192.168.1.4:49793 65.55.223.40:40026 ESTABLISHED
TCP 192.168.1.4:49941 65.55.252.167:https ESTABLISHED
TCP 192.168.1.4:50008 64.4.54.254:https TIME_WAIT
TCP 192.168.1.4:50009 64.4.54.254:https TIME_WAIT
TCP 192.168.1.4:51090 a23-4-244-23:https CLOSE_WAIT
TCP 192.168.1.4:51091 a23-38-153-121:https CLOSE_WAIT
TCP 192.168.1.4:51092 198.41.215.182:http CLOSE_WAIT
TCP 192.168.1.4:51095 a23-4-244-23:https CLOSE_WAIT
TCP 192.168.1.4:51096 a23-4-244-23:https CLOSE_WAIT
TCP 192.168.1.4:51098 a23-38-153-121:https CLOSE_WAIT
TCP 192.168.1.4:51101 a23-4-244-23:https CLOSE_WAIT
TCP [fe80::f8ca:dfc3:cb10:6b80%12]:50010 serverjpa:3306 TIME_WAIT
TCP [fe80::f8ca:dfc3:cb10:6b80%12]:50011 serverjpa:3306 ESTABLISHED
TCP [fe80::f8ca:dfc3:cb10:6b80%12]:50012 serverjpa:3306 TIME_WAIT
TCP [fe80::f8ca:dfc3:cb10:6b80%12]:50013 serverjpa:3306 ESTABLISHED


As quatro últimas são do MySQL, porta 3306.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Reaproveitamento de conexão MySQL

Mensagempor JoséQuintas » 24 Jun 2017 10:13

Durante e depois do aplicativo.
Usei um intervalo de tempo entre os comandos. Deve ter levado mais de um minuto até as conexões desaparecerem de vez.

mysql.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Reaproveitamento de conexão MySQL

Mensagempor JoséQuintas » 24 Jun 2017 10:21

Aproveitei pra olhar o comportamento em multithread.
São várias janelas usando a mesma conexão MySQL.
Só não sei porque aparecem duas conexões ao invés de uma, talvez seja o teste do ODBC que faço no início do aplicativo.
Lembrando que uso ADO, não sei se o comportamento de hbmysql é igual.

mysql2.png


E importante:
Se eu usasse abrir/fechar conexões, uma janela acabaria com o funcionamento da outra, porque fecharia a conexão.
A não ser que usasse conexões diferentes, mas nessa mesma tela eu teria 7 conexões abertas, ao invés de uma só.
Isso considerando cada módulo, porque se fosse em cada rotina.... vixe....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Reaproveitamento de conexão MySQL

Mensagempor JoséQuintas » 25 Jun 2017 00:58

meu provedor não me deixa conectar mais de 12 conexões ao mesmo tempo ao banco q está na internet...


Só atualizando a informação, agora sei o meu limite.

kinghost.png


Mas meu plano é de revenda, não faço a menor idéia se isso altera alguma coisa, ou se esse limite é total dos domínios.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Reaproveitamento de conexão MySQL

Mensagempor Mário Isa » 25 Jun 2017 12:57

quanto pagas por mês ?
Avatar de usuário

Mário Isa
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 902
Data de registro: 07 Jul 2004 13:54
Cidade/Estado: Ilha Solteira-sp
Curtiu: 5 vezes
Mens.Curtidas: 8 vezes

Reaproveitamento de conexão MySQL

Mensagempor JoséQuintas » 25 Jun 2017 16:17

Essa é a questão: Meu plano não existe mais.
Fiz o REVENDA I, agora só existe REVENDA III.
Com esse plano eu me transformei numa revenda de hospedagem.
Uma revenda que não revende.... rs

A parte legal do plano:
Eu faço tudo sozinho.
Ontem, em 50 minutos, contados a partir do pedido de registro, o domínio estava pronto.
Esse banco MySQL já foi no domínio novo.

dominio.png


Vai ter que confirmar como funciona nos planos existentes da kinghost, porque não faço idéia.
Com o plano revenda, crio domínios à vontade.
Infelizmente, isso não significa que tenho espaço à vontade, é até menos que um plano comum, de um usuário comum.
Apenas posso compartilhar o espaço entre todos os domínios "clientes".
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Anterior Próximo



Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 10 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro