Como não se deve otimizar o desempenho de um banco de dados Progress

Escrito por Adriano Corrêa em 2 de setembro de 2009, 08:46h

Não gosto de publicar informações de como não se deve configurar o ambiente, porém diante da quantidade de acessos no artigo de piores parâmetros, me convenci da necessidade de publicar mais uma situação comum de atendermos: Como otimizar o desempenho do banco de dados?

Já publiquei uma série de artigos de como otimizar o desempenho, não apenas do banco de dados, mas do ambiente inteiro. Então partindo pelo lado prático de como DEVE ser feito, sugiro a leitura dos artigos de Desempenho X Segurança.

Na prática, o que vemos é uma série mal sucedida de adaptações das recomendações cientificamente fundamentadas. Essas adaptações simplificam a análise e as demandas de um ambiente, passando a utilizar rotinas genérias de configuração.

A primeira prática não fundamentada são os números mágicos. Verifique se já ouviu esse comentário:
"- Informe tal valor para esse parâmetro que você vai sentir a diferença. Fiz isso em outro cliente e a melhora foi fantástica".

Isso não existe. Toda configuração ou parametrização tem uma razão de ser feita, e não necessariamente a melhor configuração para um ambiente reflete a melhor configuração para outro ambiente. Confira os manuais do Progress antes de definir qualquer parametrização desconhecida. Se um consultor está configurando o seu ambiente, exija que seja explicado o motivo de cada definição nova ou alteração da configuração existente. É o seu ambiente que está em jogo.

A segunda prática é o dump-load. Confira a conversa:
"- Meu sistema está lento."
"- Humm, a quanto tempo que você não faz um dump-load."
"- O último foi ano passado."
"- É, faz muito tempo mesmo. Deve ser esse o problema."

Um dump-load é um processo crítico para o ambiente, não apenas pela parada causada ao ambiente quanto pelos riscos envolvidos no processo. Essa não é (ou não deveria ser) uma atividade de rotina. Existem apenas 3 situações que um dump-load é necessário:

1. Alteração do tamanho de bloco do banco, que por uma deficiência do banco de dados Progress ainda não é possível sem o dump-load;
2. Conversão do sistema operacional do servidor de banco de dados, sempre que alterado o identificador "Media ID" da instalação de Progress;
3. Corrupção do meta-schema do banco, ou de alguma parte que influencie a estrutura do banco.

O novo processo de conversão dos produtos Datasul foi projetado para evitar o dump-load também para migração de produto. Confira o artigo Novo proceso de conversão de produtos para detalhes.
Quanto ao desempenho, desde a versão 8 do Progress não vejo um caso onde o dump-load beneficiaria o desempenho do banco inteiro. As vezes uma ou outra tabela pode necessitar de dump-load, principalmente se ela for uma tabela significativa que não está alocada em uma Storage Area II, o que indica um erro de configuração e não um problema de desempenho.

A terceira prática é o aumento do buffer pool (-B). Confira a conversa:
"- O sistema está lento."
"- Então aumente o -B."
"- Eu já aumentei e continua lento."
"- Então aumenta mais."
"- Mas se eu aumentar mais vai estourar a memória do servidor." (veja, finalmente alguém se preocupou com o ambiente)
"- Humm, nesse caso, teremos que programar um upgrade de memória no servidor."

Infelimente existem muitos "Tunings de -B" no mercado. A área de buffer pool é uma das partes que devem ser configuradas no ambiente. Quando afirmo a palavra "configurada" significa que indicadores devem ser monitorados para determinar a área necessária para cada banco de dados. O parâmetro -B pode ser configurado errado, tanto para mais quanto para menos. É claro que podem existir casos em que não há o que fazer pois o servidor de banco de dados é ultrapassado e não consegue manter o ambiente rápido ou mesmo estável. Porém um conjunto de indicadores devem ser avaliados para determinar isso.

A quarta prática é o APW. Perceba o comentário:
"- O APW você deve definir 5, porque daí você fica com 5 processos gravando o banco de dados"

