SlideShare une entreprise Scribd logo
1  sur  19
Télécharger pour lire hors ligne
PostgreSQL Tuning:
      O elefante mais rápido que
             um leopardo
                         por Fernando Ike




20 de julho de 2008
Equilíbrio Difícil
O banco está lento!
                                           Problemas comuns



• 60% dos problemas são relacionados ao mau uso da linguagem
  SQL;
• 20% dos problemas são relacionados a má modelagem do banco de
  dados;
• 10% dos problemas são relacionados a má configuração do SGDB;
10% dos problemas são relacionados a má configuração do SO.*
O banco está lento!
                                            Escolhas Erradas
• Concentração de regras de negócio na aplicação para processos em
  lote;
• Integridade referencial na aplicação
• Mal dimensionamento de I/O (CPU, Plataforma, Disco)
• Ambientes virtualizados (Vmware, XEN, etc..) em
  AMD64/EMT64
• Uso de configurações padrões do SO e/ou do PostgreSQL
Melhor Hardware


•   Servidores dedicados para o PostgreSQL
•   Storage com Fiber Channel e iSCSI: Grupos de RAID dedicados
•   RAID 5 ou 10: por Hardware
•   Mais memória! (Até 4GB em 32 bits)
•   Processadores de 64 bits: Performance até 3 vezes do que os 32
    bits (AMD64 e EMT64 - Intel)
Melhor SO

• Sistemas Operacionais *nix: Linux (Debian, Gentoo), FreeBSD,
  Solaris, etc
• Em Linux: use Sistemas de arquivos XFS (noatime), Ext3
  (writeback, noatime), Ext2
• Instale a última versão do PostgreSQL (atualmente 8.3) e à partir
  do código-fonte
• Não usar serviços concorrentes (Apache, MySQL, SAMBA...) em
  discos, semáforos e shared memory
• Usar, se possível, um kernel (linux) mais recente (e estável)
Parâmetros do SO
                                                Modificando o *nix


•   echo “2” > /proc/sys/vm/overcommit_memory
•   echo “25%” > /proc/sys/kernel/shmmax
•   echo “25%/64” > /proc/sys/kernel/shmall
•   echo “deadline” > /sys/block/sda/queue/scheduler
•   echo “250 32000 100 128” > /proc/sys/kernel/sem
•   echo “65536” > /proc/sys/fs/file-max
Parâmetros do SO
                                               Modificando o *nix


•   ethtool -s eth0 speed 1000 duplex full autoneg off
•   echo "16777216" > /proc/sys/net/core/rmem_default
•   echo "16777216" > /proc/sys/net/core/wmem_default
•   echo "16777216" > /proc/sys/net/core/wmem_max
•   echo "16777216" > /proc/sys/net/core/rmem_max
Parâmetros do SO
                                          Modificando o *nix
pmanson:~# su - postgres
postgres@pmanson:~$ ulimit 65535


                  /etc/security/limits.conf


postgres     soft nofile     4096
postgres     soft nproc      4096
postgres     hard nofile     63536
postgres     hard nproc      63536
Como organizar os Discos
                                               O Melhor I/O

• Discos ou partições distintos para:
   – Logs de transações (WAL)
   – Índices: Ext2
   – Tabelas (particionar tabelas grandes)
   – Tablespace temporário (em ambiente BI)*
   – Archives
   – SO + PostgreSQL
   – Log de Sistema
* Novo no PostgreSQL 8.3
postgresql.conf
                                                         Memória
•   max_connections: O menor número possível
•   shared buffers: 33% do total -> Para operações em execução
•   temp_buffers: Acesso às tabelas temporárias
•   work_mem: Para agregação, ordenação, consultas complexas
•   maintenance_work_mem: 75% da maior tabela ou índice
• max_fsm_pages: Máximo de páginas necessárias p/ mapear espaço
  livre. Importante para operações de UPDATE/DELETE.
postgresql.conf
                                                          Disco e Wal
