PGDAY Campinas – 2016PGDAY Campinas – 2016
PostgreSQL – OtimizaçãoPostgreSQL – Otimização
ContextualizaçãoContextualização
● Utilização de PostgreSQL desde 2001
– 7.2, 7.4, 8.0, 8.2, 9.1, 9.2, 9.4, 9.5 ….
● Cenár...
ContextualizaçãoContextualização
O sistema está lento!O sistema está lento!
● Mais Frete
– Aproximadamente 3.000 arquivos
● Todos acessam o banco de dados
...
Análise de custo de execuçãoAnálise de custo de execução
● EXPLAIN
– Custo = leitura de páginas de disco
– Analyze: execut...
ÍndicesÍndices
● Formas de busca
– Sequenciais
– Indexadas
● Diversos tipos de
índice
● Consultas de 01 a 04
● Custo
– Tem...
ÍndicesÍndices
● Otimização de performance
– Menor amostra
● Consultas 09 a 12
● Redução de espaço utilizado
– Partial ind...
Ordenação de JOINsOrdenação de JOINs
● A sequencia dos JOINs pode interferir no
plano de execução da consulta
– Priorizar ...
Uso do WITHUso do WITH
● Similar a uma tabela temporária
– Válido por uma consulta
● Substitui
– SUBSELECTs no WHERE
– JOI...
Performance em Instruções SemelhantesPerformance em Instruções Semelhantes
● Instruções semanticamente idênticas podem
pos...
Window FunctionsWindow Functions
● Evitam sub-SQLs
● Possibilitam ranqueamento,
– Consultas 26 a 29
Outras alternativasOutras alternativas
● Hardware
– Discos
– Memória
– Processador
● Configuração
– work_mem
– statement_t...
EstatísticasEstatísticas
● Tabelas mudam
– Índices antigos não refletem mais realidade atual
– ANALYZE
● Alterações e excl...
HistóricoHistórico
● Atua Sistemas de Informação
– Fundada em 2001
● Sistemas para Transportadoras (Mais Frete, Mais Frota...
A AtuaA Atua
Dúvidas?Dúvidas?
Álvaro Nunes Melo
alvaro@atua.com.br
www.atua.com.br/vagas/
facebook.com/AtuaSistemas
Próximos SlideShares
Carregando em…5
×

Guia de otimização de consultas em PostgreSQL exemplificado com casos reais | Álvaro Nunes

300 visualizações

Publicada em

A sessão visa demonstrar, partindo do zero, um roteiro para realizar a otimização de consultas em PostgreSQL, com dados de um ambiente real de produção. Este ambiente caracteriza-se por quatrocentas e cinquenta bases, de diferentes tamanhos, em um cluster PostgreSQL replicado em cascata, no qual são emitidos aproximadamente cento e cinquenta mil documentos fiscais por mês. Inicialmente serão abordados parâmetros de configuração que nos auxiliam na geração de um arquivo de log relevante para o tema. De posse deste arquivo, a análise será feita de duas maneiras: utilizando o pgbadger, ou via shell scripts unidos a planilhas de cálculo. Este último método facilita a comparação histórica do comportamento do banco de dados. Em seguida, o comando EXPLAIN será abordado, bem como os comandos de atualização das estatísticas do otimizador de consultas, de garbage collection e sua automatização. No tocante a otimização, será descrito o uso de índices e seu custo em termos de tempo e utilização de espaço. Também serão apresentadas alternativas para reduzir o espaço por eles utilizados. Apesar da excelente performance do otimizador genérico de consultas (Generic Query Optimyzer) a ordenação de JOINs pode, em casos específicos, resultar em ganhos de performance. Ato contínuo, serão demonstradas as formas de utilização de Common Table Expression e Window Functions, recursos que auxiliam na otimização de consultas e que mesmo sendo muito eficientes, tem o uso pouco difundido. Common Table Expressions podem ainda ser aliadas em cenários de bancos de dados replicados em que a réplica é utilizada como uma base somente-leitura.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
300
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1
Ações
Compartilhamentos
0
Downloads
17
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Guia de otimização de consultas em PostgreSQL exemplificado com casos reais | Álvaro Nunes

  1. 1. PGDAY Campinas – 2016PGDAY Campinas – 2016 PostgreSQL – OtimizaçãoPostgreSQL – Otimização
  2. 2. ContextualizaçãoContextualização ● Utilização de PostgreSQL desde 2001 – 7.2, 7.4, 8.0, 8.2, 9.1, 9.2, 9.4, 9.5 …. ● Cenários distintos – Servidores com um grande BD, replicados – Servidores com muitos BDs (~ 400), de tamanhos distintos (entre 20 MB e 10GB) e muitos usuários simultâneos, replicados ● ~ 400 tabelas, 180.000 CTRCs emitidos/mês
  3. 3. ContextualizaçãoContextualização
  4. 4. O sistema está lento!O sistema está lento! ● Mais Frete – Aproximadamente 3.000 arquivos ● Todos acessam o banco de dados Quem causa lentidão? ? – Normalmente consultas ● Exceção: cargas de dados
  5. 5. Análise de custo de execuçãoAnálise de custo de execução ● EXPLAIN – Custo = leitura de páginas de disco – Analyze: executa efetivamente a consulta ● Atenção: teste efetivamente suas alterações ● CTRC – Conhecimento de Transporte Rodoviário de Carga ● CT-e
  6. 6. ÍndicesÍndices ● Formas de busca – Sequenciais – Indexadas ● Diversos tipos de índice ● Consultas de 01 a 04 ● Custo – Tempo de criação – Espaço utilizado ● Mulltiplicar por 400 – Nem sempre utilizados – Consultas 05 a 08
  7. 7. ÍndicesÍndices ● Otimização de performance – Menor amostra ● Consultas 09 a 12 ● Redução de espaço utilizado – Partial index ● Consultas 13 e 14
  8. 8. Ordenação de JOINsOrdenação de JOINs ● A sequencia dos JOINs pode interferir no plano de execução da consulta – Priorizar tabelas filtradas e/ou indexadas – Consultas 15 a 18 (vi / vimdiff) – join_collapse_limit
  9. 9. Uso do WITHUso do WITH ● Similar a uma tabela temporária – Válido por uma consulta ● Substitui – SUBSELECTs no WHERE – JOINs com grande tabelas ou não indexados – Consultas 19 a 23 ● Não altera pg_attribute
  10. 10. Performance em Instruções SemelhantesPerformance em Instruções Semelhantes ● Instruções semanticamente idênticas podem possuir planos de execução distintos – Consultas 24 e 25
  11. 11. Window FunctionsWindow Functions ● Evitam sub-SQLs ● Possibilitam ranqueamento, – Consultas 26 a 29
  12. 12. Outras alternativasOutras alternativas ● Hardware – Discos – Memória – Processador ● Configuração – work_mem – statement_timeout
  13. 13. EstatísticasEstatísticas ● Tabelas mudam – Índices antigos não refletem mais realidade atual – ANALYZE ● Alterações e exclusões – Não apagam fisicamente ● VACUUM e VACUUM FULL; ● Autovacuum
  14. 14. HistóricoHistórico ● Atua Sistemas de Informação – Fundada em 2001 ● Sistemas para Transportadoras (Mais Frete, Mais Frota) ● Desenvolvidos em PHP e PostgreSQL ● Jaguar – Infraestrutura de Rede – Outros sistemas (Mais Contratos, Efesus …) – Equipe: ~ 40 colaboradores (Set/2016) ● Desenvolvimento, Redes, Suporte, Comercial e Adm ● Crescimento
  15. 15. A AtuaA Atua
  16. 16. Dúvidas?Dúvidas? Álvaro Nunes Melo alvaro@atua.com.br www.atua.com.br/vagas/ facebook.com/AtuaSistemas

×