Projeto de Migração do PostgreSQL 8.1 pra 8.2.5 – FASE 2 : Preparando o Ambiente PostgreSQL

Permissões

Bem como dito la no começo o ponto de montagem para o banco é o /postgres, esse ponto deve ter o dono e o grupo postgres para que tudo funcione perfeitamente, sendo assim, antes de tudo crie o usuário postgres !!!!
Assim que o server foi instalado fizemos as alterações acima.

A Compilação

A versão para que vamos migrar é a 8.2.5, baixamos a versão, descompactamos e compilamos no diretório /home/postgres/postgresql-8.2.5 como mostrado a seguir:

$ tar -xvzf postgresql-8.2.5.tar.gz
$ cd postgresql-8.2.5
$ cd src/include
$ vi pg_config_manual.h

#define BLCKSZ 8192

Nesse parâmetro definimos o tamanho de cada bloco, que nesse caso será compilado com blocos de 8KB.

Porque a compilação no home do postgres?????

A compilação no home do postgres nos da a possibilidade de ter mais de uma versão do postgreSQL na mesma máquina, ou seja, posso ter no servidor de produção por exemplo a versão 8.1 (Operacional no momento) e a versão 8.2.5. Com isso posso caso alguma catástrofe aconteça (Esperamos que não!!!) , é possível voltar tudo para a versão anterior. Veja a seguir os passos para a compilação:

$ cd ../../
$ ./configure –prefix=/home/postgres/postgresql-8.2.5 –with-python –with-perl
$ make
$ make install

Path do usuário

É importante alterar o path do usuário postgres, pois como compilamos no home, precisamos indicar onde buscar os binários.

$ vi /home/postgres/.bashrc
PG=$HOME/postgresql-8.2.5/bin

PATH=$PATH:/$PG

PAGER=/usr/bin/less

export $PATH $PG $PAGER

LESS=”-S-N”

$ vi /home/postgres/.bash_profile
PATH=$PATH:$HOME/postgresql-8.2.5/bin:$HOME/bin
PAGER=less

export $PATH $LESS

unset USERNAME

Criando o Cluster

Para isso criamos a seguinte estrutura de arquivos: /postgres/pg825/dados
onde criaremos o cluster através do comando initdb e com o parâmetro latin1 para indicar o idioma a ser usado:

$ cd /home/postgres/postgresql-8.2.5/bin/
$ initdb -D /postgres/pg825/dados/ –encoding=latin1

Ajustando Parâmetros do PostgreSQL

Para configurar os parâmetros antes de subir o banco vamos alterar o arquivo postgresql.conf que esta no /postgres/pg825/dados/ :

$ cd /postgres/pg825/dados/
$ vi postgresql.conf

Parâmetro que define quais endereços clientes poderão fazer conexão no banco. Nesse caso todo e qualquer host é permitido, essa restrição faremos em outro arquivo.

listen_addresses = ‘*’

Parâmetro que define qual porta o serviço irá responder

port = 5432

Número máximo de conexões simultâneas permitidas. Essa é uma informação importante, que deve ser levada em consideração.

max_connections = 25

Memória compartilhada, é indicado no caso de servidores dedicado que seja disponibilizado para o postgresql 1/3 da memória disponível. Como temos 1GB de memória vamos então colocar 300MB.
shared_buffers = 300MB

Parâmetro que define a área de ordenação, área essa usada pelo ORDER BY por exemplo. É a área da memoria disponível no disco usada para ordenação das transações.
É importante saber que se essa área não for o suficiente, vai pra disco fazendo que com tudo fique mais lento. A área de ordenação é definida por usuário, e a quantidade total de conexões permitidas * a área de ordenação não pode ser maior do que a memória disponível ( No nosso caso os 600MB restantes). Lembrando que a ordenação não usa a memória compartilhada e sim a memória disponível.
Nesse caso o valor esta maior do que o normal, pois 25 conexões * 100MB cada uma seria equivalente a 2,5GB (Contamos com que os 25 usuários não façam ordenações simultâneas). Como é apenas ambiente de testes para as aplicações o número de conexões é bem reduzido, logo, não teremos problemas nesse ambiente quanto a área de ordenação.

work_mem = 100MB

Parâmetro que define a ordem da procura no schemas quando um objeto é referenciado apenas pelo nome, sem o schema.
Com esse parametro setado sem a variável $user, todo e qualquer objeto, seja ele tabela, view … etc , que não for apontado o schema será retornado um erro de objeto inexistente.

search_path = ‘public’

Alterando Parâmetros do Kernel

Os parâmetros variam de acordo com o Hardware. O ideal é que a memória compartilhada (Shared_buffers) do servidor seja equivalente a 1/3 da memória total e o shmmax seja equivalente a shared+S.O, ou seja, o parâmetro SHMMAX deve ser o valor da shared_buffers + uma folga para o Sistema Operacional. No nosso caso:

$cat /proc/sys/kernel/shmmax
841572800

Levantando o banco

Depois dos parâmetros configurados vamos levantar o banco:

$ /home/postgres/postgresql-8.2.5/bin/pg_ctl -D . start

Para sabermos se tudo correu bem primeiro vamos ver se o serviço esta de pé:

$ ps -aux | grep postgres
postgres 14666 0.3 0.2 29524 2364 pts/0 S 16:29 0:00 /home/postgres/postgresql-8.2.5/bin/postgres -D .

E então fazer uma conexão no banco

$ psql
Welcome to psql 8.2.5, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

postgres=#

Importação do Banco de Produção

Bom .. agora só falta os dados … para isso vamos fazer um dumpall da produção e redirecionar para nosso servidor de testes.
Usamos dumpall porque dessa forma ele leva tudo mesmo … inclusive usuários e grupos.
No servidor de produção:

$ pg_dumpall -p 5432 -i | psql -h host -p 5432 -d banco

Ambiente Disponível e Era isso !!!
Até a fase 3

Kenia Milene

2 thoughts on “Projeto de Migração do PostgreSQL 8.1 pra 8.2.5 – FASE 2 : Preparando o Ambiente PostgreSQL

  1. Algumas observações:

    1) Pessoalmente eu prefiro seguir um pouco mais a LSB ao subir o PostgreSQL. Dados em /var, binários em /usr e arquivos de configuração em /etc. O /home num servidor dedicado é realmente pouco utilizado, principalmente para guardar os executáveis do PostgreSQL.

    2) Execute o “make install” sempre como root.

    3) O Debian instala multiplas versões do PostgreSQL em portas diferentes nativamente. É claro que compilando o PostgreSQL outras opções surgem que em ambientes de produção devem ser aproveitadas.

    4) Seria interessante também colocar o script de inicio e parada automática do servidor em /etc/init.d

    Acho que é isso,
    Fora estes detalhes o artigo está bem bacana, parabéns!

  2. Existem muitas formas de melhorar o desempenho do PostgreSQL, mexer no tamanho do bloco para ele não vejo uma forma eficiente se podemos formatar as partições com o tamanho de bloco igual ao do PostgreSQL (4k), mesmo porque em alguns testes publicados pela internet o uso de 16k no sistema de arquivos mostra-se mais eficiente do que o aumento o bloco no código do PostgreSQL…

    Consegui escrever antes de acabar a bateria. =)

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s