Translate

Pesquisar este blog

quarta-feira, 24 de setembro de 2014

Configurando o PostgreSQL


O banco PostgreSQL é um banco objeto-relacional, conhecido por sua estabilidade e larga lista de funcionalidades, das quais incluo:

  • Suporte a transações (dãã).
  • Triggers (dãã) .
  • Backups quentes, incrementais (PITR), robustos e em saída SQL opcional.
  • Stored Procedures: em linguagem PL/Pgsql, ou em um vasto número de linguagens plugins.
  • Suporte a XML e JSON!
  • Plugin de geoprocessamento disponível (PostGis).
  • Pode importar e exportar CSV. 
  • Replicação.
  • Commit assíncrono (asynchronous commit).
  • Foreign Data Wrappers (FDW).
  • Full Text Search (FTS) com dois algoritmos de índice diferentes (GIN e GiST).

As versões mais novas melhoraram muito no quesito performance e escalabilidade, e também a popularidade desse banco aumentou nos últimos anos.

A configuração do PostgreSQL pode melhorar em muito sua performance, e chega a assustar quem acredita na sua fama de ser um banco pesado.

Os parâmetros de memória ficam no arquivo postgresql.conf, há alguns que destaco:

  • shared_buffers = Memória compartilhada do banco. Existe apenas um buffer desse em todo o sistema (ele é compartilhado). Em média 25% de toda a RAM do computador. No Linux, em versões antes do 9.3,  você terá também que setar um parâmetro de memória com sysctl -w kernel.shmmax=XXXXXXXXXX.
  • checkpoint_segments = Número de arquivos de segmentos de checkpoint. Quando há escrita intensa, o banco dá um "travadinha" e o arquivo de log do servidor dá uma mensagem para aumentar esse parâmetro. Nesse caso aumente o valor desse parâmetro de 3 para algo como X = shared_buffers/16MB.
  • maitenance_work_mem = Memória usada para operações de DDL, como ALTER TABLE, CREATE INDEX. É usada essa quantia apenas durante essas operações.
  • work_mem = Memória usada para operações de ORDER BY, etc. Cada conexão usa um buffer desses.
  • temp_buffers = Memória usada para tabelas temporárias, etc.Cada conexão usa um buffer desses;

Configurando o Firebird

Este blog de agora em diante se chama Linuxmissãocrítica, porque abrange  Linux. Não apenas Slackware como antes (Missão Slackware).

Em outro post, nós vimos passo a passo como compilar e instalar o Firebird no Slackware Linux.

Compilá-lo é um modo de dar melhor performance, por setar as flags do processador, ele irá funcionar somente para aquela CPU,e usará todas as instruções disponíveis nela para melhor performance, ao invés de apenas instruções genéricas 386 ou x86_64.


Abra o arquivo firebird.conf do servidor:

O Parâmetro de memória DefaultDbCachePages. Ele indica o quanto de páginas de memória são alocadas por database (SuperServer) ou por conexão (Classic/SuperClassic).
Ele é de 2048 por default (75 no SC/C), multiplicando por 8192 bytes (o tamanho de uma página do FDB) dá 16 megabytes, muito pouco.

O Parâmetro TempBlockSize indica a memória temporária para order by e datasets, etc. Se você usa bastante pode aumentar.

O parâmetro TempCacheLimit indica o quanto de memória temporária pode ser deixada em memória.

O detalhe safado é o CpuAffinityMask. Ele indica quantas CPUs serão utilizadas no SuperServer do Windows. Mas deve ser informado em máscara de bits. Safado porque se não for setado o Firebird suará apenas a primeira CPU:
1 = Primeira CPU
3 = Duas primarias CPUs
15 = Quatro pimeiras CPUs

Estes últimos dias eu tinha feito testes severos com o Firebird no JMeter, além de ler muitas matérias na web, e cheguei à conclusão destes parâmetros, que modificadas corretamente podem melhorar grandemente a performance.
Existem muitas outros parâmetros que não consegui um ajuste fino, mas deve existir como ajustar.