Alta Concorrência com Postgres

25
Alta concorrˆ encia com PostgreSQL ou Fazendo uma manada de elefantes passar debaixo da porta abio Telles Rodriguez Timbira - A empresa brasileira de PostgreSQL 09 de novembro de 2012

description

Última versão da palestra "Fazendo uma manada de elefantes passarem debaixo da porta", ministrada no PGDay São Paulo 2012, em 09/11. Esta é a versão definitiva, não pretendo atualizar ou ministrar novamente esta palestra.

Transcript of Alta Concorrência com Postgres

Page 1: Alta Concorrência com Postgres

Alta concorrencia com PostgreSQLou Fazendo uma manada de elefantes passar debaixo da porta

Fabio Telles Rodriguez

Timbira - A empresa brasileira de PostgreSQL

09 de novembro de 2012

Page 2: Alta Concorrência com Postgres

Agenda

Sobre o que estamos falando?

Possıveis solucoes

Consideracoes finais

Perguntas

Page 3: Alta Concorrência com Postgres

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: Alta Concorrência com Postgres

Sobre o que estamos falando?

Figura: Metro - SP / Estacao Se

Page 5: Alta Concorrência com Postgres

Sobre o que estamos falando?

Aplicacoes OLTP com alta concorrencia:

I Milhares de conexoes simultaneas;

I Varios usuarios realizando gravacoes nas mesmas tabelas;

I Varias usuarios consultando informacoes que acabaram de sergravadas;

I Cada usuario deve ser atendido em tempo habil;

I Crescimento de varios GBs por dia.

Page 6: Alta Concorrência com Postgres

Tratamento Multi Documentos - TMD

I Tratamento de imagens descentralizado em ambientebancario:

I Crescimento de 5GB a 20GB por dia;

I Ate 2 milhoes documentos tratados por dia;

I Mais de 5 mil agencias com 10 mil estacoes de captura.

I Pool de 25 servidores com complementacao automatica;

I Mais de 500 estacoes de complementacao manual;

I Centenas de regras de negocio aplicadas para diversos tipos dedocumento em diversas etapas (workflow);

I Troca de informacoes em lote com Mainframe;

I Troca de informacoes em XML com outros sistemas legados;

I Exportacao de arquivos de saıda.

I TUDO AO MESMO TEMPO, com janela de 6 horas deprocessamento.

Page 7: Alta Concorrência com Postgres

Gargalo de CPU

Figura: Trem em Mulan - Paquistao

Page 8: Alta Concorrência com Postgres

Gargalo de CPU

I SO nao trabalha bem com mais de 700 processos simultaneos;

I O custo para gerenciar a fila de espera so aumenta oproblema;

I Cada conexao precisa de memoria, keep alive pela rede esemaforizacao;

I O numero de conexoes ativas no SGDB deve ficar na ordemde 2 para cada core;

I Aplicacoes server podem utilizar conexoes persistentes...

I ... as aplicacoes client NAO;

Page 9: Alta Concorrência com Postgres

Lock Inferno

Figura: Cruzamento das Avenidas Faria Lima com a Juscelino Kubitschek

Page 10: Alta Concorrência com Postgres

Problemas com a modelagem

I Modelagem de dados ruim pode levar anos para revelar umresultado ruim.

I Leva horas para mostrar a catastrofe em alta concorrencia;

Page 11: Alta Concorrência com Postgres

Agenda

Sobre o que estamos falando?

Possıveis solucoes

Consideracoes finais

Perguntas

Page 12: Alta Concorrência com Postgres

Controlando o numero de conexoes

PGBouncer:

I 1 Pool de conexoes para transacoes no modo transaction;

I 1 Pool de conexoes para consultas no modo statement;

I Aumento na eficiencia do processador, fila de espera dastransacoes diminui;

PGmemcache

I Replicas de dados do PostgreSQL para SQLite nas estacoesutiliza memcache;

I Um gatilho nas tabelas replicadas atualiza o numero de versaodo cache;

I Ao solicitar uma replica, a estacao compara a sua versao databela com a versao do cache;

I Poderia ser implementado com Listem / Notify

Page 13: Alta Concorrência com Postgres

Locks

I So abra uma transacao, se realmente precisar;

I Saiba quando abrir e quando fechar uma transacao; Nao seperca na aplicacao;

I Se abrir, feche logo. Nao espere eventos for a do SGDB parafechar sua transacao;

I Nao utilize SELECT ... FOR UPDATE;

I Nao utilize LOCKs explıcitos. Tire proveito do MVCC;

I DEAD LOCK sao problemas de logica da aplicacao. Altere alogica dela;

Page 14: Alta Concorrência com Postgres

Ajustes de Hardware

I CPU rapida e menos importante que ter muitos cores;

I Muita memoria RAM para manter um numer alto deconexoes;

I Use cache de disco para suportar um grande volume degravacoes concorrentes;

I Discos rapidos e separados para o pg xlog e imprecindıvel;

Page 15: Alta Concorrência com Postgres

Ajustes no SO (Linux)

/etc/sysctl.conf

I kernel.shmmax (25% 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 16: Alta Concorrência com Postgres

Ajustes no PostgreSQL

max connections

I O menor numero viavel;

I Faca o possıvel para diminuir este valor para menos de 500;

pg hba.conf

I Limite ao maximo a origem das suas conexoes;

I Limite os usuarios e bases que eles vao se conectar;

I Rejeite usuarios, grupos e redes desconhecidos;

Page 17: Alta Concorrência com Postgres

Ajustes no PostgreSQL

shared buffers

I < 8GB ou 20% da RAM disponıvel (o que for maior);

autovacuum

I em tabelas que sofrem cargas pesadas em lote, desligue;

Memoria por processo

I temp buffer < 16MB

I work mem < 16MB

I Ajuste individualmente conexoes especıficas;

checkpoint segments

I Aumente para pelo menos 16

I Limite de acordo com tempo que o recover pode levar

Page 18: Alta Concorrência com Postgres

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 19: Alta Concorrência com Postgres

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 20: Alta Concorrência com Postgres

Agenda

Sobre o que estamos falando?

Possıveis solucoes

Consideracoes finais

Perguntas

Page 21: Alta Concorrência com Postgres

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

Page 22: Alta Concorrência com Postgres

Rollout

Como testes com volume de dados e concorrencia nunca saobons...

I Faca o deploy de poucas funcionalidades por vez;

I Adicione novos usuarios aos poucos;

I Esteja preparado para o caos durante o rollout;

I Nao tente matar mais de um leao por dia;

I O rollout de uma unica parte do sistema pode levar meses;

Page 23: Alta Concorrência com Postgres

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 24: Alta Concorrência com Postgres

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 25: Alta Concorrência com Postgres

Perguntas

?Fabio Telles [email protected]

http://www.timbira.com.br