• wal_sync_method: open_sync, fdatasync, open_datasync
• wal_buffers: tamanho do cache para gravação do WAL
• commit_delay: Permite efetivar várias transações na mesma chamada de fsync
• checkpoint_segments: tamanho do cache em disco para operações de escrita
• checkpoint_timeout: intervalo entre os checkpoints
• wal_buffers: 8192kB -> 16GB
• bgwriter: ?????
• join_collapse_limit = > 8
Tuning de SQL

• Analyze:
test_base=# EXPLAIN ANALYZE SELECT foo FROM bar;

• Ferramentas:
  – Pgfouine;
  – Pgadmin3;
  – PhpPgAdmin;
Manutenção
• Autovacuum X Vacuum: Depende do uso (Aplicações Web, OLTI,
  BI)
   – Vacuum:
      • vacuum_cost_delay: tempo de atraso para vacuum executar
        automaticamente nas tabelas grandes
   – Autovacuum (ativado por padrão a partir da versão
     8.3):
      • autovacuum_naptime: tempo de espera para execução do
        autovacuum.
Ferramentas de stress
• Pgbench: no diretório do contrib do PostgresSQL, padrão de
  transações do tipo TPC-B.
• DBT-2: Ferramenta da OSDL, padrão de transações do tipo TPC-
  C.
• BenchmarkSQL: Ferramenta Java para benchmark em SQL para
  vários banco de dados (JDBC), padrão de transações do tipo TPC-
  C.
• Jmeter: Ferramenta Java genérica para testes de stress, usado para
  aplicações (Web, ...) e também pode ser direto para um banco de
  dados.
Quando o tuning não resolve
• Escalabilidade vertical:
   – Mais e melhores discos;
   – Mais memória;
   – Melhor processador (quad core, 64bits)
• Escalabilidade horizontal:
   –   Pgpool I (distribuição de carga de leitura e pool de conexões)
   –   PgPool II (PgPool I + paralelização de grandes consultas)
   –   Slony I (Replicação Multi-Master Assíncrona)
   –   Warm Stand By/Log Shipping
   –   Pgbouncer + PL/Proxy + Slony
•   Documentação Oficial:                                                   Links
     http://www.postgresql.org/docs/
•   Power PostgreSQL:
     http://www.powerpostgresql.com/
•   PostgreSQL Brasil:
     http://www.postgresql.org.br
•   Teste de stress com soluções livres e proprietárias:
     http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=7053&pagina=5
•   Benchmark Brou-Ha-Ha
     http://blogs.ittoolbox.com/database/soup/archives/benchmark-brouhaha-17939
•   BenchmarkSQL, DBT-2 - SourceForge:
     http://www.sf.net
•   Jmeter
     http://jakarta.apache.org/jmeter/
Dúvidas
• Listas de discussão:
   – http://archives.postgresql.org/pgsql-performance/
   – https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-
     geral
• IRC irc.freenodes.net:
   – #POSTGRESQL
   – #POSTGRESQL-BR
Contato

• Fernando Ike
   – fernando.ike@b2br.com.br
   – fernando.ike@gmail.com
   – http://www.midstorm.org/~fike/weblog

Contenu connexe

Tendances

Gerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanGerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanJuliano Atanazio
 
OpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpen Gurukul
 
Best Practices – Extreme Performance with Data Warehousing on Oracle Database
Best Practices – Extreme Performance with Data Warehousing on Oracle DatabaseBest Practices – Extreme Performance with Data Warehousing on Oracle Database
Best Practices – Extreme Performance with Data Warehousing on Oracle DatabaseEdgar Alejandro Villegas
 
PostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesPostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesFernando Ike
 
PostgreSQL + ZFS best practices
PostgreSQL + ZFS best practicesPostgreSQL + ZFS best practices
PostgreSQL + ZFS best practicesSean Chittenden
 
PostgreSQL Database Slides
PostgreSQL Database SlidesPostgreSQL Database Slides
PostgreSQL Database Slidesmetsarin
 
