Clipper On Line • Ver Tópico - ADO - conexão única ou várias
Mudar para estilo Clássico
Discussão sobre SQL
Postar uma resposta

ADO - conexão única ou várias

01 Fev 2015 15:18

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

01 Fev 2015 15:27

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

01 Fev 2015 17:01

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

01 Fev 2015 19:28

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

16 Fev 2015 14:01

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

17 Fev 2015 12:18

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

03 Set 2015 19:41

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

02 Nov 2015 12:32

Tava repassando algumas mensagens, e vi que a sua ficou sem resposta.

Estou usando assim:

Código:
STATIC AppcnMySqlLocal


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

ADO - conexão única ou várias

02 Nov 2015 15:51

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

02 Nov 2015 17:03

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.

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

ADO - conexão única ou várias

02 Nov 2015 18:14

Interessante. Eu uso RDDINFO. Vc sabe dizer se tem como testar assim na RDDINFO?

ADO - conexão única ou várias

02 Nov 2015 19:09

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

03 Nov 2015 00:21

Entendido, muito obrigado.
Postar uma resposta