Clipper On Line • Ver Tópico - ADO - conexão única ou várias
Página 1 de 1

ADO - conexão única ou várias

MensagemEnviado: 01 Fev 2015 15:18
por JoséQuintas
Estou com essa dúvida no momento.
É que infelizmente no Windows, nem tudo que parece certo é realmente certo.
Uso conexão MySql, e há a opção de usar uma única conexão ou várias conexões.

Uma única conexão
A vantagem é justamente ser uma única conexão.
A desvantagem é existir limite de tempo pra conexão parada, ou até programas afetarem isso.

Várias conexões
A vantagem é que cada consulta se torna independente.
As desvantagens são o tempo de conexão, e justamente criar várias conexões.
O Windows tem o limite de "half open connections", que são as conexões pendentes, que não são consideradas abertas ou fechadas.

Então a dúvida é sobre qual das duas seria a melhor opção, e no caso da primeira, se seria melhor deixar um programa zumbi mantendo a conexão ativa.

ADO - conexão única ou várias

MensagemEnviado: 01 Fev 2015 15:27
por sygecom
José,
Acho que isso não é do Windows, e sim do Mysql, que deve ter um parâmetro para matar conexões ociosas, no PostgreSQL tem um recurso de pool de conexão, o Mysql deve ter algo igual, que reaproveita conexões perdidas ou ociosas.

ADO - conexão única ou várias

MensagemEnviado: 01 Fev 2015 17:01
por JoséQuintas
Tinha esquecido isso.... tem essa também.
Tem o tempo de conexão do lado do cliente, e do lado do servidor.
Além da conexão MySql em si (servidor MySql e cliente MySql), tem o tempo do Windows.

ADO - conexão única ou várias

MensagemEnviado: 01 Fev 2015 19:28
por JoséQuintas
Complementando:

No servidor MySql dá pra configurar o tempo de conexão ociosa.
No Windows (servidor ou cliente) dá pra configurar o tempo de conexão ociosa.
No cliente MySql dá pra configurar o tempo de conexão ociosa.
Então são 4 situações que podem fechar a conexão ociosa.

Tem também o tempo que o servidor considera um terminal ocioso, e desconecta-o da rede Windows, não sei se afeta a conexão MySql.

Infelizmente o Windows é cheio de possibilidades.

Tem até programa de banco que pode fechar a conexão.

Estou começando a transformar de várias conexões em uma só.
Vamos ver o que acontece.

Por enquanto percebi que com várias conexões meu roteador chegou a congelar.
Só queria tentar confirmar, pra não descobrir algo ruim só depois de tudo modificado e instalado nos clientes.

ADO - conexão única ou várias

MensagemEnviado: 16 Fev 2015 14:01
por JoséQuintas
Além do limite de tempo, se usar provedor também existe o limite de conexões.
Eles costumam colocar um limite pequeno quando se trata de conexão externa, acesso fora do site.

É triste esbarrar com limitações desse tipo.
Torna o projeto que era certo em um projeto duvidoso.

ADO - conexão única ou várias

MensagemEnviado: 17 Fev 2015 12:18
por JoséQuintas
Aconteceu aqui hoje:
Lost connection to MySQL server during query

Por enquanto só imagino criar uma thread usando a conexão a cada intervalo de tempo, já que o parâmetro conexão:State não detecta que a conexão se foi.

ADO - conexão única ou várias

MensagemEnviado: 03 Set 2015 19:41
por cjp
Caro Quintas e demais colegas,

Pesquisando no fórum, observei este post, que coincide com um problema que tenho usualmente: o provedor limita as conexões, e eu frequentemente esbarro com estouro do limite de conexões.

Gostaria de saber como seria essa questão de usar apenas uma conexão. Atualmente, no meu programa, eu uso uma conexão para cada consulta, mas o tempo da conexão é razoavelmente longo, seria bom manter uma conexão só. Como fazer isso?

ADO - conexão única ou várias

MensagemEnviado: 02 Nov 2015 12:32
por JoséQuintas
Tava repassando algumas mensagens, e vi que a sua ficou sem resposta.

Estou usando assim:

STATIC AppcnMySqlLocal


E passo a usar essa mesma conexão em todo aplicativo.

ADO - conexão única ou várias

MensagemEnviado: 02 Nov 2015 15:51
por cjp
Já fiz alguns testes neste sentido, meu caro. Fica sem dúvida mais rápido. Mas estou enfrentando um problema: se a conexão fica algum tempo sem ser usada, ela desconecta. Isso é normal? Como resolver isso?

ADO - conexão única ou várias

MensagemEnviado: 02 Nov 2015 17:03
por JoséQuintas
Sim.
No default de um servidor Windows, com ou sem banco de dados, os terminais são desconectados se ficarem ociosos.
No default das conexões idem.
No default do servidor MySQL idem.
Só aí, já são 3 pontos de interferência.

Não costumo ter esse tipo de erro (receberia email de erro, caso acontecesse).

Criei minha rotina para o Execute() do MySQL.
Como precaução, testo se a conexão está aberta, e reabro se precisar.

   IF cnMySql:State() != 1
      cnMySql:Open()
   ENDIF
   cnMySql:Execute()

ADO - conexão única ou várias

MensagemEnviado: 02 Nov 2015 18:14
por cjp
Interessante. Eu uso RDDINFO. Vc sabe dizer se tem como testar assim na RDDINFO?

ADO - conexão única ou várias

MensagemEnviado: 02 Nov 2015 19:09
por JoséQuintas
Nesse caso vai ter que ver com quem usa essa biblioteca.
É provável que dê pra alterar nos fontes, mas vai ter que ver com o autor.

Uma opção, quebra-galho, seria disparar uma consulta qualquer a cada intervalo de tempo, só pra manter a conexão ocupada.

ADO - conexão única ou várias

MensagemEnviado: 03 Nov 2015 00:21
por cjp
Entendido, muito obrigado.