Novamente, existem indicadores que determinam se seu ambiente precisa de um ou mais APW's. Basicamente, se o banco de dados sofre muita gravação, talvez você precise de mais de um APW. Se o banco não tem volume de gravação suficiente para os APW's trabalharem, um APW significa um processo a mais executando no servidor, que consome processamento, consome memória, e constantemente faz acesso a uma parte do buffer pool (10 blocos, especificamente). São recursos do servidor consumidos indevidamente.

A última prática que não gostaria de mencionar é a utilização (indevida) de storage areas. Confira a conversa:
"- O meu sistema está lento."
"- Humm, o Progress dispõe de um novo recurso no banco de dados que permite dividir o banco de dados em áreas."
"- E o que eu ganho com isso?"
"- É que dessa forma o banco fica mais quebradinho e ele trabalha mais rápido."
"- Mas isso não usa mais memória?"
"- Usa, mas aí aumentamos um pouco o -B para compensar."
"- Legal, vamos fazer então."
"- OK, vamos agendar esse serviço e já aproveitamos para fazer um dump-load do banco."

A partir da versão 9 o Progress dispõe de um recurso que possibilita identificar os arquivos que conterão dados de cada tabela ou índice. Isso ajuda no balanceamento de carga do disco e principalmente na melhor alocação de registros por bloco de cada tabela. Porém, a não ser que cada tabela de seu banco seja maior de 64 Gbytes, não faz sentido criar uma storage area por tabela. Já montei ambientes grandes, com mais de 300 usuários simultâneos e aproximadamente 90 Gbytes de banco, usando 7 storage areas para dados e 3 para índices. Para esse ambiente, definir mais storage areas seria complicar o ambiente inutilmente, pois não haveria mais ganho de desempenho.

Essas são apenas 5 situações comuns que além de não surtirem efeito positivo no ambiente, podem complicar a sua estabilidade. A recomendação é sempre procurar informação de diversas fontes antes de alterar o ambiente, ou mesmo procurar consultores certificados em banco de dados Progress para auxiliá-lo. Backup também nunca é demais.

 

Categorias: Ambiente | Banco de dados | Desempenho | Progress

Tags: , , , ,

Comentários (23) -

em 24 de setembro de 2009, 15:14h

Olá Adriano.

Estava analisando o consumo de memoria pelo banco de dados utilizando o utilitario da Microsoft Process Explorer, e gostaria de saber se tem algum motivo especifico para que o banco de dados deixe alocado tanta memoria sem estar utilizando realmente.
Em nossa empresa estamos com a seguinte situação 12gb de memoria alocada e somente 4 sendo utilizada.
Há alguma forma de contornar isso?

Grato

Uiliam Santos

Uiliam Santos

em 25 de setembro de 2009, 08:22h

É uma característica do Progress alocar toda a memória que foi parametrizado, mesmo que não a utilize. Também por característica, os recursos alocados serão consumidos conforme a demanda da utilização.

De qualquer forma, recomendo que reduza a parametrização do buffer pool e continue monitorando os indicadores de desempenho para ajustar melhor essa configuração.

Adriano.

adriano

em 10 de novembro de 2009, 07:50h

Olá Adriano,

Sou aluno do ultimo semestre se analise e desenvolvimento de sistema, e neste semestre tenho que escrever um trabalho sobre banco de dados Progress, se não muito incomodo para vc, vc teria algum material para me ajudar, preciso escrever como funciona, quando foi lançado etc, se vc tiver alguma coisa seria possivel me enviar por email (renatolima_silva@yahoo.com.br) ou  me indicar um site.


Desde já agradeço a sua atenção

renato Lima

Renato Lima

em 10 de novembro de 2009, 08:57h

Renato, o "funcionamento" de um banco de dados, seja Progress, Oracle, SQL Server, DB2, etc, é composto de várias partes. Descrever essas partes é bastante complexo, e exije informações que nem sempre os fornecedores disponibilizam.

