$30 off During Our Annual Pro Sale. View Details »

Alta concorrência com PostgreSQL

Alta concorrência com PostgreSQL

ou "Fazendo uma manada de elefantes passar debaixo da porta"

Palestra realizada no PGDay São Paulo

Fábio Telles Rodriguez

November 09, 2012
Tweet

More Decks by Fábio Telles Rodriguez

Other Decks in Programming

Transcript

  1. 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

    View Slide

  2. Agenda
    Sobre o que estamos falando?
    Poss´
    ıveis solu¸

    oes
    Considera¸

    oes finais
    Perguntas

    View Slide

  3. Sobre esta apresenta¸

    ao
    esta apresenta¸

    ao est´
    a dispon´
    ıvel em:
    http://www.timbira.com.br/material
    esta apresenta¸

    ao est´
    a sob licen¸
    ca Creative Commons
    Atribui¸

    ao 3.0 Brasil:
    http://creativecommons.org/licenses/by/3.0/br

    View Slide

  4. Sobre o que estamos falando?
    Figura: Metrˆ
    o - SP / Esta¸

    ao S´
    e

    View Slide

  5. Sobre o que estamos falando?
    Aplica¸

    oes OLTP com alta concorrˆ
    encia:
    Milhares de conex˜
    oes simultˆ
    aneas;

    arios usu´
    arios realizando grava¸

    oes nas mesmas tabelas;

    arias usu´
    arios consultando informa¸

    oes que acabaram de ser
    gravadas;
    Cada usu´
    ario deve ser atendido em tempo h´
    abil;
    Crescimento de v´
    arios GBs por dia.

    View Slide

  6. Tratamento Multi Documentos - TMD
    Tratamento de imagens descentralizado em ambiente
    bancario:
    Crescimento de 5GB a 20GB por dia;
    At´
    e 2 milh˜
    oes documentos tratados por dia;
    Mais de 5 mil agˆ
    encias com 10 mil esta¸

    oes de captura.
    Pool de 25 servidores com complementa¸

    ao autom´
    atica;
    Mais de 500 esta¸

    oes de complementa¸

    ao manual;
    Centenas de regras de neg´
    ocio aplicadas para diversos tipos de
    documento em diversas etapas (workflow);
    Troca de informa¸

    oes em lote com Mainframe;
    Troca de informa¸

    oes em XML com outros sistemas legados;
    Exporta¸

    ao de arquivos de sa´
    ıda.
    TUDO AO MESMO TEMPO, com janela de 6 horas de
    processamento.

    View Slide

  7. Gargalo de CPU
    Figura: Trem em Mulan - Paquist˜
    ao

    View Slide

  8. Gargalo de CPU
    SO n˜
    ao trabalha bem com mais de 700 processos simultˆ
    aneos;
    O custo para gerenciar a fila de espera s´
    o aumenta o
    problema;
    Cada conex˜
    ao precisa de mem´
    oria, keep alive pela rede e
    semaforiza¸

    ao;
    O n´
    umero de conex˜
    oes ativas no SGDB deve ficar na ´
    ordem
    de 2 para cada core;
    Aplica¸

    oes server podem utilizar conex˜
    oes persistentes...
    ... as aplica¸

    oes client N˜
    AO;

    View Slide

  9. Lock Inferno
    Figura: Cruzamento das Avenidas Faria Lima com a Juscelino Kubitschek

    View Slide

  10. Problemas com a modelagem
    Modelagem de dados ruim pode levar anos para revelar um
    resultado ruim.
    Leva horas para mostrar a cat´
    astrofe em alta concorrˆ
    encia;

    View Slide

  11. Agenda
    Sobre o que estamos falando?
    Poss´
    ıveis solu¸

    oes
    Considera¸

    oes finais
    Perguntas

    View Slide

  12. Controlando o n´
    umero de conex˜
    oes
    PGBouncer:
    1 Pool de conex˜
    oes para transa¸

    oes no modo transaction;
    1 Pool de conex˜
    oes para consultas no modo statement;
    Aumento na eficiencia do processador, fila de espera das
    transa¸

    oes diminui;
    PGmemcache
    Replicas de dados do PostgreSQL para SQLite nas esta¸

    oes
    utiliza memcache;
    Um gatilho nas tabelas replicadas atualiza o n´
    umero de vers˜
    ao
    do cache;
    Ao solicitar uma r´
    eplica, a esta¸

    ao compara a sua vers˜
    ao da
    tabela com a vers˜
    ao do cache;
    Poderia ser implementado com Listem / Notify

    View Slide

  13. Locks

    o abra uma transa¸

    ao, se realmente precisar;
    Saiba quando abrir e quando fechar uma transa¸

    ao; N˜
    ao se
    perca na aplica¸

    ao;
    Se abrir, feche logo. N˜
    ao espere eventos for a do SGDB para
    fechar sua transa¸

    ao;

    ao utilize SELECT ... FOR UPDATE;

    ao utilize LOCKs expl´
    ıcitos. Tire proveito do MVCC;
    DEAD LOCK s˜
    ao problemas de l´
    ogica da aplica¸

    ao. Altere a

    ogica dela;

    View Slide

  14. Ajustes de Hardware
    CPU r´
    apida ´
    e menos importante que ter muitos cores;
    Muita mem´
    oria RAM para manter um n´
    umer alto de
    conex˜
    oes;
    Use cache de disco para suportar um grande volume de
    grava¸

    oes concorrentes;
    Discos r´
    apidos e separados para o pg xlog ´
    e imprecind´
    ıvel;

    View Slide

  15. Ajustes no SO (Linux)
    /etc/sysctl.conf
    kernel.shmmax (25% da RAM dispon´
    ıvel)
    Sem´
    aforos (para suportar um n´
    umero alto de conex˜
    oes)
    file-max
    overcommit
    /etc/security/limits.conf
    nproc
    nofile
    /etc/fstab
    noatime para os dados
    noatime + writeback para o pg xlog

    View Slide

  16. Ajustes no PostgreSQL
    max connections
    O menor n´
    umero vi´
    avel;
    Fa¸
    ca o poss´
    ıvel para diminuir este valor para menos de 500;
    pg hba.conf
    Limite ao m´
    aximo a origem das suas conex˜
    oes;
    Limite os usu´
    arios e bases que eles v˜
    ao se conectar;
    Rejeite usu´
    arios, grupos e redes desconhecidos;

    View Slide

  17. Ajustes no PostgreSQL
    shared buffers
    < 8GB ou 20% da RAM dispon´
    ıvel (o que for maior);
    autovacuum
    em tabelas que sofrem cargas pesadas em lote, desligue;
    Mem´
    oria por processo
    temp buffer < 16MB
    work mem < 16MB
    Ajuste individualmente conex˜
    oes espec´
    ıficas;
    checkpoint segments
    Aumente para pelo menos 16
    Limite de acordo com tempo que o recover pode levar

    View Slide

  18. Acerte a sua modelagem
    Use o tipo de dados certo para a tarefa certa;
    Use chaves naturais;

    ao use campos flex;
    Para dados n˜
    ao estruturados, vocˆ
    e tem hstore, vetores e tipos
    compostos;
    Use ´
    ındices e gatilhos com sabedoria (teste e monitore o seu
    uso);
    Pilhas e filas n˜
    ao devem ficar no seu SGDB;

    View Slide

  19. Escrevendo SQL
    Jamais utilize uma fun¸

    ao em PL para algo que um SQL puro
    consegue fazer;
    COMMIT a cada X altera¸

    oes. X > 100 e < 100K;
    Se uma consulta retorna mais de 100 registros, reveja a regra
    de neg´
    ocio;
    INSERT < INSERT multiplo < PREPARE e EXECUTE <
    COPY < INSERT ... SELECT
    Aprenda a usar subconsultas e window functions e Common
    Table Expression;
    Relat´
    orios pesados devem utilizar vis˜
    oes materializadas.

    View Slide

  20. Agenda
    Sobre o que estamos falando?
    Poss´
    ıveis solu¸

    oes
    Considera¸

    oes finais
    Perguntas

    View Slide

  21. Testes
    Teste as funcionalidades
    Teste com volumes de dados o mais realistas poss´
    ıvel
    Teste com carga de concorrˆ
    encia o mais realista poss´
    ıvel

    View Slide

  22. Rollout
    Como testes com volume de dados e concorrˆ
    encia nunca s˜
    ao
    bons...
    Fa¸
    ca o deploy de poucas funcionalidades por vˆ
    ez;
    Adicione novos usu´
    arios aos poucos;
    Esteja preparado para o caos durante o rollout;

    ao tente matar mais de um le˜
    ao por dia;
    O rollout de uma ´
    unica parte do sistema pode levar meses;

    View Slide

  23. Monitoramento
    Monitore o SO, o PostgreSQL, a aplica¸

    ao;
    Gere logs que mostrem a opera¸

    ao e a dura¸

    ao de cada a¸

    ao;
    Gere logs em formatos que possam ser manipulados por
    ferramentas automatizadas;
    Aprenda a configurar o log do PostgreSQL e o PGBadger;
    Fa¸
    ca coletas peri´
    odicas e armazene tudo em um local central;
    Crie baselines e compare sempre com elas;

    View Slide

  24. Para os DBAs...
    Durma bem antes de um novo deploy. Tire uns dias de folga;

    ao deixe de tomar cerveja com os amigos...
    Pratique exerc´
    ıcios f´
    ısicos regularmente!!!

    View Slide

  25. Perguntas
    ?

    abio Telles Rodriguez
    [email protected]
    http://www.timbira.com.br

    View Slide