Postgres Tuning

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

description

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

Transcript of Postgres Tuning

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