You are on page 1of 4

Otimizando bancos PostgreSQL - Parte 01 iMasters

http://imasters.com.br/artigo/4406/postgresql/otimizando_bancos_post...

Abril.com

Mais sites Abril

Grupo Abril

Abril Mdia

Distribuio

Grfica

Abril Educao

Assine

Loja

AGENDA

MULTIMDIA

BOX

JOBS

COLETIVOS

IMASTERS PRO

CODE

FRUM

Faa Login / Cadastre-se

PostgreSQL

Otimizando bancos PostgreSQL - Parte 01


Sexta-feira, 21/07/2006 s 12h20, por Tiago Adami

Ol! Neste meu primeiro artigo gostaria de descrever alguns ajustes finos do PostgreSQL que ajudam a melhorar a performance geral do banco de dados. Estas configuraes so vlidas para a verso 8.1. Caso voc possua uma verso anterior, recomendo fortemente a atualizao para a 8.1, pois esta ltima muito mais rpida que as anteriores, mesmo utilizando as configuraes padro. Infelizmente, a maior parte da degradao de performance de um banco de dados est na estrutura e/ou nos comandos SELECT mal elaborados. Nete artigo, ser feita uma abordagem nica e especfica nos ajustes de configurao do SGBD, fazendo-o usufruir do mximo dos recursos de hardware onde est instalado o servio do PostgreSQL. importante salientar tambm que no existe frmula mgica para as configuraes, sendo que as opes de um servidor pode no ser a melhor opo para outro. Edio do arquivo postgresql.conf Para comear, localize o arquivo chamado postgresql.conf. Este arquivo encontra-se no diretrio de dados do cluster (ou agrupamento de bancos de dados) o qual voc est inicializando. Em instalaes normais, voc pode encontr-lo em: - Microsoft Windows: - Pasta "Arquivos de Configurao" no Menu Iniciar/Programas ou - C:\Arquivos de Programas\PostgreSQL\8.1\data\ - Linux (Red Hat e Fedore) /var/lib/pgsql/data Aps encontr-lo, certifique-se de criar uma cpia de backup do arquivo antes de alter-lo, pois erros na configurao podem fazer com que o PostgreSQL no seja inicializado. Feito o backup, abra o arquivo em modo de edio. Se estiver no Linux, certifique-se de estar logado com o usurio root ou postgres. Os parmetros devem ser preenchidos seguindo o padro nome_do_parametro = valor. Lembrando que para valores do tipo data e texto deve-se envolver o valor com aspas simples, e para os valores numricos no inserir separador de milhar. No esquea de remover o caracter cerquilha "#" do incio das opes que deseja ativar. Todas as alteraes sero efetivadas aps a reinicializao do servio PostgreSQL. shared_buffers Define o espao de memria alocado para o PostgreSQL armazenar as consultas SQL antes de devolv-las ao buffer do sistema operacional. Esta opo pode solicitar que parmetros do Kernel sejam modificados para liberar mais memria compartilhada do sistema operacional, pois esta passa a ser utilizada tambm pelo Postgre, em maior quantidade. O valor desta configurao est expresso em blocos de 8 Kbytes (128 representa 1.024 Kbytes ou 1 Mb). Uma boa pedida utilizar valores de 8% a 12% do total de RAM do servidor para esta configurao. Caso, aps mudar o valor deste parmetro, o PostgreSQL no inicializar o cluster em questo, altere o sistema operacional para liberar mais memria compartilhada.
LTIMAS NOTCIAS
28/02 s 15h40

Atualizaes do PostgreSQL corrigem falhas de segurana


31/01 s 16h35

Banco de dados na nuvem do PostgreSQL anunciado


12/09/2011

Verso 9.1 do PostgreSQL est disponvel para download


25/08/2011

Primeiro Release Candidate do PostgreSQL 9.1 lanado


06/10/2010

PostgreSQL ganha atualizaes de segurana


VER MAIS NOTCIAS

CURSOS ONLINE

Criao de Temas para WordPress


Aprenda tcnicas de criao e de desenvolvimento de temas para WordPress e desenvolva um tema a partir de um layout real.

1 de 4

