26
Postgres Tuning o elefante mais r´ apido que um leopardo abio Telles Rodriguez Timbira - A empresa brasileira de PostgreSQL 03 de maio de 2013

Postgres Tuning

Embed Size (px)

DESCRIPTION

Palestra sobre ajustes de desempenho no PostgreSQL ministrada em 03 de maio de 2013

Citation preview

Page 1: Postgres Tuning

Postgres Tuningo elefante mais rapido que um leopardo

Fabio Telles Rodriguez

Timbira - A empresa brasileira de PostgreSQL

03 de maio de 2013

Page 2: Postgres Tuning

Agenda

Sobre o que estamos falando?

Ajustes iniciais

Ajustes no SQL

Consideracoes finais

Perguntas

Page 3: Postgres Tuning

Sobre esta apresentacao

I esta apresentacao esta disponıvel em:http://www.timbira.com.br/material

I esta apresentacao esta sob licenca Creative CommonsAtribuicao 3.0 Brasil :http://creativecommons.org/licenses/by/3.0/br

Page 4: Postgres Tuning

Sobre o que estamos falando?

Figura: Escolha difıcil

Page 5: Postgres Tuning

Sobre o que estamos falando?

Instalacoes eletricas

Page 6: Postgres Tuning

Sobre o que estamos falando?

Instalacoes eletricas

A maior preocupacao numa instalacao eletrica e sempre o calor;

I A corrente eletrica gera calor;

I Varios condutores em instalados juntos geram mais calor;

I As condicoes de ventilacao dificultam ou facilitam adissipacao do calor;

I As condicoes atmosfericas ou a presenca de outras fontes decalor devem ser levadas em consideracao;

I Materiais inflamaveis devem ser evitados.

Page 7: Postgres Tuning

Bancos de dados

A maior preocucao num banco de dados sao os Discos;

I Antes de confirmar uma transacao (COMMIT) voce devepersistir a informacao em disco;

I Discos sao milhares de vezes mais lentos que a CPU e amemoria;

I A lei de moore nao se aplica aos discos;

I Gravacoes e leituras em discos sao operacoes seriais e nao saoparalelizadas;

Page 8: Postgres Tuning

Discos

Figura: Discos num Storage

Page 9: Postgres Tuning

Uso de discos

I Um UPDATE pode obrigar um registro a migrar de bloco seele nao couber mais la;

I Ao atualizar um registro numa tabela, seus ındices tem de seratualizados tambem;

I Consultas pesadas que nao cabem na memoria utilizam oTABLESPACE temporario;

I Informacoes de rollback sao gravados para reverter umatrasacao;

I Varias pessoas podem querer alterar os mesmos dados aomesmo tempo;

Page 10: Postgres Tuning

Log de transacoes (WAL)

I Todo SGDB tenta guardar a maior parte possıvel dos dadosem memoria;

I Toda vez que uma transacao e confirmada (COMMIT) umregistro no WAL e gravado;

I O WAL e o ”Write Ahead Log”grava os registrossequencialmente;

I de tempos em tempos os dados em memoria (dirty buffers)sao gravados definitivamente nos datafiles (checkpoint);

I Se houver uma falha no SGDB o WAL e utilizado parareproduzir as tranzacoes em memoria que ainda nao foramconsolidadas em disco;

I Informacoes de rollback sao gravados para reverter trasacoesainda em memoria em caso de falha do SGDB;

Page 11: Postgres Tuning

Onde esta o problema afinal?

I 50% estao em SQL mal escrito;

I 20% estao em modelagem de dados mal feita;

I 10% estao em ajustes ruins do SGDB;

I 5% estao em ajustes ruins do SO;

I 5% estao em hardware mal dimensionado;

Page 12: Postgres Tuning

Agenda

Sobre o que estamos falando?

Ajustes iniciais

Ajustes no SQL

Consideracoes finais

Perguntas

Page 13: Postgres Tuning

Hardware

Figura: Discos num Storage

Page 14: Postgres Tuning

Hardware

I Utilize um servidor dedicado. (VMs go home!);

I Utilize DISCOS dedicados (Tirem a mao do meu storage!);

I Prioridade de gastos: discos, controladora de discos, memoria,processador;

I SSD SLC > SSD MLC > Fiber channel > SAS > SATA;

I Infiniband > Fiber channel > iSCSI;

I RAID 10 > RAID 1 > RAID 6 > RAID 5 > JBOD;

