SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
Postgres Tuning
o elefante mais r´apido que um leopardo
F´abio Telles Rodriguez
Timbira - A empresa brasileira de PostgreSQL
03 de maio de 2013
Agenda
Sobre o que estamos falando?
Ajustes iniciais
Ajustes no SQL
Considera¸c˜oes finais
Perguntas
Sobre esta apresenta¸c˜ao
esta apresenta¸c˜ao est´a dispon´ıvel em:
http://www.timbira.com.br/material
esta apresenta¸c˜ao est´a sob licen¸ca Creative Commons
Atribui¸c˜ao 3.0 Brasil:
http://creativecommons.org/licenses/by/3.0/br
Sobre o que estamos falando?
Figura: Escolha dif´ıcil
Sobre o que estamos falando?
Instala¸c˜oes el´etricas
Sobre o que estamos falando?
Instala¸c˜oes el´etricas
A maior preocupa¸c˜ao numa instala¸c˜ao el´etrica ´e sempre o calor;
A corrente el´etrica gera calor;
V´arios condutores em instalados juntos geram mais calor;
As condi¸c˜oes de ventila¸c˜ao dificultam ou facilitam a
dissipa¸c˜ao do calor;
As condi¸c˜oes atmosf´ericas ou a presen¸ca de outras fontes de
calor devem ser levadas em considera¸c˜ao;
Materiais inflam´aveis devem ser evitados.
Bancos de dados
A maior preocu¸c˜ao num banco de dados s˜ao os Discos;
Antes de confirmar uma transa¸c˜ao (COMMIT) vocˆe deve
persistir a informa¸c˜ao em disco;
Discos s˜ao milhares de vezes mais lentos que a CPU e a
mem´oria;
A lei de moore n˜ao se aplica aos discos;
Grava¸c˜oes e leituras em discos s˜ao opera¸c˜oes seriais e n˜ao s˜ao
paralelizadas;
Discos
Figura: Discos num Storage
Uso de discos
Um UPDATE pode obrigar um registro a migrar de bloco se
ele n˜ao couber mais l´a;
Ao atualizar um registro numa tabela, seus ´ındices tem de ser
atualizados tamb´em;
Consultas pesadas que n˜ao cabem na mem´oria utilizam o
TABLESPACE tempor´ario;
Informa¸c˜oes de rollback s˜ao gravados para reverter uma
trasa¸c˜ao;
V´arias pessoas podem querer alterar os mesmos dados ao
mesmo tempo;
Log de transa¸c˜oes (WAL)
Todo SGDB tenta guardar a maior parte poss´ıvel dos dados
em mem´oria;
Toda vez que uma transa¸c˜ao ´e confirmada (COMMIT) um
registro no WAL ´e gravado;
O WAL ´e o ”Write Ahead Log”grava os registros
sequˆencialmente;
de tempos em tempos os dados em mem´oria (dirty buffers)
s˜ao gravados definitivamente nos datafiles (checkpoint);
Se houver uma falha no SGDB o WAL ´e utilizado para
reproduzir as tranza¸c˜oes em mem´oria que ainda n˜ao foram
consolidadas em disco;
Informa¸c˜oes de rollback s˜ao gravados para reverter trasa¸c˜oes
ainda em mem´oria em caso de falha do SGDB;
Onde est´a o problema afinal?
50% est˜ao em SQL mal escrito;
20% est˜ao em modelagem de dados mal feita;
10% est˜ao em ajustes ruins do SGDB;
5% est˜ao em ajustes ruins do SO;
5% est˜ao em hardware mal dimensionado;
Agenda
Sobre o que estamos falando?
Ajustes iniciais
Ajustes no SQL
Considera¸c˜oes finais
Perguntas
Hardware
Hardware
Utilize um servidor dedicado. (VMs go home!);
Utilize DISCOS dedicados (Tirem a m˜ao do meu storage!);
Prioridade de gastos: discos, controladora de discos, mem´oria,
processador;
SSD SLC > SSD MLC > Fiber channel > SAS > SATA;
Infiniband > Fiber channel > iSCSI;
RAID 10 > RAID 1 > RAID 6 > RAID 5 > JBOD;
Prefira controladoras com bastante cache, baterias externas e
suportes a muitos discos;
Prefira processadores com o melhor e maior cache poss´ıvel e
muitos cores;
Sistema Operacional
Prefira sistemas UNIX: Linux, FreeBSD, OpenBSD, Solaris,
etc;
O melhor SO ´e aquele que sua equipe tem competˆencia para
operar eficientemente;
Sempre instale a vers˜ao em 64 bits do SO;
Prioridade de gastos: discos, controladora de discos, mem´oria,
processador;
Prefira RAID por hardware e n˜ao por software;
N˜ao use LVM;
N˜ao instale softwares e servi¸cos desnecess´arios: interfaces
gr´aficas, Samba, NFS, Apache, etc;
Particionamento de Discos (Linux)
/boot (EXT4);
raiz (EXT4);
dados (RAID 10 ou RAID 1 + XFS ou EXT4 + noatime);
pg xlog (RAID 10 ou RAID 1 + EXT2 + noatime ou EXT3 +
noatime + writeback);
pg log (EXT2 + noatime);
tablespaces com ´ındices, tablespaces tempor´arios (RAID 0 +
EXT2 + noatime);
tablespaces com dados hist´oricos (RAID 5 + XFS ou EXT4 +
noatime);
backup e archives;
Ajustes no SO (Linux)
/etc/sysctl.conf
kernel.shmmax (50% da RAM dispon´ıvel);
Sem´aforos (para suportar um n´umero alto de conex˜oes);
file-max;
overcommit;
/etc/security/limits.conf
nproc;
nofile;
/etc/fstab
noatime para os dados;
noatime + writeback para o pg xlog;
Ajustes no PostgreSQL
max connections: O menor n´umero vi´avel;
shared buffers: < 8GB ou 25% da RAM dispon´ıvel;
maintence work mem: 75% do tamanho da maior tabela;
checkpoint segments: entre 16 e 64;
checkpoint timeout: entre 10min e 30min;
Agenda
Sobre o que estamos falando?
Ajustes iniciais
Ajustes no SQL
Considera¸c˜oes finais
Perguntas
Acerte a sua modelagem
Use o tipo de dados certo para a tarefa certa;
Use chaves naturais;
N˜ao use campos flex;
Para dados n˜ao estruturados, vocˆe tem hstore, vetores e tipos
compostos;
Use ´ındices e gatilhos com sabedoria (teste e monitore o seu
uso);
Pilhas e filas n˜ao devem ficar no seu SGDB;
Escrevendo SQL
Jamais utilize uma fun¸c˜ao em PL para algo que um SQL puro
consegue fazer;
COMMIT a cada X altera¸c˜oes. X > 100 e < 100K;
Se uma consulta retorna mais de 100 registros, reveja a regra
de neg´ocio;
INSERT < INSERT multiplo < PREPARE e EXECUTE <
COPY < INSERT ... SELECT;
Aprenda a usar subconsultas e window functions e Common
Table Expression;
Relat´orios pesados devem utilizar vis˜oes materializadas.
Agenda
Sobre o que estamos falando?
Ajustes iniciais
Ajustes no SQL
Considera¸c˜oes finais
Perguntas
Testes
Teste as funcionalidades;
Teste com volumes de dados o mais realistas poss´ıvel;
Teste com carga de concorrˆencia o mais realista poss´ıvel;
Aprenda a utilizar bem o EXPLAIN.
Monitoramento
Monitore o SO, o PostgreSQL, a aplica¸c˜ao;
Gere logs que mostrem a opera¸c˜ao e a dura¸c˜ao de cada a¸c˜ao;
Gere logs em formatos que possam ser manipulados por
ferramentas automatizadas;
Aprenda a configurar o log do PostgreSQL e o PGBadger;
Fa¸ca coletas peri´odicas e armazene tudo em um local central;
Crie baselines e compare sempre com elas;
Para os DBAs...
Durma bem antes de um novo deploy. Tire uns dias de folga;
N˜ao deixe de tomar cerveja com os amigos...
Pratique exerc´ıcios f´ısicos regularmente!!!
Perguntas
?
F´abio Telles Rodriguez
telles@timbira.com.br
http://www.timbira.com.br

