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

PgBouncer: Pool, Segurança e Disaster Recovery | Felipe Pereira
PgBouncer: Pool, Segurança e Disaster Recovery | Felipe PereiraPgBouncer: Pool, Segurança e Disaster Recovery | Felipe Pereira
PgBouncer: Pool, Segurança e Disaster Recovery | Felipe PereiraPGDay Campinas
 
MySQL 8.0.18 latest updates: Hash join and EXPLAIN ANALYZE
MySQL 8.0.18 latest updates: Hash join and EXPLAIN ANALYZEMySQL 8.0.18 latest updates: Hash join and EXPLAIN ANALYZE
MySQL 8.0.18 latest updates: Hash join and EXPLAIN ANALYZENorvald Ryeng
 
PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs PGConf APAC
 
Postgresql database administration volume 1
Postgresql database administration volume 1Postgresql database administration volume 1
Postgresql database administration volume 1Federico Campoli
 
Migrando de Oracle para PostgreSQL
Migrando de Oracle para PostgreSQLMigrando de Oracle para PostgreSQL
Migrando de Oracle para PostgreSQLFernando Ike
 
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015PostgreSQL-Consulting
 
Postgresql Database Administration- Day3
Postgresql Database Administration- Day3Postgresql Database Administration- Day3
Postgresql Database Administration- Day3PoguttuezhiniVP
 
What is new in PostgreSQL 14?
What is new in PostgreSQL 14?What is new in PostgreSQL 14?
What is new in PostgreSQL 14?Mydbops
 
Criação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQLCriação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQLMarcos Thomaz
 
Course 102: Lecture 13: Regular Expressions
Course 102: Lecture 13: Regular Expressions Course 102: Lecture 13: Regular Expressions
Course 102: Lecture 13: Regular Expressions Ahmed El-Arabawy
 
Let's scale-out PostgreSQL using Citus (English)
Let's scale-out PostgreSQL using Citus (English)Let's scale-out PostgreSQL using Citus (English)
Let's scale-out PostgreSQL using Citus (English)Noriyoshi Shinoda
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL AdministrationCommand Prompt., Inc
 
[오픈소스컨설팅]Day #2 MySQL Tuning, Replication, Cluster
[오픈소스컨설팅]Day #2 MySQL Tuning, Replication, Cluster[오픈소스컨설팅]Day #2 MySQL Tuning, Replication, Cluster
[오픈소스컨설팅]Day #2 MySQL Tuning, Replication, ClusterJi-Woong Choi
 
Getting started with postgresql
Getting started with postgresqlGetting started with postgresql
Getting started with postgresqlbotsplash.com
 
An Introduction To PostgreSQL Triggers
An Introduction To PostgreSQL TriggersAn Introduction To PostgreSQL Triggers
An Introduction To PostgreSQL TriggersJim Mlodgenski
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLCommand Prompt., Inc
 
Maximizing performance via tuning and optimization
Maximizing performance via tuning and optimizationMaximizing performance via tuning and optimization
Maximizing performance via tuning and optimizationMariaDB plc
 

Tendances (20)

PgBouncer: Pool, Segurança e Disaster Recovery | Felipe Pereira
PgBouncer: Pool, Segurança e Disaster Recovery | Felipe PereiraPgBouncer: Pool, Segurança e Disaster Recovery | Felipe Pereira
PgBouncer: Pool, Segurança e Disaster Recovery | Felipe Pereira
 
MySQL 8.0.18 latest updates: Hash join and EXPLAIN ANALYZE
MySQL 8.0.18 latest updates: Hash join and EXPLAIN ANALYZEMySQL 8.0.18 latest updates: Hash join and EXPLAIN ANALYZE
MySQL 8.0.18 latest updates: Hash join and EXPLAIN ANALYZE
 
PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs
 
Postgresql database administration volume 1
Postgresql database administration volume 1Postgresql database administration volume 1
Postgresql database administration volume 1
 
Migrando de Oracle para PostgreSQL
Migrando de Oracle para PostgreSQLMigrando de Oracle para PostgreSQL
Migrando de Oracle para PostgreSQL
 
5 Steps to PostgreSQL Performance
5 Steps to PostgreSQL Performance5 Steps to PostgreSQL Performance
5 Steps to PostgreSQL Performance
 
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
 
Postgresql Database Administration- Day3
Postgresql Database Administration- Day3Postgresql Database Administration- Day3
Postgresql Database Administration- Day3
 
Backup and-recovery2
Backup and-recovery2Backup and-recovery2
Backup and-recovery2
 
What is new in PostgreSQL 14?
What is new in PostgreSQL 14?What is new in PostgreSQL 14?
What is new in PostgreSQL 14?
 
Criação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQLCriação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQL
 
Course 102: Lecture 13: Regular Expressions
Course 102: Lecture 13: Regular Expressions Course 102: Lecture 13: Regular Expressions
Course 102: Lecture 13: Regular Expressions
 
Let's scale-out PostgreSQL using Citus (English)
Let's scale-out PostgreSQL using Citus (English)Let's scale-out PostgreSQL using Citus (English)
Let's scale-out PostgreSQL using Citus (English)
 
Linux
LinuxLinux
Linux
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
 
[오픈소스컨설팅]Day #2 MySQL Tuning, Replication, Cluster
[오픈소스컨설팅]Day #2 MySQL Tuning, Replication, Cluster[오픈소스컨설팅]Day #2 MySQL Tuning, Replication, Cluster
[오픈소스컨설팅]Day #2 MySQL Tuning, Replication, Cluster
 
Getting started with postgresql
Getting started with postgresqlGetting started with postgresql
Getting started with postgresql
 
An Introduction To PostgreSQL Triggers
An Introduction To PostgreSQL TriggersAn Introduction To PostgreSQL Triggers
An Introduction To PostgreSQL Triggers
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQL
 
Maximizing performance via tuning and optimization
Maximizing performance via tuning and optimizationMaximizing performance via tuning and optimization
Maximizing performance via tuning and optimization
 

En vedette

PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance TuningFernando Ike
 
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
 
PostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesPostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesFernando Ike
 
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 (11)

PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance Tuning
 
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
 
PostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesPostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicações
 
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.
 

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
 

Dernier

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 

Dernier (9)

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

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