Porém, recomendo começar com a documentação do fornecedor, no caso do Progress pode ser encontrado em communities.progress.com/pcom/docs/DOC-16074. Duvidas que surgirem no processo pode questionar em fóruns de discussão ou fazer consultas através de ferramentas de busca como Google e Bing.

Adriano.

adriano

em 14 de dezembro de 2009, 13:46h

Gostaria de saber onde posso encontrar informações e/ou algum documento que trate sobre Storage Area tipo 2.
Obrigado,

Eduardo

CArlos Eduardo

em 15 de dezembro de 2009, 08:37h

Eduardo, o manual do Progress traz informações dispersas em todos os documentos. Pode conferir a documentação no link communities.progress.com/pcom/docs/DOC-15972 . A Progress não disponibiliza uma documentação da Storage Area, mas sim os vários comandos que a manipulam.

Acredito que seu objetivo é estudar o funcionamento, como implementa e que melhorias isso poderá trazer. Nesse caso recomendo procurar nos kbases da Progress (progress.atgnow.com/esprogress/searchResults.do) por "Storage area type II".

Adriano.

adriano

em 16 de dezembro de 2009, 15:10h

Olá Adriano.

Estive lendo vários de seus artigos, porém, ainda não conseguimos identificar o problema aqui. Nós tínhamos um link 256kbps com a Datasul e fazíamos através do CITRIX. Mas, achávamos muito lento. Temos 30 usuários online e estava lento. Interiorizamos o Datasul. Porém, o colocamos num datacenter com um link de 2 mega. Mas, enquanto lá no datacenter, numa estação de lá um balancete demore 15 segundos, aqui demora 1 minuto e 15.

Existe alguma razão para isso? Chegamos a conectar na porta do nosso roteador uma estação (isso para eliminar firewall, vlans, etc), e rodamos o mesmo balancete, mas não deu nenhuma diferença.

Estamos sem idéias.

Edwilson Silva

em 17 de dezembro de 2009, 08:28h

Edwilson, com certeza o link não fará diferença nesse problema.

Tente executar esse balancete na LAN do datacenter, mas a partir do servidor que você conecta remotamente e não de uma estação. Isso parece um gargalo no lado cliente que está executando a aplicação. Utilize os mesmos .pf para os testes.

Consulte esse artigo aqui ( ingleses.datasul.com.br/.../post.aspx ) para otimização de client, e principalmente confira a disponibilidade de memória e CPU no servidor metaframe.

Adriano.

adriano

em 17 de dezembro de 2009, 08:49h

Olá, bom dia.

Depois que migramos o progress para a versao 10.1c estamos enfrentando um problema um tanto quanto estranho, aparece a mensagem abaixo, usuarios ficam presos no banco, processamento do servidor ficou muito elevado comparado a versao 10.1a.

Mensagem:
img687.imageshack.us/img687/2848/erroprogress.jpg

Tem alguma ideia do que pode estar acontecendo?

Obrigado.

Rodrigo

em 19 de fevereiro de 2010, 08:56h

Bom dia.

Estamos passando por uma situação estranha em nosso servidor de banco de dados.
Atualmente nosso servidor conta com 32gb de memoria e 2 processadores Xeon de 4 Nucleos e nossas bases de dados encontram-se em um Storage da Dell, e estamos enfrentando muito problema com lentidão no acesso ao nosso ERP.
Já efetuamos 3 consultorias pagas e não resolveram nosso problema, fizeram diversas alterações de parametro de carga e o servidor continua apresentando lentidão.
As bases atualmente alocam quase que 100% da memoria do servidor, e a leitura dos discos de banco estão a 100% durante quase todo o tempo.

Tem ideia do que pode estar acontecendo, ou algum teste que possamos efetuar para tentar identificar o problema?

Muito grato

Uiliam Santos

em 26 de março de 2010, 19:52h