13/03/2012 16:43

Otimizando bancos PostgreSQL - Parte 01 iMasters

http://imasters.com.br/artigo/4406/postgresql/otimizando_bancos_post...

Consulte o manual ou equivalentes do seu sistema operacional para obter instrues de como aumentar a memria compartilhada (Shared Memory) disponvel para os programas. Exemplo: shared_buffers = 2048 # Seta a memria compartilhada para 16 Mbytes work_mem Configura o espao reservado de memria para operaes de ordem e manipulao/consulta de ndices. Este parmetro configura o tamanho em KBytes utilizado no servidor para cada conexo efetivada ao SGBD, portanto esteja ciente que o espao total da RAM utilizado (valor da opo multiplicado pelo nmero de conexes simultneas) no deve ultrapassar 20% do total disponvel (valor aproximado). Exemplo: work_mem = 2048
MVC em PHP na prtica (Construindo um sistema de pedidos)
A aplicao desenvolvida no curso um sistema de pedidos com carrinho de compras onde o usurio pode adicionar, remover e modificar a quantidade de produtos de seu carrinho.

# Configura 2 Mbytes de RAM do servidor para operaes de

Redes e protocolo TCP/IP


Este curso apresenta os conceitos fundamentais de redes de computadores, discutindo as caractersticas das principais tecnologias de LAN e de WAN.

ORDER BY, CREATE INDEX e JOIN disponveis para cada conexo ao banco. maintenance_work_mem Expressa em KBytes o valor de memria reservado para operaes de manuteno (como VACUUM e COPY). Se o seu processo de VACUUM est muito custoso, tente aumentar o valor deste parmetro. Nota: O total de memria configurada neste parmetro utilizado somente durante as operaes de manuteno do banco de dados, sendo liberada durante o seu uso normal. Exemplo: maintenance_work_mem = 16384 manuteno. max_fsm_pages Em bancos de dados grandes, ideal que a cada execuo do VACUUM mais pginas "sujas" sejam removidas do banco de dados do que a quantidade padro, principalmente por questes de espao em disco, e claro, performance. Porm, a configurao padro traz apenas 20000 pginas. Em bancos transacionais, com no mnimo 10 usurios, o nmero mensal de pginas sujas pode exceder este valor. Para realizar uma limpeza maior, aumente o valor desta configurao. Nota: incrementando o valor deste parmetro pode resultar em aumento do tempo para execuo do VACUUM, e cada pgina ocupa em mdia 6 bytes de RAM constantemente. O comando VACUUM pode ser comparado ao comando PACK do DBASE (DBFs), porm possui mais funcionalidades. Exemplo: max_fsm_pages = 120000 # Realiza a procura por at 120.000 pginas sujas na limpeza pelo VACUUM utilizando cerca de 71 Kb de RAM para isto. wal_buffers Nmero de buffers utilizados pelo WAL (Write Ahead Log). O WAL garante que os registros sejam gravados em LOG para possvel recuperao antes de fechar uma transao. Porm, para bancos transacionais com muitas operaes de escrita, o valor padro pode diminuir a performance. Entretanto, importante ressalvar que aumentar muito o valor deste parmetro pode resultar em perda de dados durante uma possvel queda de energia, pois os dados mantm-se . Cada unidade representa 8 Kbytes de uso na RAM. Valores ideais esto entre 32 e 64. Se o disco conjunto do servidor (HW & SW) so quase infalveis, tente usar 128 ou 256. Exemplo: wal_buffers = 64 escrita no WAL. effective_cache_size Esta configurao dita o quanto de memria RAM ser utilizada para cache efetivo (ou cache de dados) do banco de dados. Na prtica, esta a configurao que d mais flego ao SGBD, evitando a constante leitura das tabelas e ndices ,dos arquivos do disco rgido. Como exemplo, se uma tabela do banco de dados possui 20 Mbytes, e o tamanho para esta configurao limita-se aos quase 8 Mbytes padro, o otimizador de querys ir carregar a tabela por etapas, em partes, at que ela toda seja vasculhada em busca dos registros. Esta opo impacta diretamente aumentando a performance do banco de dados, principalmente quando h concorrncia, pois diminui consideravelmente as operaes de I/O de disco.