Banco de Dados - Transações e Controle de Concorrência
Banco de Dados - Transações e Controle de ConcorrênciaBanco de Dados - Transações e Controle de Concorrência
Banco de Dados - Transações e Controle de ConcorrênciaJuliano Padilha
 
ProxySQL - High Performance and HA Proxy for MySQL
ProxySQL - High Performance and HA Proxy for MySQLProxySQL - High Performance and HA Proxy for MySQL
ProxySQL - High Performance and HA Proxy for MySQLRené Cannaò
 
EXPLicando o Explain no PostgreSQL
EXPLicando o Explain no PostgreSQLEXPLicando o Explain no PostgreSQL
EXPLicando o Explain no PostgreSQLFabrízio Mello
 
Migrating from InnoDB and HBase to MyRocks at Facebook
Migrating from InnoDB and HBase to MyRocks at FacebookMigrating from InnoDB and HBase to MyRocks at Facebook
Migrating from InnoDB and HBase to MyRocks at FacebookMariaDB plc
 
Sql server performance tuning
Sql server performance tuningSql server performance tuning
Sql server performance tuningJugal Shah
 
Kevin Kempter PostgreSQL Backup and Recovery Methods @ Postgres Open
Kevin Kempter PostgreSQL Backup and Recovery Methods @ Postgres OpenKevin Kempter PostgreSQL Backup and Recovery Methods @ Postgres Open
Kevin Kempter PostgreSQL Backup and Recovery Methods @ Postgres OpenPostgresOpen
 
MySQL Storage Engines
MySQL Storage EnginesMySQL Storage Engines
MySQL Storage EnginesKarthik .P.R
 
Escalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool IIEscalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool IIMatheus Espanhol
 
Low Level CPU Performance Profiling Examples
Low Level CPU Performance Profiling ExamplesLow Level CPU Performance Profiling Examples
Low Level CPU Performance Profiling ExamplesTanel Poder
 
MySQL GTID Concepts, Implementation and troubleshooting
MySQL GTID Concepts, Implementation and troubleshooting MySQL GTID Concepts, Implementation and troubleshooting
MySQL GTID Concepts, Implementation and troubleshooting Mydbops
 
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDBNAVER D2
 

Tendances (20)

Gerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanGerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarman
 
Introdução ao BD Postgre
Introdução ao BD PostgreIntrodução ao BD Postgre
Introdução ao BD Postgre
 
OpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQL
 
Best Practices – Extreme Performance with Data Warehousing on Oracle Database
Best Practices – Extreme Performance with Data Warehousing on Oracle DatabaseBest Practices – Extreme Performance with Data Warehousing on Oracle Database
Best Practices – Extreme Performance with Data Warehousing on Oracle Database
 
PostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesPostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicações
 
PostgreSQL + ZFS best practices
PostgreSQL + ZFS best practicesPostgreSQL + ZFS best practices
PostgreSQL + ZFS best practices
 
PostgreSQL Database Slides
PostgreSQL Database SlidesPostgreSQL Database Slides
PostgreSQL Database Slides
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
Banco de Dados - Transações e Controle de Concorrência
Banco de Dados - Transações e Controle de ConcorrênciaBanco de Dados - Transações e Controle de Concorrência
Banco de Dados - Transações e Controle de Concorrência
 
ProxySQL - High Performance and HA Proxy for MySQL
ProxySQL - High Performance and HA Proxy for MySQLProxySQL - High Performance and HA Proxy for MySQL
ProxySQL - High Performance and HA Proxy for MySQL
 
EXPLicando o Explain no PostgreSQL
EXPLicando o Explain no PostgreSQLEXPLicando o Explain no PostgreSQL
EXPLicando o Explain no PostgreSQL
 
Migrating from InnoDB and HBase to MyRocks at Facebook
Migrating from InnoDB and HBase to MyRocks at FacebookMigrating from InnoDB and HBase to MyRocks at Facebook
Migrating from InnoDB and HBase to MyRocks at Facebook
 
