Nesse post focaremos a parametrização de banco de dados. Todas as informações fornecidas aqui podem ser aprimoradas através da leitura dos manuais de banco de dados Progress.
Como estudamos anteriormente, precisamos atuar sobre disco, memória, CPU e rede. Vamos começar pela rede.
Além dos parâmetros de client, o Progress disponibiliza no servidor um buffer de pacotes para passar mais informações ao mesmo tempo para a estação cliente. Esse buffer é definido pelo parâmetro –Mm. Nos produtos Datasul esse parâmetro não terá influência no dia-a-dia. O diferencial desse parâmetro estará em processo com grande fluxo de dados sem alteração.
Para otimizar a CPU, considere a utilização do parâmetro –spin. Esse parâmetro desvia a utilização de semáforos do sistema operacional para a utilização da técnica de spin locks. Essa técnica permite ao processo entrar diretamente no processador, sem passar pela fila de semáforos. O número que segue o parâmetro é relevante. Ele determina a quantidade de tentativas de executar o processo antes que ele entre em estado de espera.
O ideal é que o processador desse conta de executar o processo na primeira tentativa de entrada, o que caracteriza –spin 1. Porém, o valor de 10000 deverá atender a maioria dos casos. O ideal é manter o tempo que o processador demanda para gerar as N tentativas de spin, inferior ao tempo de espera do processo, que geralmente é de 1 milissegundo. Então se o processador consegue executar 50000 tentativas de spin em 1 milissegundo, mantenha o parâmetro –spin com um valor inferior a 50000.
Se com todos os bancos ativos e ninguém utilizando, o processador do servidor se manter acima do estado de espera (entre 1% e 5%), provavelmente o parâmetro –spin foi superdimensionado.
Memória é otimizada por buffers. São 3 os parâmetros principais: -B (db buffers), -bibufs (bi buffers) e –aibufs (ai buffers). A regra é simples: quanto mais buffers para os bancos sem utilizar paginação, melhor. O ideal é fazer com que a segunda leitura de cada bloco do banco seja em memória. Essa relação define o indicador buffer hits.
Esse indicador aponta o percentual de requisições que foram para buffers em relação às requisições que foram para disco. Considere esse indicador estar sempre acima de 95% em bancos com utilização constante.
Em bancos com grande volume de alteração, monitore o número de checkpoints do banco. Cada checkpoint congela a utilização do banco até terminar. Isso não tem como mudar. O que podemos melhorar é o tempo que o banco ficará congelado e a quantidade de vezes.
Considere manter o número de checkpoints entre 1 e 2 por hora, para balancear a velocidade e a segurança caso seja necessário o processo de crash recovery. Para ajustar esse parâmetro, trunque o before-image com o parâmetro –bi.
Assim como comentei desde o primeiro post, não tente acertar o melhor valor para cada parâmetro no primeiro ajuste. Monitore e ajuste constantemente.