Mais conteúdo relacionado

Mais procurados

Sim, existe vida além do FTP!
Sim, existe vida além do FTP!Sim, existe vida além do FTP!
Sim, existe vida além do FTP!Gustavo Pereira
 
10 Dicas Para Otimizar Códigos T-SQL
10 Dicas Para Otimizar Códigos T-SQL10 Dicas Para Otimizar Códigos T-SQL
10 Dicas Para Otimizar Códigos T-SQLRodrigo Crespi
 
Como migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxComo migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxMarcelo Sabadini
 
Backup 101 - Jerônimo Medina Madruga
Backup 101 - Jerônimo Medina MadrugaBackup 101 - Jerônimo Medina Madruga
Backup 101 - Jerônimo Medina MadrugaTchelinux
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaHenrique Lima
 
Explorando protocolos de serialização de alto desempenho
Explorando protocolos de serialização de alto desempenhoExplorando protocolos de serialização de alto desempenho
Explorando protocolos de serialização de alto desempenhoRafael Monteiro e Pereira
 
DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...Gleicon Moraes
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresDouglas V. Pasqua
 
Arquitetura emergente - sobre cultura devops
Arquitetura emergente - sobre cultura devopsArquitetura emergente - sobre cultura devops
Arquitetura emergente - sobre cultura devopsGleicon Moraes
 
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDBVinicius de Sá
 