Sql server performance tuning
Sql server performance tuningSql server performance tuning
Sql server performance tuning
 
Kevin Kempter PostgreSQL Backup and Recovery Methods @ Postgres Open
Kevin Kempter PostgreSQL Backup and Recovery Methods @ Postgres OpenKevin Kempter PostgreSQL Backup and Recovery Methods @ Postgres Open
Kevin Kempter PostgreSQL Backup and Recovery Methods @ Postgres Open
 
MySQL Storage Engines
MySQL Storage EnginesMySQL Storage Engines
MySQL Storage Engines
 
Escalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool IIEscalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool II
 
Bancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geralBancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geral
 
Low Level CPU Performance Profiling Examples
Low Level CPU Performance Profiling ExamplesLow Level CPU Performance Profiling Examples
Low Level CPU Performance Profiling Examples
 
MySQL GTID Concepts, Implementation and troubleshooting
MySQL GTID Concepts, Implementation and troubleshooting MySQL GTID Concepts, Implementation and troubleshooting
MySQL GTID Concepts, Implementation and troubleshooting
 
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
 

En vedette

PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPedro Fernandes Vieira
 
O que você acha que sabe sobre banco de dados
O que você acha que sabe sobre banco de dadosO que você acha que sabe sobre banco de dados
O que você acha que sabe sobre banco de dadosMatheus de Oliveira
 
TOP5 - Falsas Suposições de Programadores
TOP5 - Falsas Suposições de ProgramadoresTOP5 - Falsas Suposições de Programadores
TOP5 - Falsas Suposições de ProgramadoresMatheus de Oliveira
 
Linux and H/W optimizations for MySQL
Linux and H/W optimizations for MySQLLinux and H/W optimizations for MySQL
Linux and H/W optimizations for MySQLYoshinori Matsunobu
 
Ténicas de Database Refactoring para ambientes 24x7
Ténicas de Database Refactoring para ambientes 24x7Ténicas de Database Refactoring para ambientes 24x7
Ténicas de Database Refactoring para ambientes 24x7Matheus de Oliveira
 
Tuning Linux for Databases.
Tuning Linux for Databases.Tuning Linux for Databases.
Tuning Linux for Databases.Alexey Lesovsky
 
Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Alexey Lesovsky
 

En vedette (10)

PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro Vieira
 
O que você acha que sabe sobre banco de dados
O que você acha que sabe sobre banco de dadosO que você acha que sabe sobre banco de dados
O que você acha que sabe sobre banco de dados
 
TOP5 - Falsas Suposições de Programadores
TOP5 - Falsas Suposições de ProgramadoresTOP5 - Falsas Suposições de Programadores
TOP5 - Falsas Suposições de Programadores
 
Linux and H/W optimizations for MySQL
Linux and H/W optimizations for MySQLLinux and H/W optimizations for MySQL
Linux and H/W optimizations for MySQL
 
Ténicas de Database Refactoring para ambientes 24x7
Ténicas de Database Refactoring para ambientes 24x7Ténicas de Database Refactoring para ambientes 24x7
Ténicas de Database Refactoring para ambientes 24x7
 
Dicas de Modelagem dimensional
Dicas de Modelagem dimensionalDicas de Modelagem dimensional
Dicas de Modelagem dimensional
 
Tuning Linux for Databases.
Tuning Linux for Databases.Tuning Linux for Databases.
Tuning Linux for Databases.
 
Zabbix Performance Tuning
Zabbix Performance TuningZabbix Performance Tuning
Zabbix Performance Tuning
 
Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.
 
5 Steps to PostgreSQL Performance
5 Steps to PostgreSQL Performance5 Steps to PostgreSQL Performance
5 Steps to PostgreSQL Performance
 

Similaire à PostgreSQL Tuning: O elefante mais rápido que um leopardo

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 leopardoFabio Telles Rodriguez
 
Aula 3 barramentos de placa mae
Aula 3 barramentos de placa maeAula 3 barramentos de placa mae
Aula 3 barramentos de placa maeMarcos Basilio
 
Virtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesVirtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesJoao Galdino Mello de Souza
 
Estou seguro com no sql
Estou seguro com no sqlEstou seguro com no sql
Estou seguro com no sqlRafael Redondo
 
Arquitetura 8 1 - 2012.2
Arquitetura 8   1 - 2012.2Arquitetura 8   1 - 2012.2
Arquitetura 8 1 - 2012.2Paulo Fonseca
 
Arquitetura 8 1 - 2012.2
Arquitetura 8   1 - 2012.2Arquitetura 8   1 - 2012.2
Arquitetura 8 1 - 2012.2Paulo Fonseca
 
Apostila 2 conceitos de hardware e software
Apostila 2   conceitos de hardware e softwareApostila 2   conceitos de hardware e software
Apostila 2 conceitos de hardware e softwarePaulo Fonseca
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Exadata - O Todo é maior que a soma das Partes
Exadata - O Todo é maior que a soma das PartesExadata - O Todo é maior que a soma das Partes
Exadata - O Todo é maior que a soma das PartesLuis Marques
 
PostgreSQL Conceitos e aplicações - FSA
PostgreSQL  Conceitos e aplicações - FSAPostgreSQL  Conceitos e aplicações - FSA
PostgreSQL Conceitos e aplicações - FSAFabio Telles Rodriguez
 
Sismologia USP: Infra Estutura Computacional para Pesquisa
Sismologia USP: Infra Estutura Computacional para PesquisaSismologia USP: Infra Estutura Computacional para Pesquisa
Sismologia USP: Infra Estutura Computacional para PesquisaCentro de Sismologia - USP
 
MEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupMEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupAndré Cruz
 
Forefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamenteForefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamenteUilson Souza
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctoolse-Setorial
 
