Kbase 70382: Limites para conexão self-service com Progress 32-bit
Autor |
  Marco Aurelio Scheidt - Tecnologia |
Acesso |
  Público |
Publicação |
  3/19/2018 |
|
O OpenEdge suporta dois tipos de client de conexão ao banco de dados: client de rede e client self-service.
Os clients de rede podem estar na mesma máquina do banco de dados ou em uma máquina remota, mas não podem conectar ao banco de dados diretamente. Estes clients conectam-se a um processo server do banco de dados, através da pilha de rede. Este server processa as requisições dos usuários e retorna os dados solicitados. Além da possibilidade de conexão remota ao banco de dados, os clients de rede também podem, respeitando algumas regras, conectar em bancos de dados de versões diferentes. Esta é a única forma possível de estabelecer conexões SQL (ODBC e JDBC) a um banco OpenEdge.
Os clients do tipo self-service conectam-se diretamente na memória compartilhada (shared memory) do banco de dados e processam suas próprias requisições de acesso a dados. Em outras palavras, eles funcionam como client e como server em um único processo. Tanto o prowin32 quando o _progress podem operar como clients self-service. Existem dois requisitos para isto:
a versão do client e do banco de dados deve ser idêntica (mesma versão, mesmo Service Pack, mesmo Hotfix);
o client deve executar no mesmo servidor do banco de dados, visto que ele deve ter acesso físico aos arquivos do banco e também à memória compartilhada.
Os casos mais comuns de clients serf-service são os servidores de aplicação (AppServer, RPW) e processamento em batch. A maior vantagem das conexões self-service é o fato de não haver nenhuma solicitação através da rede. A latência associada às requisições e tráfego de rede não existe e por conta disto o processamento normalmente é mais rápido.
A figura em anexo ilustra a diferença de conexão entre os clients self-service e os clients de rede (remote clients).
Quando utiliza-se Progress 32-bit, o espaço de endereçamento virtual é um fator limitante para o uso de clients self-service. Por conta de sua arquitetura, as aplicações 32-bit normalmente podem endereçar 2GB de memória. Esta limitação também se aplica ao banco de dados e outros processos Progress 32-bit. Vale notar que esta limitação de 2GB é para cada processo. É possível, por exemplo, ter 4 bancos de dados e cada um utilizar 2GB de memória.
Em casos onde um mesmo processo precise conectar a vários bancos de dados e a quantidade de memória somada de todos os bancos ultrapasse 2GB, a conexão self-service não será possível e ocorrerá o erro 1720:
Unable to attach shared memory sharemem.c.temp.progress.blog.teste2.0, error 0. (1720)
Para conectar a vários bancos em modo self-service, o processo client precisa mapear a memória de todos eles. Como o espaço de endereçamento do client é limitado a 2GB, este mapeamente não pode ser realizado. Uma opção neste caso é utilizar conexão de rede para alguns bancos e conexão self-service para outros, de forma que a soma total de memória de todos os bancos conectados em modo self-service seja inferior a 2GB.
Outra opção é utilizar Progress 64-bit. Em aplicações 64-bit o espaço de endereçamento virtual é muito grande e este tipo de problema não ocorre.
Autor: Marcos Kirchner
Anexos
|
remote_clients.jpeg
| | | | | | | | |