SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
Alta concorrˆncia com PostgreSQL
                    e
ou Fazendo uma manada de elefantes passar debaixo da porta


                    F´bio Telles Rodriguez
                     a

            Timbira - A empresa brasileira de PostgreSQL


                  09 de novembro de 2012
Agenda



  Sobre o que estamos falando?


  Poss´
      ıveis solu¸˜es
                co


  Considera¸˜es finais
           co


  Perguntas
Sobre esta apresenta¸˜o
                    ca




      esta apresenta¸˜o est´ dispon´ em:
                    ca     a       ıvel
      http://www.timbira.com.br/material
      esta apresenta¸˜o est´ sob licen¸a Creative Commons
                    ca      a         c
      Atribui¸˜o 3.0 Brasil:
             ca
      http://creativecommons.org/licenses/by/3.0/br
Sobre o que estamos falando?




                Figura: Metrˆ - SP / Esta¸˜o S´
                            o            ca e
Sobre o que estamos falando?




   Aplica¸oes OLTP com alta concorrˆncia:
         c˜                        e
       Milhares de conex˜es simultˆneas;
                        o         a
       V´rios usu´rios realizando grava¸˜es nas mesmas tabelas;
        a        a                     co
       V´rias usu´rios consultando informa¸˜es que acabaram de ser
        a        a                        co
       gravadas;
       Cada usu´rio deve ser atendido em tempo h´bil;
               a                                a
       Crescimento de v´rios GBs por dia.
                       a
Tratamento Multi Documentos - TMD

      Tratamento de imagens descentralizado em ambiente
      bancario:
      Crescimento de 5GB a 20GB por dia;
      At´ 2 milh˜es documentos tratados por dia;
        e       o
      Mais de 5 mil agˆncias com 10 mil esta¸˜es de captura.
                      e                     co
      Pool de 25 servidores com complementa¸˜o autom´tica;
                                           ca       a
      Mais de 500 esta¸˜es de complementa¸˜o manual;
                      co                 ca
      Centenas de regras de neg´cio aplicadas para diversos tipos de
                               o
      documento em diversas etapas (workflow);
      Troca de informa¸˜es em lote com Mainframe;
                      co
      Troca de informa¸˜es em XML com outros sistemas legados;
                      co
      Exporta¸˜o de arquivos de sa´
             ca                   ıda.
      TUDO AO MESMO TEMPO, com janela de 6 horas de
      processamento.
Gargalo de CPU




                 Figura: Trem em Mulan - Paquist˜o
                                                a
Gargalo de CPU



      SO n˜o trabalha bem com mais de 700 processos simultˆneos;
          a                                               a
      O custo para gerenciar a fila de espera s´ aumenta o
                                              o
      problema;
      Cada conex˜o precisa de mem´ria, keep alive pela rede e
                 a               o
      semaforiza¸˜o;
                ca
      O n´mero de conex˜es ativas no SGDB deve ficar na ´rdem
          u              o                             o
      de 2 para cada core;
      Aplica¸˜es server podem utilizar conex˜es persistentes...
             co                             o
                                ˜
      ... as aplica¸˜es client NAO;
                   co
Lock Inferno




   Figura: Cruzamento das Avenidas Faria Lima com a Juscelino Kubitschek
Problemas com a modelagem




      Modelagem de dados ruim pode levar anos para revelar um
      resultado ruim.
      Leva horas para mostrar a cat´strofe em alta concorrˆncia;
                                   a                      e
Agenda



  Sobre o que estamos falando?


  Poss´
      ıveis solu¸˜es
                co


  Considera¸˜es finais
           co


  Perguntas
Controlando o n´mero de conex˜es
               u             o

   PGBouncer:
      1 Pool de conex˜es para transa¸˜es no modo transaction;
                     o              co
      1 Pool de conex˜es para consultas no modo statement;
                     o
      Aumento na eficiencia do processador, fila de espera das
      transa¸˜es diminui;
            co

   PGmemcache
      Replicas de dados do PostgreSQL para SQLite nas esta¸˜es
                                                          co
      utiliza memcache;
      Um gatilho nas tabelas replicadas atualiza o n´mero de vers˜o
                                                    u            a
      do cache;
      Ao solicitar uma r´plica, a esta¸˜o compara a sua vers˜o da
                        e             ca                    a
      tabela com a vers˜o do cache;
                        a
      Poderia ser implementado com Listem / Notify