Olá amigos,
Tenho uma situação estupidamente estranha. Foi instalado um Datasul em Widows 2003 com Terminal Services. O caso é que usamos o TS para o trabalho normal dia-a-dia. O Datasul é acessado diretamente de outra máquina (fora do TS). O que acontece é que cada usuário que faz login no TS o Datasul cria 7 processos novos para cada usuário. Mesmo que o usuário faça logoff, os serviços não são desalocados. Já tentamos de tudo. 3 consultores e nada. Não sabemos mais o que fazer. Aceito sugestões, pois via TS ninguém acessa o Datasul.

Luis Fernando

em 29 de março de 2010, 08:37h

Rodrigo, não conseguimos abrir a mensagem. Mas é normal que as versões superiores do Progress consumam mais recursos que as versões anteriores.

Adriano.

adriano

em 29 de março de 2010, 08:40h

Uiliam, o tunning tem que ser feito por partes. Estando identificado que existe um gargalo em disco, esse gargalo deve ser liberado.

Geralmente quando o disco está próximo a 100%, é um problema de swapping. Essa informação vai ao encontro da informação que a memória também está próximo a 100%. Tente corrigir primeiramente essa situação.

Adriano.

adriano

em 29 de março de 2010, 08:43h

Luis

Essa situação é normal.

Isso porque o padrão do parâmetro -Mi é 1. Esse parâmetro indica o número de usuários conectados em um servidor para o Progress abrir o próximo servidor para o banco. Aumentando esse parâmetro deverá reduzir essas ocorrências.

Você pode visualizar a ocupação dos servers de banco pelo promon - R&D - 1 - 5.

Adriano.

adriano

em 13 de maio de 2010, 07:43h

Bom dia Adriano.

Estamos enfrentando muitos problemas de performance com o servidor de Banco de dados e estamos com interesse de migrar para um servidor com mais recursos.
Hoje temos cerca de 200 usuários pendurados no servidor de banco de dados, com nossas bases chegando proximo dos 150gb.
Nosso servidor atual está com 32gb de memoria, 2 processadores Intel Xeon com 4 Nucleos cada trabalhando a 2.33Ghz, e a base de dados está em um storage em Raid 5.
Com esse numero de usuários e tamanho de base de dados, estamos enfrentando diversos problemas com o servidor em alguns horarios, chegando a ficar praticamente travado o servidor, alocando os 32gb de memoria e consumindo todo o processador.
Pretendemos Migrar para um servidor com 64gb de memoria, com 2 processadores Six-Core Xeon trabalhando a 2,93ghz, também em raid 5, mantendo a base de dados no Storage.
Já efetuamos 3 consultorias remotas com a Totvs para melhorar o rendimento do servidor, mas sem sucesso.

Algum conselho?

Att.

Uiliam Santos

Uiliam

em 13 de maio de 2010, 09:37h

Uiliam

Recomendo fazer algumas verificações:

1. Verifique se o consumo de memória é de processos Progress ou se o sistema operacional está reservando essa memória para alguma coisa.
2. Verifique se o consumo de CPU é devido a processos em execução ou se é devido ao swapping causado pelo excesso de consumo de memória.

Se for identificado o uso de swapping e o uso de memória for de processos Progress, reduza os parâmetros dos bancos. É preferível que o banco trabalhe com menos buffers do que o servidor trabalhe em swapping.

Além disso, reserve uma boa janela para a migração para alterar a estrutura de áreas do banco de dados. As vezes a sua demanda de dados é tão grande que o hardware disponível não dá conta do recado. Para corrigir isso deve-se agrupar as tabelas em áreas conforme a melhor definição de registros por bloco. Isso reduzirá consideravelmente (de 30% a 40%) a demanda por I/O.

Recomendo a leitura desse artigo ingleses.datasul.com.br/.../post.aspx onde essas técnicas são discutidas.

Adriano.

adriano

em 19 de agosto de 2010, 13:14h

Adriano,
Boa tarde!

Já ouvi muitas pessoas, inclusive consultores da propria Progress sobre o valor ideal do parametro (-B).

