Estudo de Caso II – pg_xlog

Tuning inicial

O primeiro tuning a ser feito no postgres é transferir o diretório pg_xlog para um disco separado. Ele contém os logs de transação, também chamados de WAL (Write Ahead Log). Em resumo, ele que garante que os dados não estão no shared buffers em caso de crash.

Caso um crash aconteça, na próxima inicialização do postgres os logs de transação, WAL, serão lidos e aplicados até o momento consistente. Cada arquivo do pg_xlog tem 16MB e as configurações estão no postgresql.conf, procure por checkpoint_segments na seção checkpoints e altere a quantidade de segmentos.

Checkpoints

Quando o número de segmentos disponível se esgota, ocorre um checkpoint, que é o ponto onde os dados em “shared buffer” serão efetivamente gravados em disco para que seja possível eliminar os segmentos atuais e criar um novo.

Caso ocorram muitos checkpoints por falta de segmento, uma dica será exibida no log do PostgreSQL caso ocorram mais de uma vez no período de tempo definido na opção “checkpoint_warning”. Aumentar o número de segmentos pode ajudar no desempenho do banco, porém deve-se tomar o cuidado de não aumentar demais, pois quando ocorrer um crash o tempo de recuperação sera muito grande devido a necessidade de aplicar todos estes segmentos.

LOG : checkpoints are occurring too frequently (28 seconds apart )
HINT : Consider increasing the configuration parameter “checkpoint_segments ” .

Para separar o “pg_xlog” em outro dispositivo, basta substituir o diretório do “pg_xlog” por um link simbólico, lembrando que o usuário “postgres”deve ser o dono deste novo local. Este procedimento deve ser feito com o PostgreSQL parado, e o conteúdo do atual pg_xlog deve ser copiado para o novo dispositivo.

Conclusão

Mudar o diretório do pg_xlog e algo muito simples, mas que deve ser feito como primeiro tuning. Lembre-se que caso seu banco seja do tipo OLAP, essa alteração não fará muito feito, mas é uma boa prática. No nosso próximo post, falaremos sobre o arquivo de configuração postgresql.conf.