SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Linux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performanceLinux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performancePostgreSQL-Consulting
 
Gerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanGerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanJuliano Atanazio
 
EXPLicando o Explain no PostgreSQL
EXPLicando o Explain no PostgreSQLEXPLicando o Explain no PostgreSQL
EXPLicando o Explain no PostgreSQLFabrízio Mello
 
PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs PGConf APAC
 
OpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpen Gurukul
 
PostgreSQL Replication High Availability Methods
PostgreSQL Replication High Availability MethodsPostgreSQL Replication High Availability Methods
PostgreSQL Replication High Availability MethodsMydbops
 
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
 
Handling Schema Changes Using pt-online-schema change.
Handling Schema Changes Using pt-online-schema change.Handling Schema Changes Using pt-online-schema change.
Handling Schema Changes Using pt-online-schema change.Mydbops
 
Best Practices for Becoming an Exceptional Postgres DBA
Best Practices for Becoming an Exceptional Postgres DBA Best Practices for Becoming an Exceptional Postgres DBA
Best Practices for Becoming an Exceptional Postgres DBA EDB
 
PostgreSQL Performance Tuning
PostgreSQL Performance TuningPostgreSQL Performance Tuning
PostgreSQL Performance Tuningelliando dias
 
Improve your storage with bcachefs
Improve your storage with bcachefsImprove your storage with bcachefs
Improve your storage with bcachefsMarian Marinov
 
PostgreSQL HA
PostgreSQL   HAPostgreSQL   HA
PostgreSQL HAharoonm
 
How to use histograms to get better performance
How to use histograms to get better performanceHow to use histograms to get better performance
How to use histograms to get better performanceMariaDB plc
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and moreBrendan Gregg
 
Data Warehouses in Kubernetes Visualized: the ClickHouse Kubernetes Operator UI
Data Warehouses in Kubernetes Visualized: the ClickHouse Kubernetes Operator UIData Warehouses in Kubernetes Visualized: the ClickHouse Kubernetes Operator UI
Data Warehouses in Kubernetes Visualized: the ClickHouse Kubernetes Operator UIAltinity Ltd
 
MariaDB Performance Tuning Crash Course
MariaDB Performance Tuning Crash CourseMariaDB Performance Tuning Crash Course
MariaDB Performance Tuning Crash CourseSeveralnines
 

Mais procurados (20)

Replicação PostgreSQL com RepManager
Replicação PostgreSQL com RepManagerReplicação PostgreSQL com RepManager
Replicação PostgreSQL com RepManager
 
Linux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performanceLinux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performance
 
Gerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanGerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarman
 
EXPLicando o Explain no PostgreSQL
EXPLicando o Explain no PostgreSQLEXPLicando o Explain no PostgreSQL
EXPLicando o Explain no PostgreSQL
 
PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs
 
PostgreSQL Replication Tutorial
PostgreSQL Replication TutorialPostgreSQL Replication Tutorial
PostgreSQL Replication Tutorial
 
OpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQL
 
5 Steps to PostgreSQL Performance
5 Steps to PostgreSQL Performance5 Steps to PostgreSQL Performance
5 Steps to PostgreSQL Performance
 
PostgreSQL Replication High Availability Methods
PostgreSQL Replication High Availability MethodsPostgreSQL Replication High Availability Methods
PostgreSQL Replication High Availability Methods
 
What is new in PostgreSQL 14?
What is new in PostgreSQL 14?What is new in PostgreSQL 14?
What is new in PostgreSQL 14?
 
Handling Schema Changes Using pt-online-schema change.
Handling Schema Changes Using pt-online-schema change.Handling Schema Changes Using pt-online-schema change.
Handling Schema Changes Using pt-online-schema change.
 
Best Practices for Becoming an Exceptional Postgres DBA
Best Practices for Becoming an Exceptional Postgres DBA Best Practices for Becoming an Exceptional Postgres DBA
Best Practices for Becoming an Exceptional Postgres DBA
 
PostgreSQL replication
PostgreSQL replicationPostgreSQL replication
PostgreSQL replication
 
PostgreSQL Performance Tuning
PostgreSQL Performance TuningPostgreSQL Performance Tuning
PostgreSQL Performance Tuning
 
Improve your storage with bcachefs
Improve your storage with bcachefsImprove your storage with bcachefs
Improve your storage with bcachefs
 
PostgreSQL HA
PostgreSQL   HAPostgreSQL   HA
PostgreSQL HA
 
How to use histograms to get better performance
How to use histograms to get better performanceHow to use histograms to get better performance
How to use histograms to get better performance
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and more
 
Data Warehouses in Kubernetes Visualized: the ClickHouse Kubernetes Operator UI
Data Warehouses in Kubernetes Visualized: the ClickHouse Kubernetes Operator UIData Warehouses in Kubernetes Visualized: the ClickHouse Kubernetes Operator UI
Data Warehouses in Kubernetes Visualized: the ClickHouse Kubernetes Operator UI
 
MariaDB Performance Tuning Crash Course
MariaDB Performance Tuning Crash CourseMariaDB Performance Tuning Crash Course
MariaDB Performance Tuning Crash Course
 

Destaque

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
 

Destaque (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
 
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.
 

Semelhante a 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
 

Semelhante a 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
 

Mais 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
 

Mais 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
 

Último

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

Último (6)

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

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