Lua em transmissões ao vivo
Lua em transmissões ao vivoLua em transmissões ao vivo
Lua em transmissões ao vivoLeandro Moreira
 
Ferramentas para infraestrutura ágil
Ferramentas para infraestrutura ágilFerramentas para infraestrutura ágil
Ferramentas para infraestrutura ágilJose Augusto Carvalho
 
OpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayOpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayDiego Santos
 
Open ldap criando e explorando um overlay
Open ldap   criando e explorando um overlayOpen ldap   criando e explorando um overlay
Open ldap criando e explorando um overlayMarcelo Fleury
 
noBackend e Offline First: foque em criar experiências
noBackend e Offline First: foque em criar experiênciasnoBackend e Offline First: foque em criar experiências
noBackend e Offline First: foque em criar experiênciasJoselito Nascimento
 
Otimizando Portais Plone: Dicas de Desempenho
Otimizando Portais Plone: Dicas de DesempenhoOtimizando Portais Plone: Dicas de Desempenho
Otimizando Portais Plone: Dicas de DesempenhoDouglas Soares de Andrade
 

Mais procurados (20)

Sim, existe vida além do FTP!
Sim, existe vida além do FTP!Sim, existe vida além do FTP!
Sim, existe vida além do FTP!
 
10 Dicas Para Otimizar Códigos T-SQL
10 Dicas Para Otimizar Códigos T-SQL10 Dicas Para Otimizar Códigos T-SQL
10 Dicas Para Otimizar Códigos T-SQL
 
Como migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxComo migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para Linux
 
Backup 101 - Jerônimo Medina Madruga
Backup 101 - Jerônimo Medina MadrugaBackup 101 - Jerônimo Medina Madruga
Backup 101 - Jerônimo Medina Madruga
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinada
 
Explorando protocolos de serialização de alto desempenho
Explorando protocolos de serialização de alto desempenhoExplorando protocolos de serialização de alto desempenho
Explorando protocolos de serialização de alto desempenho
 
DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...
 
Cabra Macho
Cabra MachoCabra Macho
Cabra Macho
 
Trabalhando com Módulos no Puppet
Trabalhando com Módulos no PuppetTrabalhando com Módulos no Puppet
Trabalhando com Módulos no Puppet
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedores
 
Arquitetura emergente - sobre cultura devops
Arquitetura emergente - sobre cultura devopsArquitetura emergente - sobre cultura devops
Arquitetura emergente - sobre cultura devops
 
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB
 
Lua em transmissões ao vivo
Lua em transmissões ao vivoLua em transmissões ao vivo
Lua em transmissões ao vivo
 
Ferramentas para infraestrutura ágil
Ferramentas para infraestrutura ágilFerramentas para infraestrutura ágil
Ferramentas para infraestrutura ágil
 
OpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayOpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlay
 
Open ldap criando e explorando um overlay
Open ldap   criando e explorando um overlayOpen ldap   criando e explorando um overlay
Open ldap criando e explorando um overlay
 
noBackend e Offline First: foque em criar experiências
noBackend e Offline First: foque em criar experiênciasnoBackend e Offline First: foque em criar experiências
noBackend e Offline First: foque em criar experiências
 
Roteiro vsftpd
Roteiro vsftpdRoteiro vsftpd
Roteiro vsftpd
 
Otimizando Portais Plone: Dicas de Desempenho
Otimizando Portais Plone: Dicas de DesempenhoOtimizando Portais Plone: Dicas de Desempenho
Otimizando Portais Plone: Dicas de Desempenho
 

Destaque

PostgreSQL em projetos de Business Analytics e Big Data Analytics com Pentaho
PostgreSQL em projetos de Business Analytics e Big Data Analytics com PentahoPostgreSQL em projetos de Business Analytics e Big Data Analytics com Pentaho
PostgreSQL em projetos de Business Analytics e Big Data Analytics com PentahoAmbiente Livre
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php segurosDouglas V. Pasqua
 
CASE: O PostgreSQL em BI: Milhares de operações diárias consolidadas em "near...
CASE: O PostgreSQL em BI: Milhares de operações diárias consolidadas em "near...CASE: O PostgreSQL em BI: Milhares de operações diárias consolidadas em "near...
CASE: O PostgreSQL em BI: Milhares de operações diárias consolidadas em "near...PGDay Campinas
 
Análise de performance usando as estatísticas do PostgreSQL
Análise de performance usando as estatísticas do PostgreSQLAnálise de performance usando as estatísticas do PostgreSQL
Análise de performance usando as estatísticas do PostgreSQLMatheus de Oliveira
 

Destaque (6)

Discos & Cia em PostgreSQL
Discos & Cia em PostgreSQLDiscos & Cia em PostgreSQL
Discos & Cia em PostgreSQL
 
PostgreSQL em projetos de Business Analytics e Big Data Analytics com Pentaho
PostgreSQL em projetos de Business Analytics e Big Data Analytics com PentahoPostgreSQL em projetos de Business Analytics e Big Data Analytics com Pentaho
PostgreSQL em projetos de Business Analytics e Big Data Analytics com Pentaho
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php seguros
 
Segurança Web com PHP5
Segurança Web com PHP5Segurança Web com PHP5
Segurança Web com PHP5
 
CASE: O PostgreSQL em BI: Milhares de operações diárias consolidadas em "near...
CASE: O PostgreSQL em BI: Milhares de operações diárias consolidadas em "near...CASE: O PostgreSQL em BI: Milhares de operações diárias consolidadas em "near...
CASE: O PostgreSQL em BI: Milhares de operações diárias consolidadas em "near...
 
Análise de performance usando as estatísticas do PostgreSQL
Análise de performance usando as estatísticas do PostgreSQLAnálise de performance usando as estatísticas do PostgreSQL
Análise de performance usando as estatísticas do PostgreSQL
 

