Recentemente (dia 24/06/2010) em seu blog, replicado no planet-postgresql, o Sr. Robert Haas postou o artigo denominado "PostgreSQL as an In-Memory Only Database".
Baseado em seu relato e no abordado na lista pgsql-performance montei este pequeno tutorial para exemplificar na prática o que foi discutido, ou seja, uma forma fácil e rápida de criar o seu próprio "PostgreSQL as an In-Memory Database".
Estou utilizando o Ubuntu 9.04 e PostgreSQL 8.3 para executar as atividades:
1) Montando partição em memória com tmpfs:
$ sudo -s
$ mkdir /mnt/in_memory
$ mount -t tmpfs -o size=2G,nr_inodes=8k,mode=0700 tmpfs /mnt/in_memory/
2) Criando cluster na partição criada:
$ chown -R postgres. /mnt/in_memory/
$ su - postgres -c "/usr/lib/postgresql/8.3/bin/initdb -D /mnt/in_memory"
3) Ajustando configurações do cluster (conforme recomendações do artigo citado):
$ vim /mnt/in_memory/postgresql.conf
fsync=off
synchronous_commit=off
full_page_writes=off
bgwriter_lru_maxpages=0
Obs: caso vc já tenha algum processo do PostgreSQL executando na mesma máquina desse teste então vc deve verificar se não será necessário modificar também a variável "port" do postgresql.conf, pois o padrão é 5432.
4) Iniciando processo servidor:
$ su - postgres -c "/usr/lib/postgresql/8.3/bin/pg_ctl -D /mnt/in_memory -l /mnt/in_memory/postgres.log start"
5) Verificando se o cluster está funcionando:
$ ps ax | grep post
19614 pts/3 S 0:00 /usr/lib/postgresql/8.3/bin/postgres -D /mnt/in_memory
19653 ? Ss 0:00 postgres: writer process
19654 ? Ss 0:00 postgres: wal writer process
19655 ? Ss 0:00 postgres: autovacuum launcher process
19656 ? Ss 0:00 postgres: stats collector process
$ /usr/lib/postgresql/8.3/bin/psql -U postgres -p 5437 -l
Lista dos bancos de dados
Nome | Dono | Codificação
-----------+----------+-------------
postgres | postgres | UTF8
template0 | postgres | UTF8
template1 | postgres | UTF8
(3 registros)
Acredito que neste ponto você já esteja com o seu PostgreSQL na memória pronto e funcional.
Lembre-se que o mesmo está "literalmente" na memória RAM, portanto ao desligar o micro o seu cluster inteiro será perdido, por isso o seu uso fica limitado como um Cache ao invés do uso do memcached ou alternativas NoSQL, porém com todos recursos disponíveis no PostgreSQL.
Por favor reportem problemas com esse mini-tutorial e/ou críticas e sugestões.
Cordialmente,
Fabrízio de Royes Mello
fabriziomello [at] gmail.com
domingo, 27 de junho de 2010
Assinar:
Postar comentários (Atom)
Achei interessante a idéia!
ResponderExcluirNão tem um recurso para quando der o halt na máquina, antes de desligar tudo copiar os arquivos para o HD?
Tem sim, mas se a sua necessidade é de manter os dados então creio que essa técnica não atenda a sua necessidade. Até mesmo porque um desligamento indevido do equipamento irá ocasionar a perda da partição.
ResponderExcluirCordialmente,
Fabrízio de Royes Mello
fabriziomello [at] gmail.com