I Prefira controladoras com bastante cache, baterias externas esuportes a muitos discos;

I Prefira processadores com o melhor e maior cache possıvel emuitos cores;

Page 15: Postgres Tuning

Sistema Operacional

I Prefira sistemas UNIX: Linux, FreeBSD, OpenBSD, Solaris,etc;

I O melhor SO e aquele que sua equipe tem competencia paraoperar eficientemente;

I Sempre instale a versao em 64 bits do SO;

I Prioridade de gastos: discos, controladora de discos, memoria,processador;

I Prefira RAID por hardware e nao por software;

I Nao use LVM;

I Nao instale softwares e servicos desnecessarios: interfacesgraficas, Samba, NFS, Apache, etc;

Page 16: Postgres Tuning

Particionamento de Discos (Linux)

I /boot (EXT4);

I raiz (EXT4);

I dados (RAID 10 ou RAID 1 + XFS ou EXT4 + noatime);

I pg xlog (RAID 10 ou RAID 1 + EXT2 + noatime ou EXT3 +noatime + writeback);

I pg log (EXT2 + noatime);

I tablespaces com ındices, tablespaces temporarios (RAID 0 +EXT2 + noatime);

I tablespaces com dados historicos (RAID 5 + XFS ou EXT4 +noatime);

I backup e archives;

Page 17: Postgres Tuning

Ajustes no SO (Linux)

/etc/sysctl.conf

I kernel.shmmax (50% da RAM disponıvel);

I Semaforos (para suportar um numero alto de conexoes);

I file-max;

I overcommit;

/etc/security/limits.conf

I nproc;

I nofile;

/etc/fstab

I noatime para os dados;

I noatime + writeback para o pg xlog;

Page 18: Postgres Tuning

Ajustes no PostgreSQL

I max connections: O menor numero viavel;

I shared buffers: < 8GB ou 25% da RAM disponıvel;

I maintence work mem: 75% do tamanho da maior tabela;

I checkpoint segments: entre 16 e 64;

I checkpoint timeout: entre 10min e 30min;

Page 19: Postgres Tuning

Agenda

Sobre o que estamos falando?

Ajustes iniciais

Ajustes no SQL

Consideracoes finais

Perguntas

Page 20: Postgres Tuning

Acerte a sua modelagem

I Use o tipo de dados certo para a tarefa certa;

I Use chaves naturais;

I Nao use campos flex;

I Para dados nao estruturados, voce tem hstore, vetores e tiposcompostos;

I Use ındices e gatilhos com sabedoria (teste e monitore o seuuso);

I Pilhas e filas nao devem ficar no seu SGDB;

Page 21: Postgres Tuning

Escrevendo SQL

I Jamais utilize uma funcao em PL para algo que um SQL puroconsegue fazer;

I COMMIT a cada X alteracoes. X > 100 e < 100K;

I Se uma consulta retorna mais de 100 registros, reveja a regrade negocio;

I INSERT < INSERT multiplo < PREPARE e EXECUTE <COPY < INSERT ... SELECT;

I Aprenda a usar subconsultas e window functions e CommonTable Expression;

I Relatorios pesados devem utilizar visoes materializadas.

Page 22: Postgres Tuning

Agenda

Sobre o que estamos falando?

Ajustes iniciais

Ajustes no SQL

Consideracoes finais

Perguntas

Page 23: Postgres Tuning

Testes

I Teste as funcionalidades;

I Teste com volumes de dados o mais realistas possıvel;

I Teste com carga de concorrencia o mais realista possıvel;

I Aprenda a utilizar bem o EXPLAIN.

Page 24: Postgres Tuning

Monitoramento

I Monitore o SO, o PostgreSQL, a aplicacao;

I Gere logs que mostrem a operacao e a duracao de cada acao;

I Gere logs em formatos que possam ser manipulados porferramentas automatizadas;

I Aprenda a configurar o log do PostgreSQL e o PGBadger;

I Faca coletas periodicas e armazene tudo em um local central;

I Crie baselines e compare sempre com elas;

Page 25: Postgres Tuning

Para os DBAs...

I Durma bem antes de um novo deploy. Tire uns dias de folga;

I Nao deixe de tomar cerveja com os amigos...

I Pratique exercıcios fısicos regularmente!!!

Page 26: Postgres Tuning

Perguntas

?Fabio Telles [email protected]

http://www.timbira.com.br