Encontre-nos no Facebook

iMasters
Curtir 10,469 pessoas curtiram iMasters.

# 16 Mbytes reservados para operaes de


Adayane Carlos A. Ueder Carlos Fernando Anderson

Licinha

Carlos Alexandre Correia Jaderson

Mrcia

Elisangela

Plug-in social do Facebook

# Seta para 512 Kbytes a memria destinada ao buffer de

2 de 4

13/03/2012 16:43

Otimizando bancos PostgreSQL - Parte 01 iMasters

http://imasters.com.br/artigo/4406/postgresql/otimizando_bancos_post...

Em consultas pela internet, encontrei vrias referncias para utilizar no mximo 25% da RAM total. Porm, se o servidor for dedicado, ou dispr de uma grande quantidade de memria (512 Mbytes ou mais), recomendo o uso de 50% da RAM para esta configurao. Cada unidade corresponde a 8 Kbytes de RAM. Exemplo: effective_cache_size = 32768 # Seta o cache de dados do PostgreSQL para 256 Mbytes de RAM. random_page_cost Define o custo (em tempo) para a seleo do plano de acesso aos dados do banco. Se voc possui discos rgidos velozes (SCSI, por exemplo), tente utilizar valores como 1 ou 2 para esta configurao. Para os demais casos, limite-se a 3 ou 4. Isto impacta no plano estabelecido pelo otimizador interno, que pode realizar um Index_Scan ou Table_Scan, etc, conforme aquilo que ele determinar ser mais otimizado. Exemplo: random_page_cost = 2 # Diminui o tempo para seleo aleatria de pginas do otimizador de consultas. Notas gerais Caso os valores inseridos possuam algum erro, possvel que o PostgreSQL no consiga inicializar o agrupamento de banco de dados no qual o arquivo postgresql.conf foi modificado. Se isto ocorrer, retorne o backup do mesmo e certifique-se de que as modificaes esto corretamente setadas. possvel obter ganhos de performance significativos com a correta seleo dos valores para as configuraes acima. Tente vrias combinaes dependendo da capacidade e do uso do servidor (hardware) onde est instalado o PostgreSQL 8.1. Dvidas e/ou crticas sobre este artigo podem ser encaminhadas ao meu e-mail. No prximo artigo, apresentarei mais dicas para a otimizao de projetos de bancos de dados em PostgreSQL. At breve!

Tiago Adami bacharel em Sistemas de Informao pela UNISEP (Dois Vizinhos - PR), desenvolvedor Certificado em Sybase Powerbuilder 8.0 (Brainbench) e trabalha em projetos e desenvolvimento de sistemas ERP com Visual FoxPro e Sybase Powerbuilder utilizando o banco de dados PostgreSQL. Pgina do autor Email

Leia os ltimos artigos publicados por tiago_adami Otimizando bancos PostgreSQL - Parte 02

3 COMENTRIOS

COMENTE TAMBM

Glauber Lucio Ol, li seu comentrio e achei bem interessante, realmente enfrento uma lentido sem necessidade por causa da verso 8.0 do Postgre.. Mas tenho uma dvida quanto a mudana da verso 8.0 para 8.1. Quando eu fizer o backup Compactado do banco de dados que utilizo na verso 8.0, eu poderia simplesmente fazer um RESTORE na 8.1, ou tem alguma forma especifica de fazer quando esta mudando de verso do banco ?
H 5 anos Responder

Augusto Correia Gostaria de sugerir um artigo de como realizar backup dos bancos no linux. Obrigado.
H 5 anos Responder

arnaldo Ajudou muito!! Valeu


H 8 meses Responder

QUAL A SUA OPINIO?

3 de 4

13/03/2012 16:43

Otimizando bancos PostgreSQL - Parte 01 iMasters

http://imasters.com.br/artigo/4406/postgresql/otimizando_bancos_post...

PARCEIROS

2001 iMasters FFPA Informtica Ltda Todos os direitos reservados. Sobre o iMasters Poltica de privacidade Anuncie Fale conosco

4 de 4

13/03/2012 16:43

You might also like