Semelhante a Postgres Tuning

Fazendo Um Elefante Passar Debaixo da Porta - FISL
Fazendo Um Elefante Passar Debaixo da Porta - FISLFazendo Um Elefante Passar Debaixo da Porta - FISL
Fazendo Um Elefante Passar Debaixo da Porta - FISLFabio Telles Rodriguez
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopDiego Sana
 
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFabio Telles Rodriguez
 
Performance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MXPerformance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MXAlex Hübner
 
Minicurso Criando Uma Distro JoomlaCD - V FGSL e I SGSL
Minicurso Criando Uma Distro JoomlaCD - V FGSL e I SGSLMinicurso Criando Uma Distro JoomlaCD - V FGSL e I SGSL
Minicurso Criando Uma Distro JoomlaCD - V FGSL e I SGSLfgsl
 
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftPath to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftAmazon Web Services LATAM
 
Alto desempenho com banco de dados MySQL
Alto desempenho com banco de dados MySQLAlto desempenho com banco de dados MySQL
Alto desempenho com banco de dados MySQLJonas Silveira
 
PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance TuningFernando Ike
 
Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6MySQL Brasil
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalierGleicon Moraes
 
[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
 
Oracle Exadata - Consolidação & Migração
Oracle Exadata - Consolidação & MigraçãoOracle Exadata - Consolidação & Migração
Oracle Exadata - Consolidação & MigraçãoRodrigo Almeida
 

Semelhante a Postgres Tuning (20)

Db2
Db2Db2
Db2
 
SQLSat #127
SQLSat #127SQLSat #127
SQLSat #127
 
Fazendo Um Elefante Passar Debaixo da Porta - FISL
Fazendo Um Elefante Passar Debaixo da Porta - FISLFazendo Um Elefante Passar Debaixo da Porta - FISL
Fazendo Um Elefante Passar Debaixo da Porta - FISL
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Joomlacd
JoomlacdJoomlacd
Joomlacd
 
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
 
TechEd_OFC302
TechEd_OFC302TechEd_OFC302
TechEd_OFC302
 
Performance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MXPerformance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MX
 
Minicurso Criando Uma Distro JoomlaCD - V FGSL e I SGSL
Minicurso Criando Uma Distro JoomlaCD - V FGSL e I SGSLMinicurso Criando Uma Distro JoomlaCD - V FGSL e I SGSL
Minicurso Criando Uma Distro JoomlaCD - V FGSL e I SGSL
 
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftPath to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
 
Conceitoseaplicaes
ConceitoseaplicaesConceitoseaplicaes
Conceitoseaplicaes
 
PostgreSQL Conceitos e aplicações
PostgreSQL  Conceitos e aplicaçõesPostgreSQL  Conceitos e aplicações
PostgreSQL Conceitos e aplicações
 
Introdução ao BD Postgre
Introdução ao BD PostgreIntrodução ao BD Postgre
Introdução ao BD Postgre
 
No sql std
No sql stdNo sql std
No sql std
 
Alto desempenho com banco de dados MySQL
Alto desempenho com banco de dados MySQLAlto desempenho com banco de dados MySQL
Alto desempenho com banco de dados MySQL
 
PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance Tuning
 
Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalier
 
[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
 
Oracle Exadata - Consolidação & Migração
Oracle Exadata - Consolidação & MigraçãoOracle Exadata - Consolidação & Migração
Oracle Exadata - Consolidação & Migração
 

Mais de Fabio Telles Rodriguez

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

Mais de Fabio Telles Rodriguez (20)

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

Postgres Tuning

  • 1. Postgres Tuning o elefante mais r´apido que um leopardo F´abio Telles Rodriguez Timbira - A empresa brasileira de PostgreSQL 03 de maio de 2013
  • 2. Agenda Sobre o que estamos falando? Ajustes iniciais Ajustes no SQL Considera¸c˜oes finais Perguntas
  • 3. Sobre esta apresenta¸c˜ao esta apresenta¸c˜ao est´a dispon´ıvel em: http://www.timbira.com.br/material esta apresenta¸c˜ao est´a sob licen¸ca Creative Commons Atribui¸c˜ao 3.0 Brasil: http://creativecommons.org/licenses/by/3.0/br
  • 4. Sobre o que estamos falando? Figura: Escolha dif´ıcil
  • 5. Sobre o que estamos falando? Instala¸c˜oes el´etricas
  • 6. Sobre o que estamos falando? Instala¸c˜oes el´etricas A maior preocupa¸c˜ao numa instala¸c˜ao el´etrica ´e sempre o calor; A corrente el´etrica gera calor; V´arios condutores em instalados juntos geram mais calor; As condi¸c˜oes de ventila¸c˜ao dificultam ou facilitam a dissipa¸c˜ao do calor; As condi¸c˜oes atmosf´ericas ou a presen¸ca de outras fontes de calor devem ser levadas em considera¸c˜ao; Materiais inflam´aveis devem ser evitados.
  • 7. Bancos de dados A maior preocu¸c˜ao num banco de dados s˜ao os Discos; Antes de confirmar uma transa¸c˜ao (COMMIT) vocˆe deve persistir a informa¸c˜ao em disco; Discos s˜ao milhares de vezes mais lentos que a CPU e a mem´oria; A lei de moore n˜ao se aplica aos discos; Grava¸c˜oes e leituras em discos s˜ao opera¸c˜oes seriais e n˜ao s˜ao paralelizadas;
  • 9. Uso de discos Um UPDATE pode obrigar um registro a migrar de bloco se ele n˜ao couber mais l´a; Ao atualizar um registro numa tabela, seus ´ındices tem de ser atualizados tamb´em; Consultas pesadas que n˜ao cabem na mem´oria utilizam o TABLESPACE tempor´ario; Informa¸c˜oes de rollback s˜ao gravados para reverter uma trasa¸c˜ao; V´arias pessoas podem querer alterar os mesmos dados ao mesmo tempo;
  • 10. Log de transa¸c˜oes (WAL) Todo SGDB tenta guardar a maior parte poss´ıvel dos dados em mem´oria; Toda vez que uma transa¸c˜ao ´e confirmada (COMMIT) um registro no WAL ´e gravado; O WAL ´e o ”Write Ahead Log”grava os registros sequˆencialmente; de tempos em tempos os dados em mem´oria (dirty buffers) s˜ao gravados definitivamente nos datafiles (checkpoint); Se houver uma falha no SGDB o WAL ´e utilizado para reproduzir as tranza¸c˜oes em mem´oria que ainda n˜ao foram consolidadas em disco; Informa¸c˜oes de rollback s˜ao gravados para reverter trasa¸c˜oes ainda em mem´oria em caso de falha do SGDB;
  • 11. Onde est´a o problema afinal? 50% est˜ao em SQL mal escrito; 20% est˜ao em modelagem de dados mal feita; 10% est˜ao em ajustes ruins do SGDB; 5% est˜ao em ajustes ruins do SO; 5% est˜ao em hardware mal dimensionado;
  • 12. Agenda Sobre o que estamos falando? Ajustes iniciais Ajustes no SQL Considera¸c˜oes finais Perguntas
  • 14. Hardware Utilize um servidor dedicado. (VMs go home!); Utilize DISCOS dedicados (Tirem a m˜ao do meu storage!); Prioridade de gastos: discos, controladora de discos, mem´oria, processador; SSD SLC > SSD MLC > Fiber channel > SAS > SATA; Infiniband > Fiber channel > iSCSI; RAID 10 > RAID 1 > RAID 6 > RAID 5 > JBOD; Prefira controladoras com bastante cache, baterias externas e suportes a muitos discos; Prefira processadores com o melhor e maior cache poss´ıvel e muitos cores;
  • 15. Sistema Operacional Prefira sistemas UNIX: Linux, FreeBSD, OpenBSD, Solaris, etc; O melhor SO ´e aquele que sua equipe tem competˆencia para operar eficientemente; Sempre instale a vers˜ao em 64 bits do SO; Prioridade de gastos: discos, controladora de discos, mem´oria, processador; Prefira RAID por hardware e n˜ao por software; N˜ao use LVM; N˜ao instale softwares e servi¸cos desnecess´arios: interfaces gr´aficas, Samba, NFS, Apache, etc;
  • 16. Particionamento de Discos (Linux) /boot (EXT4); raiz (EXT4); dados (RAID 10 ou RAID 1 + XFS ou EXT4 + noatime); pg xlog (RAID 10 ou RAID 1 + EXT2 + noatime ou EXT3 + noatime + writeback); pg log (EXT2 + noatime); tablespaces com ´ındices, tablespaces tempor´arios (RAID 0 + EXT2 + noatime); tablespaces com dados hist´oricos (RAID 5 + XFS ou EXT4 + noatime); backup e archives;
  • 17. Ajustes no SO (Linux) /etc/sysctl.conf kernel.shmmax (50% da RAM dispon´ıvel); Sem´aforos (para suportar um n´umero alto de conex˜oes); file-max; overcommit; /etc/security/limits.conf nproc; nofile; /etc/fstab noatime para os dados; noatime + writeback para o pg xlog;
  • 18. Ajustes no PostgreSQL max connections: O menor n´umero vi´avel; shared buffers: < 8GB ou 25% da RAM dispon´ıvel; maintence work mem: 75% do tamanho da maior tabela; checkpoint segments: entre 16 e 64; checkpoint timeout: entre 10min e 30min;
  • 19. Agenda Sobre o que estamos falando? Ajustes iniciais Ajustes no SQL Considera¸c˜oes finais Perguntas
  • 20. Acerte a sua modelagem Use o tipo de dados certo para a tarefa certa; Use chaves naturais; N˜ao use campos flex; Para dados n˜ao estruturados, vocˆe tem hstore, vetores e tipos compostos; Use ´ındices e gatilhos com sabedoria (teste e monitore o seu uso); Pilhas e filas n˜ao devem ficar no seu SGDB;
  • 21. Escrevendo SQL Jamais utilize uma fun¸c˜ao em PL para algo que um SQL puro consegue fazer; COMMIT a cada X altera¸c˜oes. X > 100 e < 100K; Se uma consulta retorna mais de 100 registros, reveja a regra de neg´ocio; INSERT < INSERT multiplo < PREPARE e EXECUTE < COPY < INSERT ... SELECT; Aprenda a usar subconsultas e window functions e Common Table Expression; Relat´orios pesados devem utilizar vis˜oes materializadas.
  • 22. Agenda Sobre o que estamos falando? Ajustes iniciais Ajustes no SQL Considera¸c˜oes finais Perguntas
  • 23. Testes Teste as funcionalidades; Teste com volumes de dados o mais realistas poss´ıvel; Teste com carga de concorrˆencia o mais realista poss´ıvel; Aprenda a utilizar bem o EXPLAIN.
  • 24. Monitoramento Monitore o SO, o PostgreSQL, a aplica¸c˜ao; Gere logs que mostrem a opera¸c˜ao e a dura¸c˜ao de cada a¸c˜ao; Gere logs em formatos que possam ser manipulados por ferramentas automatizadas; Aprenda a configurar o log do PostgreSQL e o PGBadger; Fa¸ca coletas peri´odicas e armazene tudo em um local central; Crie baselines e compare sempre com elas;
  • 25. Para os DBAs... Durma bem antes de um novo deploy. Tire uns dias de folga; N˜ao deixe de tomar cerveja com os amigos... Pratique exerc´ıcios f´ısicos regularmente!!!