Locks



        S´ abra uma transa¸˜o, se realmente precisar;
         o                ca
        Saiba quando abrir e quando fechar uma transa¸˜o; N˜o se
                                                     ca    a
        perca na aplica¸˜o;
                       ca
        Se abrir, feche logo. N˜o espere eventos for a do SGDB para
                               a
        fechar sua transa¸˜o;
                          ca
        N˜o utilize SELECT ... FOR UPDATE;
         a
        N˜o utilize LOCKs expl´
         a                    ıcitos. Tire proveito do MVCC;
        DEAD LOCK s˜o problemas de l´gica da aplica¸˜o. Altere a
                     a              o              ca
        l´gica dela;
         o
Ajustes de Hardware




      CPU r´pida ´ menos importante que ter muitos cores;
           a     e
      Muita mem´ria RAM para manter um n´mer alto de
                o                       u
      conex˜es;
           o
      Use cache de disco para suportar um grande volume de
      grava¸˜es concorrentes;
           co
      Discos r´pidos e separados para o pg xlog ´ imprecind´
              a                                 e          ıvel;
Ajustes no SO (Linux)

   /etc/sysctl.conf
       kernel.shmmax (25% da RAM dispon´
                                       ıvel)
       Sem´foros (para suportar um n´mero alto de conex˜es)
          a                         u                  o
       file-max
       overcommit

   /etc/security/limits.conf
       nproc
       nofile

   /etc/fstab
       noatime para os dados
       noatime + writeback para o pg xlog
Ajustes no PostgreSQL



   max connections
       O menor n´mero vi´vel;
                u       a
       Fa¸a o poss´ para diminuir este valor para menos de 500;
         c        ıvel

   pg hba.conf
       Limite ao m´ximo a origem das suas conex˜es;
                  a                            o
       Limite os usu´rios e bases que eles v˜o se conectar;
                    a                       a
       Rejeite usu´rios, grupos e redes desconhecidos;
                  a
Ajustes no PostgreSQL
   shared buffers
       < 8GB ou 20% da RAM dispon´ (o que for maior);
                                 ıvel

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

   Mem´ria por processo
      o
       temp buffer < 16MB
       work mem < 16MB
       Ajuste individualmente conex˜es espec´
                                   o        ıficas;

   checkpoint segments
       Aumente para pelo menos 16
       Limite de acordo com tempo que o recover pode levar
Acerte a sua modelagem



      Use o tipo de dados certo para a tarefa certa;
      Use chaves naturais;
      N˜o use campos flex;
       a
      Para dados n˜o estruturados, vocˆ tem hstore, vetores e tipos
                  a                   e
      compostos;
      Use ´
          ındices e gatilhos com sabedoria (teste e monitore o seu
      uso);
      Pilhas e filas n˜o devem ficar no seu SGDB;
                     a
Escrevendo SQL



      Jamais utilize uma fun¸˜o em PL para algo que um SQL puro
                            ca
      consegue fazer;
      COMMIT a cada X altera¸˜es. X > 100 e < 100K;
                            co
      Se uma consulta retorna mais de 100 registros, reveja a regra
      de neg´cio;
            o
      INSERT < INSERT multiplo < PREPARE e EXECUTE <
      COPY < INSERT ... SELECT
      Aprenda a usar subconsultas e window functions e Common
      Table Expression;
      Relat´rios pesados devem utilizar vis˜es materializadas.
           o                               o
Agenda



  Sobre o que estamos falando?


  Poss´
      ıveis solu¸˜es
                co


  Considera¸˜es finais
           co


  Perguntas
Testes




         Teste as funcionalidades
         Teste com volumes de dados o mais realistas poss´
                                                         ıvel
         Teste com carga de concorrˆncia o mais realista poss´
                                   e                         ıvel
Rollout



   Como testes com volume de dados e concorrˆncia nunca s˜o
                                            e            a
   bons...
       Fa¸a o deploy de poucas funcionalidades por vˆz;
         c                                          e
       Adicione novos usu´rios aos poucos;
                         a
       Esteja preparado para o caos durante o rollout;
       N˜o tente matar mais de um le˜o por dia;
        a                           a
       O rollout de uma unica parte do sistema pode levar meses;
                        ´
Monitoramento




      Monitore o SO, o PostgreSQL, a aplica¸˜o;
                                           ca
      Gere logs que mostrem a opera¸˜o e a dura¸˜o de cada a¸˜o;
                                   ca          ca           ca
      Gere logs em formatos que possam ser manipulados por
      ferramentas automatizadas;
      Aprenda a configurar o log do PostgreSQL e o PGBadger;
      Fa¸a coletas peri´dicas e armazene tudo em um local central;
        c              o
      Crie baselines e compare sempre com elas;
Para os DBAs...




      Durma bem antes de um novo deploy. Tire uns dias de folga;
      N˜o deixe de tomar cerveja com os amigos...
       a
      Pratique exerc´
                    ıcios f´
                           ısicos regularmente!!!
Perguntas




                      ?
               F´bio Telles Rodriguez
                 a
                telles@timbira.com.br
            http://www.timbira.com.br

Mais conteúdo relacionado

Mais procurados

Backup 101 - Jerônimo Medina Madruga
Backup 101 - Jerônimo Medina MadrugaBackup 101 - Jerônimo Medina Madruga
Backup 101 - Jerônimo Medina MadrugaTchelinux
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaHenrique Lima
 
TDC2016POA | Trilha Python - Heimdall Guard - Spam Filter
TDC2016POA | Trilha Python - Heimdall Guard - Spam FilterTDC2016POA | Trilha Python - Heimdall Guard - Spam Filter
TDC2016POA | Trilha Python - Heimdall Guard - Spam Filtertdc-globalcode
 
Explorando protocolos de serialização de alto desempenho
Explorando protocolos de serialização de alto desempenhoExplorando protocolos de serialização de alto desempenho
Explorando protocolos de serialização de alto desempenhoRafael Monteiro e Pereira
 
A Arte do Deployment - WebDevCamp
A Arte do Deployment - WebDevCampA Arte do Deployment - WebDevCamp
A Arte do Deployment - WebDevCampGeorge Guimarães
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresDouglas V. Pasqua
 
Atendendo Milhares de Requisições com o Play Framework 2 - v2
Atendendo Milhares de Requisições com o Play Framework 2 - v2Atendendo Milhares de Requisições com o Play Framework 2 - v2
Atendendo Milhares de Requisições com o Play Framework 2 - v2Paulo Siqueira
 
Lua em transmissões ao vivo
Lua em transmissões ao vivoLua em transmissões ao vivo
Lua em transmissões ao vivoLeandro Moreira
 
Lidando com operações assíncronas no redux com redux saga
Lidando com operações assíncronas no redux com redux sagaLidando com operações assíncronas no redux com redux saga
Lidando com operações assíncronas no redux com redux sagaHugo Bessa
 
Testes e depuração de código com Python
Testes e depuração de código com PythonTestes e depuração de código com Python
Testes e depuração de código com PythonDorneles Treméa
 
Ferramentas para infraestrutura ágil
Ferramentas para infraestrutura ágilFerramentas para infraestrutura ágil
Ferramentas para infraestrutura ágilJose Augusto Carvalho
 
1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...
1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...
1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...Zabbix BR
 
Como se tornar um viciado em performance em 5 passos
Como se tornar um viciado em performance em 5 passosComo se tornar um viciado em performance em 5 passos
Como se tornar um viciado em performance em 5 passosPedro Chaves
 
Sessões (in portuguese)
Sessões (in portuguese)Sessões (in portuguese)
Sessões (in portuguese)Bruno Pedro
 
Isolamento e mvcc
Isolamento e mvccIsolamento e mvcc
Isolamento e mvccLocaweb
 
Oficina de infraestrutura como código (apresentando o Puppet)
Oficina de infraestrutura como código (apresentando o Puppet)Oficina de infraestrutura como código (apresentando o Puppet)
Oficina de infraestrutura como código (apresentando o Puppet)Jose Augusto Carvalho
 
Deixando aplicações Laravel mais rápidas
Deixando aplicações Laravel mais rápidasDeixando aplicações Laravel mais rápidas
Deixando aplicações Laravel mais rápidasDanilo Pinotti
 

Mais procurados (20)

Backup 101 - Jerônimo Medina Madruga
Backup 101 - Jerônimo Medina MadrugaBackup 101 - Jerônimo Medina Madruga
Backup 101 - Jerônimo Medina Madruga
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinada
 
TDC2016POA | Trilha Python - Heimdall Guard - Spam Filter
TDC2016POA | Trilha Python - Heimdall Guard - Spam FilterTDC2016POA | Trilha Python - Heimdall Guard - Spam Filter
TDC2016POA | Trilha Python - Heimdall Guard - Spam Filter
 
Explorando protocolos de serialização de alto desempenho
Explorando protocolos de serialização de alto desempenhoExplorando protocolos de serialização de alto desempenho
Explorando protocolos de serialização de alto desempenho
 
A Arte do Deployment - WebDevCamp
A Arte do Deployment - WebDevCampA Arte do Deployment - WebDevCamp
A Arte do Deployment - WebDevCamp
 
Trabalhando com Módulos no Puppet
Trabalhando com Módulos no PuppetTrabalhando com Módulos no Puppet
Trabalhando com Módulos no Puppet
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedores
 
Atendendo Milhares de Requisições com o Play Framework 2 - v2
Atendendo Milhares de Requisições com o Play Framework 2 - v2Atendendo Milhares de Requisições com o Play Framework 2 - v2
Atendendo Milhares de Requisições com o Play Framework 2 - v2
 
Lua em transmissões ao vivo
Lua em transmissões ao vivoLua em transmissões ao vivo
Lua em transmissões ao vivo
 
Lidando com operações assíncronas no redux com redux saga
Lidando com operações assíncronas no redux com redux sagaLidando com operações assíncronas no redux com redux saga
Lidando com operações assíncronas no redux com redux saga
 
Testes e depuração de código com Python
Testes e depuração de código com PythonTestes e depuração de código com Python
Testes e depuração de código com Python
 
Ferramentas para infraestrutura ágil
Ferramentas para infraestrutura ágilFerramentas para infraestrutura ágil
Ferramentas para infraestrutura ágil
 
1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...
1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...
1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...
 
Como se tornar um viciado em performance em 5 passos
Como se tornar um viciado em performance em 5 passosComo se tornar um viciado em performance em 5 passos
Como se tornar um viciado em performance em 5 passos
 
Roteiro vsftpd
Roteiro vsftpdRoteiro vsftpd
Roteiro vsftpd
 
Sessões (in portuguese)
Sessões (in portuguese)Sessões (in portuguese)
Sessões (in portuguese)
 
Isolamento e mvcc
Isolamento e mvccIsolamento e mvcc
Isolamento e mvcc
 
Oficina de infraestrutura como código (apresentando o Puppet)
Oficina de infraestrutura como código (apresentando o Puppet)Oficina de infraestrutura como código (apresentando o Puppet)
Oficina de infraestrutura como código (apresentando o Puppet)
 
Deixando aplicações Laravel mais rápidas
Deixando aplicações Laravel mais rápidasDeixando aplicações Laravel mais rápidas
Deixando aplicações Laravel mais rápidas
 

Semelhante a Alta Concorrência com Postgres

Fazendo uma manada de elefantes passar por baixo da porta
Fazendo uma manada de elefantes passar por baixo da portaFazendo uma manada de elefantes passar por baixo da porta
Fazendo uma manada de elefantes passar por baixo da portaFabio Telles Rodriguez
 
Valdir Adorni - Infra and S.A.N Assessment Integration Sample
Valdir Adorni - Infra and S.A.N Assessment Integration SampleValdir Adorni - Infra and S.A.N Assessment Integration Sample
Valdir Adorni - Infra and S.A.N Assessment Integration SampleValdir Adorni
 
PostgreSQL Transformando um elefante numa manada
PostgreSQL Transformando um elefante numa manadaPostgreSQL Transformando um elefante numa manada
PostgreSQL Transformando um elefante numa manadaFabio Telles Rodriguez
 
Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...
Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...
Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...Joao Galdino Mello de Souza
 
IntroduçãO Ao Desenvolvimento Web 2
IntroduçãO Ao Desenvolvimento Web   2IntroduçãO Ao Desenvolvimento Web   2
IntroduçãO Ao Desenvolvimento Web 2Maurício Linhares
 
Alta disponibilidade em ambiente GNU/Linux
Alta disponibilidade em ambiente GNU/LinuxAlta disponibilidade em ambiente GNU/Linux
Alta disponibilidade em ambiente GNU/LinuxMario Bittencourt
 
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM BrasilBehind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM BrasilJoao Galdino Mello de Souza
 
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na WebMeritt - Cada Aluno é Único
 
Apresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQLApresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQLJohnes Castro
 
Sessão Avançada: Amazon Aurora - DAT302 - Sao Paulo Summit
Sessão Avançada: Amazon Aurora -  DAT302 - Sao Paulo SummitSessão Avançada: Amazon Aurora -  DAT302 - Sao Paulo Summit
Sessão Avançada: Amazon Aurora - DAT302 - Sao Paulo SummitAmazon Web Services
 
Desenvolva rapidamente utilizando o framework Desenvolva rapidamente utiliz...
Desenvolva rapidamente
utilizando o framework
Desenvolva rapidamente utiliz...Desenvolva rapidamente
utilizando o framework
Desenvolva rapidamente utiliz...
Desenvolva rapidamente utilizando o framework Desenvolva rapidamente utiliz...Renato Shirakashi
 
Escalabilidade via Software no ExpressoV3
Escalabilidade via Software no ExpressoV3Escalabilidade via Software no ExpressoV3
Escalabilidade via Software no ExpressoV3Flávio Lisboa
 
Z13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos OrsoniZ13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos OrsoniJoao Galdino Mello de Souza
 
Petic Emgetis Final
Petic Emgetis FinalPetic Emgetis Final
Petic Emgetis Finalnetimba
 
Performance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MXPerformance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MXAlex Hübner
 
Estudo de Planejamento e Performance na consolidação de CECs Mainframe. Gusta...
Estudo de Planejamento e Performance na consolidação de CECs Mainframe. Gusta...Estudo de Planejamento e Performance na consolidação de CECs Mainframe. Gusta...
Estudo de Planejamento e Performance na consolidação de CECs Mainframe. Gusta...Joao Galdino Mello de Souza
 

Semelhante a Alta Concorrência com Postgres (20)

Fazendo uma manada de elefantes passar por baixo da porta
Fazendo uma manada de elefantes passar por baixo da portaFazendo uma manada de elefantes passar por baixo da porta
Fazendo uma manada de elefantes passar por baixo da porta
 
Alta Concorrência com Postgres
Alta Concorrência com PostgresAlta Concorrência com Postgres
Alta Concorrência com Postgres
 
Valdir Adorni - Infra and S.A.N Assessment Integration Sample
Valdir Adorni - Infra and S.A.N Assessment Integration SampleValdir Adorni - Infra and S.A.N Assessment Integration Sample
Valdir Adorni - Infra and S.A.N Assessment Integration Sample
 
Conceitoseaplicaes
ConceitoseaplicaesConceitoseaplicaes
Conceitoseaplicaes
 
PostgreSQL Transformando um elefante numa manada
PostgreSQL Transformando um elefante numa manadaPostgreSQL Transformando um elefante numa manada
PostgreSQL Transformando um elefante numa manada
 
Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...
Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...
Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...
 
IntroduçãO Ao Desenvolvimento Web 2
IntroduçãO Ao Desenvolvimento Web   2IntroduçãO Ao Desenvolvimento Web   2
IntroduçãO Ao Desenvolvimento Web 2
 
Alta disponibilidade em ambiente GNU/Linux
Alta disponibilidade em ambiente GNU/LinuxAlta disponibilidade em ambiente GNU/Linux
Alta disponibilidade em ambiente GNU/Linux
 
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM BrasilBehind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
 
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
 
Apresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQLApresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQL
 
Sessão Avançada: Amazon Aurora - DAT302 - Sao Paulo Summit
Sessão Avançada: Amazon Aurora -  DAT302 - Sao Paulo SummitSessão Avançada: Amazon Aurora -  DAT302 - Sao Paulo Summit
Sessão Avançada: Amazon Aurora - DAT302 - Sao Paulo Summit
 
Desenvolva rapidamente utilizando o framework Desenvolva rapidamente utiliz...
Desenvolva rapidamente
utilizando o framework
Desenvolva rapidamente utiliz...Desenvolva rapidamente
utilizando o framework
Desenvolva rapidamente utiliz...
Desenvolva rapidamente utilizando o framework Desenvolva rapidamente utiliz...
 
Escalabilidade via Software no ExpressoV3
Escalabilidade via Software no ExpressoV3Escalabilidade via Software no ExpressoV3
Escalabilidade via Software no ExpressoV3
 
Z13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos OrsoniZ13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
 
Petic Emgetis Final
Petic Emgetis FinalPetic Emgetis Final
Petic Emgetis Final
 
Performance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MXPerformance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MX
 
No sql std
No sql stdNo sql std
No sql std
 
Mulesoft Meetup Latam Summit Brazil
Mulesoft Meetup Latam Summit BrazilMulesoft Meetup Latam Summit Brazil
Mulesoft Meetup Latam Summit Brazil
 
Estudo de Planejamento e Performance na consolidação de CECs Mainframe. Gusta...
Estudo de Planejamento e Performance na consolidação de CECs Mainframe. Gusta...Estudo de Planejamento e Performance na consolidação de CECs Mainframe. Gusta...
Estudo de Planejamento e Performance na consolidação de CECs Mainframe. Gusta...
 

Mais de Fabio Telles Rodriguez

Data Hero: Sua carreira na área de dados
Data Hero: Sua carreira na área de dadosData Hero: Sua carreira na área de dados
Data Hero: Sua carreira na área de dadosFabio Telles Rodriguez
 
Aplicações 10x a 100x mais rápida com o postgre sql
Aplicações 10x a 100x mais rápida com o postgre sqlAplicações 10x a 100x mais rápida com o postgre sql
Aplicações 10x a 100x mais rápida com o postgre sqlFabio Telles Rodriguez
 
Migre seu banco de dados para a nuvem. Pergunte-me como!
Migre seu banco de dados para a nuvem. Pergunte-me como!Migre seu banco de dados para a nuvem. Pergunte-me como!
Migre seu banco de dados para a nuvem. Pergunte-me como!Fabio Telles Rodriguez
 
Postgres Wonderland - Campus Party 2013
Postgres Wonderland - Campus Party 2013Postgres Wonderland - Campus Party 2013
Postgres Wonderland - Campus Party 2013Fabio Telles Rodriguez
 
Postgres Wonderland - PGDay Cascavél 2013
Postgres Wonderland - PGDay Cascavél 2013Postgres Wonderland - PGDay Cascavél 2013
Postgres Wonderland - PGDay Cascavél 2013Fabio Telles Rodriguez
 
Tutorial para criação de módulo no Xoops 2.4
Tutorial para criação de módulo no Xoops 2.4Tutorial para criação de módulo no Xoops 2.4
Tutorial para criação de módulo no Xoops 2.4Fabio Telles Rodriguez
 

Mais de Fabio Telles Rodriguez (20)

Data Hero: Sua carreira na área de dados
Data Hero: Sua carreira na área de dadosData Hero: Sua carreira na área de dados
Data Hero: Sua carreira na área de dados
 
Postgres level up
Postgres level upPostgres level up
Postgres level up
 
Explain this!
Explain this!Explain this!
Explain this!
 
High concurrency with Postgres
High concurrency with PostgresHigh concurrency with Postgres
High concurrency with Postgres
 
Aplicações 10x a 100x mais rápida com o postgre sql
Aplicações 10x a 100x mais rápida com o postgre sqlAplicações 10x a 100x mais rápida com o postgre sql
Aplicações 10x a 100x mais rápida com o postgre sql
 
Novidades do PostgreSQL 10
Novidades do  PostgreSQL 10Novidades do  PostgreSQL 10
Novidades do PostgreSQL 10
 
Migre seu banco de dados para a nuvem. Pergunte-me como!
Migre seu banco de dados para a nuvem. Pergunte-me como!Migre seu banco de dados para a nuvem. Pergunte-me como!
Migre seu banco de dados para a nuvem. Pergunte-me como!
 
Oracle x PostgreSQL
Oracle x PostgreSQLOracle x PostgreSQL
Oracle x PostgreSQL
 
PostgreSQL Wonderland TDC-SP 2015
PostgreSQL Wonderland TDC-SP 2015PostgreSQL Wonderland TDC-SP 2015
PostgreSQL Wonderland TDC-SP 2015
 
Postgres Chainsaw Massacre
Postgres Chainsaw MassacrePostgres Chainsaw Massacre
Postgres Chainsaw Massacre
 
Postgres Wonderland - PGDay CE2013
Postgres  Wonderland - PGDay CE2013Postgres  Wonderland - PGDay CE2013
Postgres Wonderland - PGDay CE2013
 
Postgres Wonderland - Campus Party 2013
Postgres Wonderland - Campus Party 2013Postgres Wonderland - Campus Party 2013
Postgres Wonderland - Campus Party 2013
 
Postgres, a "Metamorfose Ambulante"
Postgres, a "Metamorfose Ambulante"Postgres, a "Metamorfose Ambulante"
Postgres, a "Metamorfose Ambulante"
 
Postgres Wonderland - PGDay Cascavél 2013
Postgres Wonderland - PGDay Cascavél 2013Postgres Wonderland - PGDay Cascavél 2013
Postgres Wonderland - PGDay Cascavél 2013
 
Discos & Cia em PostgreSQL
Discos & Cia em PostgreSQLDiscos & Cia em PostgreSQL
Discos & Cia em PostgreSQL
 
Conceitos E Aplicações
Conceitos E AplicaçõesConceitos E Aplicações
Conceitos E Aplicações
 