[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows AzureVitor Tomaz
 
Resumo de S.O.
Resumo de S.O.Resumo de S.O.
Resumo de S.O.dannas_06
 
Instalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutosInstalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutosAlexandre Almeida
 
Montagem manutenção de computadores
Montagem manutenção de computadoresMontagem manutenção de computadores
Montagem manutenção de computadoressetilsonadobmov
 

Similaire à PostgreSQL Tuning: O elefante mais rápido que um leopardo (20)

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
 
Aula 3 barramentos de placa mae
Aula 3 barramentos de placa maeAula 3 barramentos de placa mae
Aula 3 barramentos de placa mae
 
Virtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesVirtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno Domingues
 
Estou seguro com no sql
Estou seguro com no sqlEstou seguro com no sql
Estou seguro com no sql
 
Arquitetura 8 1 - 2012.2
Arquitetura 8   1 - 2012.2Arquitetura 8   1 - 2012.2
Arquitetura 8 1 - 2012.2
 
Arquitetura 8 1 - 2012.2
Arquitetura 8   1 - 2012.2Arquitetura 8   1 - 2012.2
Arquitetura 8 1 - 2012.2
 
PostgreSQL Conceitos e aplicações
PostgreSQL  Conceitos e aplicaçõesPostgreSQL  Conceitos e aplicações
PostgreSQL Conceitos e aplicações
 
Apostila 2 conceitos de hardware e software
Apostila 2   conceitos de hardware e softwareApostila 2   conceitos de hardware e software
Apostila 2 conceitos de hardware e software
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Exadata - O Todo é maior que a soma das Partes
Exadata - O Todo é maior que a soma das PartesExadata - O Todo é maior que a soma das Partes
Exadata - O Todo é maior que a soma das Partes
 
PostgreSQL Conceitos e aplicações - FSA
PostgreSQL  Conceitos e aplicações - FSAPostgreSQL  Conceitos e aplicações - FSA
PostgreSQL Conceitos e aplicações - FSA
 
Sismologia USP: Infra Estutura Computacional para Pesquisa
Sismologia USP: Infra Estutura Computacional para PesquisaSismologia USP: Infra Estutura Computacional para Pesquisa
Sismologia USP: Infra Estutura Computacional para Pesquisa
 
MEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupMEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon Meetup
 
Conceitoseaplicaes
ConceitoseaplicaesConceitoseaplicaes
Conceitoseaplicaes
 
Forefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamenteForefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamente
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctools
 
[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure
 
Resumo de S.O.
Resumo de S.O.Resumo de S.O.
Resumo de S.O.
 
Instalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutosInstalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutos
 
Montagem manutenção de computadores
Montagem manutenção de computadoresMontagem manutenção de computadores
Montagem manutenção de computadores
 

Plus de elliando dias

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slideselliando dias
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScriptelliando dias
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structureselliando dias
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de containerelliando dias
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Librarieselliando dias
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!elliando dias
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Webelliando dias
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorceryelliando dias
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Designelliando dias
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makeselliando dias
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.elliando dias
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebookelliando dias
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Studyelliando dias
 

Plus de elliando dias (20)

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slides
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScript
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structures
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de container
 
Geometria Projetiva
Geometria ProjetivaGeometria Projetiva
Geometria Projetiva
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Libraries
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!
 
Ragel talk
Ragel talkRagel talk
Ragel talk
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Web
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Minicurso arduino
Minicurso arduinoMinicurso arduino
Minicurso arduino
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorcery
 
Rango
RangoRango
Rango
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Design
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makes
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebook
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Study
 

PostgreSQL Tuning: O elefante mais rápido que um leopardo

  • 1. PostgreSQL Tuning: O elefante mais rápido que um leopardo por Fernando Ike 20 de julho de 2008
  • 3. O banco está lento! Problemas comuns • 60% dos problemas são relacionados ao mau uso da linguagem SQL; • 20% dos problemas são relacionados a má modelagem do banco de dados; • 10% dos problemas são relacionados a má configuração do SGDB; 10% dos problemas são relacionados a má configuração do SO.*
  • 4. O banco está lento! Escolhas Erradas • Concentração de regras de negócio na aplicação para processos em lote; • Integridade referencial na aplicação • Mal dimensionamento de I/O (CPU, Plataforma, Disco) • Ambientes virtualizados (Vmware, XEN, etc..) em AMD64/EMT64 • Uso de configurações padrões do SO e/ou do PostgreSQL
  • 5. Melhor Hardware • Servidores dedicados para o PostgreSQL • Storage com Fiber Channel e iSCSI: Grupos de RAID dedicados • RAID 5 ou 10: por Hardware • Mais memória! (Até 4GB em 32 bits) • Processadores de 64 bits: Performance até 3 vezes do que os 32 bits (AMD64 e EMT64 - Intel)
  • 6. Melhor SO • Sistemas Operacionais *nix: Linux (Debian, Gentoo), FreeBSD, Solaris, etc • Em Linux: use Sistemas de arquivos XFS (noatime), Ext3 (writeback, noatime), Ext2 • Instale a última versão do PostgreSQL (atualmente 8.3) e à partir do código-fonte • Não usar serviços concorrentes (Apache, MySQL, SAMBA...) em discos, semáforos e shared memory • Usar, se possível, um kernel (linux) mais recente (e estável)
  • 7. Parâmetros do SO Modificando o *nix • echo “2” > /proc/sys/vm/overcommit_memory • echo “25%” > /proc/sys/kernel/shmmax • echo “25%/64” > /proc/sys/kernel/shmall • echo “deadline” > /sys/block/sda/queue/scheduler • echo “250 32000 100 128” > /proc/sys/kernel/sem • echo “65536” > /proc/sys/fs/file-max
  • 8. Parâmetros do SO Modificando o *nix • ethtool -s eth0 speed 1000 duplex full autoneg off • echo "16777216" > /proc/sys/net/core/rmem_default • echo "16777216" > /proc/sys/net/core/wmem_default • echo "16777216" > /proc/sys/net/core/wmem_max • echo "16777216" > /proc/sys/net/core/rmem_max
  • 9. Parâmetros do SO Modificando o *nix pmanson:~# su - postgres postgres@pmanson:~$ ulimit 65535 /etc/security/limits.conf postgres soft nofile 4096 postgres soft nproc 4096 postgres hard nofile 63536 postgres hard nproc 63536
  • 10. Como organizar os Discos O Melhor I/O • Discos ou partições distintos para: – Logs de transações (WAL) – Índices: Ext2 – Tabelas (particionar tabelas grandes) – Tablespace temporário (em ambiente BI)* – Archives – SO + PostgreSQL – Log de Sistema * Novo no PostgreSQL 8.3
  • 11. postgresql.conf Memória • max_connections: O menor número possível • shared buffers: 33% do total -> Para operações em execução • temp_buffers: Acesso às tabelas temporárias • work_mem: Para agregação, ordenação, consultas complexas • maintenance_work_mem: 75% da maior tabela ou índice • max_fsm_pages: Máximo de páginas necessárias p/ mapear espaço livre. Importante para operações de UPDATE/DELETE.
  • 12. postgresql.conf Disco e Wal • wal_sync_method: open_sync, fdatasync, open_datasync • wal_buffers: tamanho do cache para gravação do WAL • commit_delay: Permite efetivar várias transações na mesma chamada de fsync • checkpoint_segments: tamanho do cache em disco para operações de escrita • checkpoint_timeout: intervalo entre os checkpoints • wal_buffers: 8192kB -> 16GB • bgwriter: ????? • join_collapse_limit = > 8
  • 13. Tuning de SQL • Analyze: test_base=# EXPLAIN ANALYZE SELECT foo FROM bar; • Ferramentas: – Pgfouine; – Pgadmin3; – PhpPgAdmin;
  • 14. Manutenção • Autovacuum X Vacuum: Depende do uso (Aplicações Web, OLTI, BI) – Vacuum: • vacuum_cost_delay: tempo de atraso para vacuum executar automaticamente nas tabelas grandes – Autovacuum (ativado por padrão a partir da versão 8.3): • autovacuum_naptime: tempo de espera para execução do autovacuum.
  • 15. Ferramentas de stress • Pgbench: no diretório do contrib do PostgresSQL, padrão de transações do tipo TPC-B. • DBT-2: Ferramenta da OSDL, padrão de transações do tipo TPC- C. • BenchmarkSQL: Ferramenta Java para benchmark em SQL para vários banco de dados (JDBC), padrão de transações do tipo TPC- C. • Jmeter: Ferramenta Java genérica para testes de stress, usado para aplicações (Web, ...) e também pode ser direto para um banco de dados.
  • 16. Quando o tuning não resolve • Escalabilidade vertical: – Mais e melhores discos; – Mais memória; – Melhor processador (quad core, 64bits) • Escalabilidade horizontal: – Pgpool I (distribuição de carga de leitura e pool de conexões) – PgPool II (PgPool I + paralelização de grandes consultas) – Slony I (Replicação Multi-Master Assíncrona) – Warm Stand By/Log Shipping – Pgbouncer + PL/Proxy + Slony
  • 17. Documentação Oficial: Links http://www.postgresql.org/docs/ • Power PostgreSQL: http://www.powerpostgresql.com/ • PostgreSQL Brasil: http://www.postgresql.org.br • Teste de stress com soluções livres e proprietárias: http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=7053&pagina=5 • Benchmark Brou-Ha-Ha http://blogs.ittoolbox.com/database/soup/archives/benchmark-brouhaha-17939 • BenchmarkSQL, DBT-2 - SourceForge: http://www.sf.net • Jmeter http://jakarta.apache.org/jmeter/
  • 18. Dúvidas • Listas de discussão: – http://archives.postgresql.org/pgsql-performance/ – https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr- geral • IRC irc.freenodes.net: – #POSTGRESQL – #POSTGRESQL-BR
  • 19. Contato • Fernando Ike – fernando.ike@b2br.com.br – fernando.ike@gmail.com – http://www.midstorm.org/~fike/weblog