Uns dizem que o parametro correto é quando o % do buffer hits estiver maior que 95%.
Outros acham que o valor correto é no minimo 10 % do valor real do bancos, valor que podemos pegar no analise do banco.

Voce tem algum conselho ou alguma outra formula?
Grato,
Rodrigo

Rodrigo

em 20 de agosto de 2010, 08:21h

O valor ideal é a quantidade de memória suficiente para carregar todos os registros necessários para um dia normal de trabalho.

Não existe fórmula. O correto é acompanhar o indicador de buffer hits, que deve tender a 100%, o que indica que quase todas as leituras de registro estão sendo feitas em memória. Mas essa não é a única indicação. As vezes a própria estrutura de áreas do banco está organizada de uma forma que, por mais que seja alocado memória, continua a necessidade de leitura em disco.

Adriano.

adriano

em 25 de agosto de 2010, 11:01h

Adriano,

Ok, compreendi a tua resposta! Porém, ainda tem cliente que utiliza o Progress 10.1B ou inferior o que significa que a cada alteração do parametro para melhorar o buffer hits preciso de uma parada que nem sempre é tão fácil. (exemplo: hospital 24 x 7).
Costumo sempre em clientes que passo separar os indices e dados da area schema area (6), neste caso, avalio o hardware e vejo se é interessante implementar o storage area tipo II.
Atenciosamente,
Rodrigo

Rodrigo

em 15 de fevereiro de 2011, 16:49h

Adriano,

Primeiramente parabéns pelas publicações!

Lendo seu artigo me chamou muito a atenção dos 3 principais aspectos que você levanta como necessidade para se realizar um dump/load. Notei que você não menciona como necessidade quando através de um DBANALYS verificamos que o Scatter Factor das tabelas encontram-se relativamente altos.
Informações que recebi de instrutores da Progress sugerem realização de dump/load quando os indíces estão acima de 2.0. O que você tem de experiência sobre esse aspecto? Você acha que se eu tiver um banco com média 5.0 demonstra uma criticidade que se justifica a execução de um dimp/load?
Abraço.

Ari

em 16 de fevereiro de 2011, 09:32h

Ari, muito importante essa questão.

Scatter factor não é parâmetro para fazer um dump-load. Talvez um tablemove.

Vou montar um artigo mais completo sobre isso.

Adriano.

adriano

em 5 de outubro de 2011, 09:59h

Bom dia

É o meu primeiro comentário aqui mas espero que me ajudem, estou com um sério problema com o meu servidor de banco de dados todos os usuários estão reclamando de problemas de velocidade do meu sistema analisando o servidor de banco de dados que também hospeda os programas do meu sistema gestão de planos da TOTVS, verifiquei que o acesso ao disco está muito alto verifiquei o servidor e não existe outro serviço que esteja consumindo esses recursos, sei que nesse post diz que não devemos realizar o dump/load mas como migrei o progress 9 para o 10.1b sem realizar o mesmo executei isso e nada solucionou troquei o servidor e também não resolveu meu problema gostaria de saber se existe uma forma deu analisar se o acesso ao disco esta relacionado a má parametrização dos meus bancos ou o que eu poderia fazer para resolver esse problema do acesso ao disco?

Éder Luiz Luca

em 5 de outubro de 2011, 10:10h

Disco é o principal problema de desempenho, porque é o componente mais lento.

Primeiro, verifique se o servidor não estourou a capacidade de memória, o que significaria que o sistema operacional está fazendo swapping.

Segundo, existem formas de balancear a carga de I/O em vários discos, desde que eles estejam disponíveis. A organização das tabelas em áreas conforme a melhor utilização de registros por bloco também reduz essa demanda.

Por último, existe a possibilidade que todos os problemas sejam causados por algum programa que esteja fazendo constantes table-scans. Verifique se a leitura e gravação do banco é generalizada, ou se algum usuário esteja causando isso sozinho. Utilize a VST userio para isso.

Adriano.

adriano

Comentar




biuquote
  • Comentário
  • Pré-visualização
Loading


Acesso LogMeIn

Informe o código PIN: