SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
Alta concorrência com
     PostgreSQL




                  18 de Outubro de 2012   Fábio Telles Rodriguez



©Bull 2012                                                     1
Alta concorrência com
     PostgreSQL ou
     “Fazendo uma manada de elefantes
     passarem debaixo da porta”




©Bull 2012                              2
Bull França




                   9º Lugar no top500.org
                   1º Lugar na Europa




©Bull 2012                                  3
Sobre o que estamos falando?




                    Metrô-SP / Estação SÉ




©Bull 2012                                  4
Sobre o que estamos falando?

         Aplicações OLTP com alta concorrência:
             Milhares de conexões simultâneas
             Vários usuários realizando gravações nas mesmas tabelas;
             Várias usuários consultando informações que acabaram
             de ser gravadas;
             Cada usuário deve ser atendido em tempo hábil;
             Crescimento de vários GBs por dia.




©Bull 2012                                                              5
Tratamento Multi Documentos - TMD

         Tratamento de imagens decentralizado em
         ambiente bancário:
             Crescimento de até 50GB por dia;
             Até 2 milhões documentos tratados por dia;
             Mais de 5 mil agências com 10 mil estações de captura.
             Pool de 25 servidores com complementação automática;
             Mais de 500 estações de complementação manual;
             Centenas de regras de negócio aplicadas para diversos
             tipos de documento em diversas etapas (workflow);
             Troca de informações em lote com Mainframe;
             Troca de informações em XML com outros sistemas
             legados;
             Exportação de arquivos de saída.
         TUDO AO MESMO TEMPO, com janela de 6 horas
         de processamento.
©Bull 2012                                                            6
Gargalo de CPU




                  Trem em Mulan - Paquistão




©Bull 2012                                    7
Gargalo de CPU

          SO não trabalha bem com mais de 700 processos
         simultâneos;
          O custo para gerenciar a fila de espera de CPU só
         aumenta o problema;
          Cada conexão precisa de memória alocada, sinais
         de keep alive pela rede e semaforização;
          Mantenha o volume de conexões no SGDB na
         órdem de 2 para cada core;
          Aplicações server podem utilizar conexões
         persistentes, aplicações client NÃO.




©Bull 2012                                                    8
Gargalo de CPU

         PGBouncer:
             1 Pool de conexões para transações utilizando o modo
             transaction
             1 Pool de conexões para consultas no modo statement;
             Com o aumento na eficiencia do processador, a fila de
             espera das transações diminuiu de 2000 para 10.
         PGmemcache
             Replicas de dados do PostgreSQL para SQLite nas
             estações utiliza memcache;
             Um gatilho nas tabelas replicadas atualiza o número de
             versão do cache;
             Ao solicitar uma réplica, a estação compara a sua versão
             da tabela com a versão do cache;



©Bull 2012                                                              9
Locks




             Cruzamento das Avenidas Faria Lima com a Juscelino
                         Kubitschek em São Paulo.




©Bull 2012                                                        10
Locks

         Só abra uma transação, se realmente prcisar;
         Saiba quando abrir e quando fechar uma
         transação; Não se perca na aplicação;
         Se abrir, feche logo. Não espere eventos for a do
         SGDB para fechar sua transação;
         Não utilize SELECT … FOR UPDATE;
         Não utilize LOCKs explícitos. Tire proveito do
         MVCC;
         DEAD LOCK são problemas de lógica da aplicação.
         Se eles aparecem, altere radicalmente a lógica
         dela;



©Bull 2012                                                   11
Ajustes de hardware

         Ter a CPU mais rápida é menos importante que ter
         muitos cores;
         Você precisa de muita memória RAM para manter
         um númer alto de conexões;
         Cache de disco é fundamental para suportar um
         grande volume de gravações concorrentes;
         Discos rápidos e separados para o pg_xlog é
         imprecindível;




©Bull 2012                                                  12
Ajustes no SO (Linux)

         /etc/sysctl.conf
             Kernel.shmmax (¼ da RAM disponível)
             Semáforos (para suportar um número alto de conexões)
             File-max
             Overcommit
         /etc/security/limits.conf
             Nproc
             Nofile
         /etc/fstab
             Noatime para os dados
             Noatime + writeback para o pg_xlog




©Bull 2012                                                          13
Ajustes no PostgreSQL

         max_connections
             O menor número viável;
             Faça o possível e o impossível para diminuir este valor
             para menos de 500;
         pg_hba.conf
             Limite ao máximo de ONDE as suas conexões vem;
             Limite os usuários e bases que eles vão se conectar;
             Rejeite usuários, grupos e redes desconhecidos;




©Bull 2012                                                             14
Ajustes no PostgreSQL
         Seja modesto com o shared buffers
             shared_buffer < 8GB ou 1/6 da RAM disponível (o que for
             maior);
         Ajuste o autovacuum cuidadoramente;
             desligue e faça manualmente em cargas pesadas;
         Limite bem a memória por processo:
             temp_buffer < 16MB
             work_mem < 16MB
             Ajuste individualmente conexões específicas;
         Aumente o checkpoint_segments
             Ajuste de acordo com o limite que o recover pode levar




©Bull 2012                                                             15
Acerte a sua modelagem



             Modelagem de dados ruim pode levar anos para
                     revelar um resultado ruim.

              Leva horas para mostrar a catástrofe em alta
                             concorrência;




©Bull 2012                                                   16
Acerte sua modelagem

         Use o tipo de dados certo para a tarefa certa;
         Use chaves naturais;
         Para dados não estruturados, você tem hstore,
         vetores e tipos compostos;
             Não use campos flex;
         Use índices e gatilhos com sabedoria;
             Teste e monitore o seu uso;
         Pilhas e filhas não devem ficar no seu SGDB;




©Bull 2012                                                17
DML

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



©Bull 2012                                                  18
Fábio Telles Rodriguez
             fabio.rodriguez@lam-bull.com
                fabio.telles@gmail.com




©Bull 2012                                  19

Mais conteúdo relacionado

Mais procurados

Análise de Performance do MySQL e MariaDB
Análise de Performance do MySQL e MariaDBAnálise de Performance do MySQL e MariaDB
Análise de Performance do MySQL e MariaDBSaveincloud
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endMario Guedes
 
Aplicando processamento paralelo em instruções SQL
Aplicando processamento paralelo em instruções SQLAplicando processamento paralelo em instruções SQL
Aplicando processamento paralelo em instruções SQLpichiliani
 

Mais procurados (6)

PostgreSQL Ha
PostgreSQL HaPostgreSQL Ha
PostgreSQL Ha
 
Análise de Performance do MySQL e MariaDB
Análise de Performance do MySQL e MariaDBAnálise de Performance do MySQL e MariaDB
Análise de Performance do MySQL e MariaDB
 
PostgreSQL Rock Star
PostgreSQL Rock StarPostgreSQL Rock Star
PostgreSQL Rock Star
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
 
Aplicando processamento paralelo em instruções SQL
Aplicando processamento paralelo em instruções SQLAplicando processamento paralelo em instruções SQL
Aplicando processamento paralelo em instruções SQL
 
Spring Rest
Spring RestSpring Rest
Spring Rest
 

Semelhante a Alta concorrência PostgreSQL

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
 
Bancos de Dados em “Clouds”
Bancos de Dados em “Clouds”Bancos de Dados em “Clouds”
Bancos de Dados em “Clouds”elliando dias
 
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
 
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Vinicius Pulgatti
 
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
 
Bancos de dados móveis
Bancos de dados móveisBancos de dados móveis
Bancos de dados móveisUFMA
 
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
 
Melhores práticas de deployment do IBM Connections
Melhores práticas de deployment do IBM ConnectionsMelhores práticas de deployment do IBM Connections
Melhores práticas de deployment do IBM Connectionsrodrigoareis
 
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
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalierGleicon Moraes
 
Big data da teoria à prática
Big data  da teoria à práticaBig data  da teoria à prática
Big data da teoria à práticaMario Guedes
 
Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010Maurício Linhares
 
Desenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDesenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDenis Vieira
 
Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Claudio Miranda
 
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFabio Telles Rodriguez
 
Cloud PostgreSQL em alta performance
Cloud PostgreSQL em alta performanceCloud PostgreSQL em alta performance
Cloud PostgreSQL em alta performanceSaveincloud
 
Fazendo Um Elefante Passar Debaixo da Porta - PGCon-BR
Fazendo Um Elefante Passar Debaixo da Porta - PGCon-BRFazendo Um Elefante Passar Debaixo da Porta - PGCon-BR
Fazendo Um Elefante Passar Debaixo da Porta - PGCon-BRFabio Telles Rodriguez
 

Semelhante a Alta concorrência PostgreSQL (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
 
Pgbr2013
Pgbr2013Pgbr2013
Pgbr2013
 
Bancos de Dados em “Clouds”
Bancos de Dados em “Clouds”Bancos de Dados em “Clouds”
Bancos de Dados em “Clouds”
 
B Ds Clouds
B Ds CloudsB Ds Clouds
B Ds Clouds
 
Performance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MXPerformance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MX
 
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
 
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
 
Bancos de dados móveis
Bancos de dados móveisBancos de dados móveis
Bancos de dados móveis
 
IntroduçãO Ao Desenvolvimento Web 2
IntroduçãO Ao Desenvolvimento Web   2IntroduçãO Ao Desenvolvimento Web   2
IntroduçãO Ao Desenvolvimento Web 2
 
Melhores práticas de deployment do IBM Connections
Melhores práticas de deployment do IBM ConnectionsMelhores práticas de deployment do IBM Connections
Melhores práticas de deployment do IBM Connections
 
PostgreSQL Transformando um elefante numa manada
PostgreSQL Transformando um elefante numa manadaPostgreSQL Transformando um elefante numa manada
PostgreSQL Transformando um elefante numa manada
 
Apostila oracle
Apostila oracleApostila oracle
Apostila oracle
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalier
 
Big data da teoria à prática
Big data  da teoria à práticaBig data  da teoria à prática
Big data da teoria à prática
 
Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010
 
Desenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDesenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full Javascript
 
Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7
 
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
 
Cloud PostgreSQL em alta performance
Cloud PostgreSQL em alta performanceCloud PostgreSQL em alta performance
Cloud PostgreSQL em alta performance
 
Fazendo Um Elefante Passar Debaixo da Porta - PGCon-BR
Fazendo Um Elefante Passar Debaixo da Porta - PGCon-BRFazendo Um Elefante Passar Debaixo da Porta - PGCon-BR
Fazendo Um Elefante Passar Debaixo da Porta - PGCon-BR
 

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 Big data
Postgres Big dataPostgres Big data
Postgres Big data
 
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
 

Alta concorrência PostgreSQL

  • 1. Alta concorrência com PostgreSQL 18 de Outubro de 2012 Fábio Telles Rodriguez ©Bull 2012 1
  • 2. Alta concorrência com PostgreSQL ou “Fazendo uma manada de elefantes passarem debaixo da porta” ©Bull 2012 2
  • 3. Bull França 9º Lugar no top500.org 1º Lugar na Europa ©Bull 2012 3
  • 4. Sobre o que estamos falando? Metrô-SP / Estação SÉ ©Bull 2012 4
  • 5. Sobre o que estamos falando? Aplicações OLTP com alta concorrência: Milhares de conexões simultâneas Vários usuários realizando gravações nas mesmas tabelas; Várias usuários consultando informações que acabaram de ser gravadas; Cada usuário deve ser atendido em tempo hábil; Crescimento de vários GBs por dia. ©Bull 2012 5
  • 6. Tratamento Multi Documentos - TMD Tratamento de imagens decentralizado em ambiente bancário: Crescimento de até 50GB por dia; Até 2 milhões documentos tratados por dia; Mais de 5 mil agências com 10 mil estações de captura. Pool de 25 servidores com complementação automática; Mais de 500 estações de complementação manual; Centenas de regras de negócio aplicadas para diversos tipos de documento em diversas etapas (workflow); Troca de informações em lote com Mainframe; Troca de informações em XML com outros sistemas legados; Exportação de arquivos de saída. TUDO AO MESMO TEMPO, com janela de 6 horas de processamento. ©Bull 2012 6
  • 7. Gargalo de CPU Trem em Mulan - Paquistão ©Bull 2012 7
  • 8. Gargalo de CPU SO não trabalha bem com mais de 700 processos simultâneos; O custo para gerenciar a fila de espera de CPU só aumenta o problema; Cada conexão precisa de memória alocada, sinais de keep alive pela rede e semaforização; Mantenha o volume de conexões no SGDB na órdem de 2 para cada core; Aplicações server podem utilizar conexões persistentes, aplicações client NÃO. ©Bull 2012 8
  • 9. Gargalo de CPU PGBouncer: 1 Pool de conexões para transações utilizando o modo transaction 1 Pool de conexões para consultas no modo statement; Com o aumento na eficiencia do processador, a fila de espera das transações diminuiu de 2000 para 10. PGmemcache Replicas de dados do PostgreSQL para SQLite nas estações utiliza memcache; Um gatilho nas tabelas replicadas atualiza o número de versão do cache; Ao solicitar uma réplica, a estação compara a sua versão da tabela com a versão do cache; ©Bull 2012 9
  • 10. Locks Cruzamento das Avenidas Faria Lima com a Juscelino Kubitschek em São Paulo. ©Bull 2012 10
  • 11. Locks Só abra uma transação, se realmente prcisar; Saiba quando abrir e quando fechar uma transação; Não se perca na aplicação; Se abrir, feche logo. Não espere eventos for a do SGDB para fechar sua transação; Não utilize SELECT … FOR UPDATE; Não utilize LOCKs explícitos. Tire proveito do MVCC; DEAD LOCK são problemas de lógica da aplicação. Se eles aparecem, altere radicalmente a lógica dela; ©Bull 2012 11
  • 12. Ajustes de hardware Ter a CPU mais rápida é menos importante que ter muitos cores; Você precisa de muita memória RAM para manter um númer alto de conexões; Cache de disco é fundamental para suportar um grande volume de gravações concorrentes; Discos rápidos e separados para o pg_xlog é imprecindível; ©Bull 2012 12
  • 13. Ajustes no SO (Linux) /etc/sysctl.conf Kernel.shmmax (¼ da RAM disponível) Semáforos (para suportar um número alto de conexões) File-max Overcommit /etc/security/limits.conf Nproc Nofile /etc/fstab Noatime para os dados Noatime + writeback para o pg_xlog ©Bull 2012 13
  • 14. Ajustes no PostgreSQL max_connections O menor número viável; Faça o possível e o impossível para diminuir este valor para menos de 500; pg_hba.conf Limite ao máximo de ONDE as suas conexões vem; Limite os usuários e bases que eles vão se conectar; Rejeite usuários, grupos e redes desconhecidos; ©Bull 2012 14
  • 15. Ajustes no PostgreSQL Seja modesto com o shared buffers shared_buffer < 8GB ou 1/6 da RAM disponível (o que for maior); Ajuste o autovacuum cuidadoramente; desligue e faça manualmente em cargas pesadas; Limite bem a memória por processo: temp_buffer < 16MB work_mem < 16MB Ajuste individualmente conexões específicas; Aumente o checkpoint_segments Ajuste de acordo com o limite que o recover pode levar ©Bull 2012 15
  • 16. Acerte a sua modelagem Modelagem de dados ruim pode levar anos para revelar um resultado ruim. Leva horas para mostrar a catástrofe em alta concorrência; ©Bull 2012 16
  • 17. Acerte sua modelagem Use o tipo de dados certo para a tarefa certa; Use chaves naturais; Para dados não estruturados, você tem hstore, vetores e tipos compostos; Não use campos flex; Use índices e gatilhos com sabedoria; Teste e monitore o seu uso; Pilhas e filhas não devem ficar no seu SGDB; ©Bull 2012 17
  • 18. DML COMMIT a cada X alterações. X > 100 e < 100K; Se uma consulta retorna mais de 100 registros, algo está errado, reveja a regra de negócio; INSERT < INSERT multiplo < PREPARE e EXECUTE < COPY < INSERT … SELECT Aprenda a usar subconsultas e window functions e Common Table Expression; Jamais utilize uma função em PL para algo que um SQL puro consegue fazer Relatórios pesados devem utilizar visões materializadas. ©Bull 2012 18
  • 19. Fábio Telles Rodriguez fabio.rodriguez@lam-bull.com fabio.telles@gmail.com ©Bull 2012 19