domingo, 10 de junho de 2012

Melhorando o desempenho da base local do Siebel

Então está lá você, trabalhando com sua base local do Siebel do Tools e assim que começa a compilar um SRF logo fica pensando em algo melhor para fazer do que escutar o disco rígido trabalhando como uma pipoqueira enquanto a compilação não acaba...

A base local do Siebel é um DBF do Anywhere, um banco de dados móvel da Sybase. Consiste de um único arquivo salvo no diretório de instalação das ferramentas do Siebel.

Conforme linhas são inseridas, removidas ou atualizadas no banco, a tendência é ter fragmentação no arquivo, e depois de algum tempo isso pode começar a se tornar um inconveniente pois quanto mais fragmentada a base pior o desempenho para leitura e escrita na mesma. Levando em consideração que uma base local pode facilmente passar os 700Mb recomendados pela Oracle para tamanho máximo, não é difícil ter sua base local fragmentada.

A fragmentação do disco é bem conhecida em sistemas operacionais da Microsoft (que já dispõe de ferramentas de longa data para resolver este problema) mas e quando a fragmentação está apenas em um arquivo?

O programa Contig, desenvolvido pelos criadores do antigo website Sysinternals, foi criado justamente para resolver este tipo de problema: utilizando as mesmas APIs padrão de desfragmentação de arquivos do Windows, esse programinha consegue colocar todos os setores de alocação de um arquivo em sequência, o que é especialmente útil no caso da base local do Siebel. Veja um exemplo de desfragmentação abaixo:


Eu adoraria ter um benchmark para desmonstrar qual a diferença de trabalhar em uma base local fragmentada ou não, mas não tive tempo hábil de conduzir um teste desses. A realidade é que se a base local estiver realmente fragmentada, você irá sentir a diferença quando tentar repetir uma operação depois da desfragmentação.

Claro, esse truque só irá funcionar se a partição aonde a base local reside está desfragmentada: se não houver espaço contínuo também para alocar o arquivo, o Contig de nada ajudará.

Pensando nisso, é útil criar uma partição separada no disco, exclusivamente para uso da base local. Com discos rígidos a preços bastante convidativos, separar um 1Gb para uma base local deve ser suficiente para a maioria dos casos. Como a partição terá somente um arquivo, a fragmentação ali será bem menor.

Discos mais rápidos obviamente irão ajudar: se você puder dispor de um disco SSD, melhor ainda.

Algum tempo atrás eu tentei encontrar uma solução para utilização de ramdisk, mas além do risco com relação à perda de dados, não encontrei nenhuma ferramenta gratuita para Windows que conseguisse criar um ramdisk de tamanho razoável para armazenar a base local.

E, se tiver você estiver com disposição, ainda de quebra a Sybase tem um white paper em http://www.sybase.com/detail?id=1023801 com mais informações sobre como melhorar o desempenho do banco de dados Anywhere, mas eu mesmo não testei as ferramentas considerando que o que é disponibilizado junto com os instaladores do Siebel é o absolutamente mínimo para trabalhar. Especialmente falando na dica 10 ("Tip 10: Ready, steady, rebuild"), na falta da ferramenta citada sempre é possível fazer um novo database extract e obter uma base local novinha.

Nenhum comentário:

Postar um comentário