PostgreSQL, o Elefante Encouraçado
PostgreSQL, o Elefante EncouraçadoPostgreSQL, o Elefante Encouraçado
PostgreSQL, o Elefante Encouraçado
 
Tutorial para criação de módulo no Xoops 2.4
Tutorial para criação de módulo no Xoops 2.4Tutorial para criação de módulo no Xoops 2.4
Tutorial para criação de módulo no Xoops 2.4
 
Revisão do postgresql.conf
Revisão do postgresql.confRevisão do postgresql.conf
Revisão do postgresql.conf
 
Storage em Oracle RAC
Storage em Oracle RACStorage em Oracle RAC
Storage em Oracle RAC
 

Alta Concorrência com Postgres

  • 1. Alta concorrˆncia com PostgreSQL e ou Fazendo uma manada de elefantes passar debaixo da porta F´bio Telles Rodriguez a Timbira - A empresa brasileira de PostgreSQL 09 de novembro de 2012
  • 2. Agenda Sobre o que estamos falando? Poss´ ıveis solu¸˜es co Considera¸˜es finais co Perguntas
  • 3. Sobre esta apresenta¸˜o ca esta apresenta¸˜o est´ dispon´ em: ca a ıvel http://www.timbira.com.br/material esta apresenta¸˜o est´ sob licen¸a Creative Commons ca a c Atribui¸˜o 3.0 Brasil: ca http://creativecommons.org/licenses/by/3.0/br
  • 4. Sobre o que estamos falando? Figura: Metrˆ - SP / Esta¸˜o S´ o ca e
  • 5. Sobre o que estamos falando? Aplica¸oes OLTP com alta concorrˆncia: c˜ e Milhares de conex˜es simultˆneas; o a V´rios usu´rios realizando grava¸˜es nas mesmas tabelas; a a co V´rias usu´rios consultando informa¸˜es que acabaram de ser a a co gravadas; Cada usu´rio deve ser atendido em tempo h´bil; a a Crescimento de v´rios GBs por dia. a
  • 6. Tratamento Multi Documentos - TMD Tratamento de imagens descentralizado em ambiente bancario: Crescimento de 5GB a 20GB por dia; At´ 2 milh˜es documentos tratados por dia; e o Mais de 5 mil agˆncias com 10 mil esta¸˜es de captura. e co Pool de 25 servidores com complementa¸˜o autom´tica; ca a Mais de 500 esta¸˜es de complementa¸˜o manual; co ca Centenas de regras de neg´cio aplicadas para diversos tipos de o documento em diversas etapas (workflow); Troca de informa¸˜es em lote com Mainframe; co Troca de informa¸˜es em XML com outros sistemas legados; co Exporta¸˜o de arquivos de sa´ ca ıda. TUDO AO MESMO TEMPO, com janela de 6 horas de processamento.
  • 7. Gargalo de CPU Figura: Trem em Mulan - Paquist˜o a
  • 8. Gargalo de CPU SO n˜o trabalha bem com mais de 700 processos simultˆneos; a a O custo para gerenciar a fila de espera s´ aumenta o o problema; Cada conex˜o precisa de mem´ria, keep alive pela rede e a o semaforiza¸˜o; ca O n´mero de conex˜es ativas no SGDB deve ficar na ´rdem u o o de 2 para cada core; Aplica¸˜es server podem utilizar conex˜es persistentes... co o ˜ ... as aplica¸˜es client NAO; co
  • 9. Lock Inferno Figura: Cruzamento das Avenidas Faria Lima com a Juscelino Kubitschek
  • 10. Problemas com a modelagem Modelagem de dados ruim pode levar anos para revelar um resultado ruim. Leva horas para mostrar a cat´strofe em alta concorrˆncia; a e
  • 11. Agenda Sobre o que estamos falando? Poss´ ıveis solu¸˜es co Considera¸˜es finais co Perguntas
  • 12. Controlando o n´mero de conex˜es u o PGBouncer: 1 Pool de conex˜es para transa¸˜es no modo transaction; o co 1 Pool de conex˜es para consultas no modo statement; o Aumento na eficiencia do processador, fila de espera das transa¸˜es diminui; co PGmemcache Replicas de dados do PostgreSQL para SQLite nas esta¸˜es co utiliza memcache; Um gatilho nas tabelas replicadas atualiza o n´mero de vers˜o u a do cache; Ao solicitar uma r´plica, a esta¸˜o compara a sua vers˜o da e ca a tabela com a vers˜o do cache; a Poderia ser implementado com Listem / Notify
  • 13. Locks S´ abra uma transa¸˜o, se realmente precisar; o ca Saiba quando abrir e quando fechar uma transa¸˜o; N˜o se ca a perca na aplica¸˜o; ca Se abrir, feche logo. N˜o espere eventos for a do SGDB para a fechar sua transa¸˜o; ca N˜o utilize SELECT ... FOR UPDATE; a N˜o utilize LOCKs expl´ a ıcitos. Tire proveito do MVCC; DEAD LOCK s˜o problemas de l´gica da aplica¸˜o. Altere a a o ca l´gica dela; o
  • 14. Ajustes de Hardware CPU r´pida ´ menos importante que ter muitos cores; a e Muita mem´ria RAM para manter um n´mer alto de o u conex˜es; o Use cache de disco para suportar um grande volume de grava¸˜es concorrentes; co Discos r´pidos e separados para o pg xlog ´ imprecind´ a e ıvel;
  • 15. Ajustes no SO (Linux) /etc/sysctl.conf kernel.shmmax (25% da RAM dispon´ ıvel) Sem´foros (para suportar um n´mero alto de conex˜es) a u o file-max overcommit /etc/security/limits.conf nproc nofile /etc/fstab noatime para os dados noatime + writeback para o pg xlog
  • 16. Ajustes no PostgreSQL max connections O menor n´mero vi´vel; u a Fa¸a o poss´ para diminuir este valor para menos de 500; c ıvel pg hba.conf Limite ao m´ximo a origem das suas conex˜es; a o Limite os usu´rios e bases que eles v˜o se conectar; a a Rejeite usu´rios, grupos e redes desconhecidos; a
  • 17. Ajustes no PostgreSQL shared buffers < 8GB ou 20% da RAM dispon´ (o que for maior); ıvel autovacuum em tabelas que sofrem cargas pesadas em lote, desligue; Mem´ria por processo o temp buffer < 16MB work mem < 16MB Ajuste individualmente conex˜es espec´ o ıficas; checkpoint segments Aumente para pelo menos 16 Limite de acordo com tempo que o recover pode levar
  • 18. Acerte a sua modelagem Use o tipo de dados certo para a tarefa certa; Use chaves naturais; N˜o use campos flex; a Para dados n˜o estruturados, vocˆ tem hstore, vetores e tipos a e compostos; Use ´ ındices e gatilhos com sabedoria (teste e monitore o seu uso); Pilhas e filas n˜o devem ficar no seu SGDB; a
  • 19. Escrevendo SQL Jamais utilize uma fun¸˜o em PL para algo que um SQL puro ca consegue fazer; COMMIT a cada X altera¸˜es. X > 100 e < 100K; co Se uma consulta retorna mais de 100 registros, reveja a regra de neg´cio; o INSERT < INSERT multiplo < PREPARE e EXECUTE < COPY < INSERT ... SELECT Aprenda a usar subconsultas e window functions e Common Table Expression; Relat´rios pesados devem utilizar vis˜es materializadas. o o
  • 20. Agenda Sobre o que estamos falando? Poss´ ıveis solu¸˜es co Considera¸˜es finais co Perguntas
  • 21. Testes Teste as funcionalidades Teste com volumes de dados o mais realistas poss´ ıvel Teste com carga de concorrˆncia o mais realista poss´ e ıvel
  • 22. Rollout Como testes com volume de dados e concorrˆncia nunca s˜o e a bons... Fa¸a o deploy de poucas funcionalidades por vˆz; c e Adicione novos usu´rios aos poucos; a Esteja preparado para o caos durante o rollout; N˜o tente matar mais de um le˜o por dia; a a O rollout de uma unica parte do sistema pode levar meses; ´
  • 23. Monitoramento Monitore o SO, o PostgreSQL, a aplica¸˜o; ca Gere logs que mostrem a opera¸˜o e a dura¸˜o de cada a¸˜o; ca ca ca Gere logs em formatos que possam ser manipulados por ferramentas automatizadas; Aprenda a configurar o log do PostgreSQL e o PGBadger; Fa¸a coletas peri´dicas e armazene tudo em um local central; c o Crie baselines e compare sempre com elas;
  • 24. Para os DBAs... Durma bem antes de um novo deploy. Tire uns dias de folga; N˜o deixe de tomar cerveja com os amigos... a Pratique exerc´ ıcios f´ ısicos regularmente!!!
  • 25. Perguntas ? F´bio Telles Rodriguez a telles@timbira.com.br http://www.timbira.com.br