SlideShare uma empresa Scribd logo
1 de 9
Baixar para ler offline
Otimizando suas Querys no PostgreSQL
XIV Fórum Goiano de Software Livre
Jean Pierre Monteiro Queiroz
Agenda
● Otimizador/Planejador
● Analyze
● Ferramentas de análise
● Índices
● Paralelismo
● Dicas Consultas Eficientes
● O que é o plano de execução ?
● Explain SELECT pessoa.nome,pessoa.cpf FROM pessoa WHERE pessoa.nome ILIKE ‘%pedro%’
Seq Scan on pessoa (cost=0.00..2346.66 rows=492 width=39)
Filter: ((nome)::text ~~* '%pedro%'::text)
● Explain Analyze SELECT pessoa.nome,pessoa.cpf FROM pessoa WHERE pessoa.nome ILIKE
‘%pedro%’
Seq Scan on pessoa (cost=0.00..2346.66 rows=492 width=39) (actual time=26.338..158.150 rows=423 loops=1)
Filter: ((nome)::text ~~* '%pedro%'::text)
Rows Removed by Filter: 48670
Planning time: 0.666 ms
Execution time: 158.259 ms
Otimizador/Planejador
● Analyze
● Vaccum Analyze
Analyze
● pgBadger
● pg_stat_statements
1 - Adicione a configuração abaixo no postgresql.conf:
shared_preload_libraries = 'pg_stat_statements'
# Increase the max size of the query strings Postgres records
track_activity_query_size = 2048
# Track statements generated by stored procedures as well
pg_stat_statements.track = all
2 - reiniciar o serviço do postgreSQL
3 - CREATE EXTENSION pg_stat_statements;
Como identificar Query’s lentas ?
● Busca sequencial vs Busca indexada
● Índice Btree
● Índice GIN
● O planejador opta por realizar uma busca sequencial em tabelas
menores.
● O planejador utilizará o índice apenas quando sua Query’s for
seletiva.Se você criar um índice em uma coluna situação por
exemplo,que contemple 50 % dos registros,o planejador irá realizar
uma busca sequencial em toda a tabela.
Índices
Consultas paralelas no PostgreSQL
● max_parallel_workers_per_gather
● Nível de Banco de Dados
● Nível de Sessão
● Sequential Scan Parallelisation
● Parallel Aggregate Functions
● Parallel Joins
● O planejador altera a ordem dos joins conforme o parâmetro
join_collapse_limit que por padrão é 8.Caso a query realize até 8
joins o planejador irá alterar a ordem de acordo com o melhor
plano.Não é aconselhado alterar esse valor,caso a query tenha
mais de 8 uma dica é colocar primeiro as tabelas que sofre filtros
no predicado.
● EXISTS vs IN
● WITH Queries (Common Table Expressions).
● Para carga de dados utilize o COPY e não o INSERT.
Dicas de melhores práticas
Até aqui é isso
Dúvidas ?
jean.aparecida@gmail.com
https://twitter.com/jpierremq
https://github.com/jeanpierremq

Mais conteúdo relacionado

Semelhante a Otimizar Query's no PostgreSQL

Bancos de dados analíticos open source
Bancos de dados analíticos open sourceBancos de dados analíticos open source
Bancos de dados analíticos open sourceMatheus Espanhol
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a Rômulo Jales
 
PL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQLPL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQLJuliano Atanazio
 
Utilizando Machine Learning e Java para classificar o conteúdo de páginas Web
Utilizando Machine Learning e Java para classificar o conteúdo de páginas WebUtilizando Machine Learning e Java para classificar o conteúdo de páginas Web
Utilizando Machine Learning e Java para classificar o conteúdo de páginas WebJoel Pinho Lucas
 
Uso de estatísticas pelo postgre sql
Uso de estatísticas pelo postgre sqlUso de estatísticas pelo postgre sql
Uso de estatísticas pelo postgre sqlLocaweb
 
Boas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de DadosBoas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de DadosJuliano Atanazio
 
24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores
24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores
24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhoresRodrigo Crespi
 
Refactoring Databases - Estrategias
Refactoring Databases - EstrategiasRefactoring Databases - Estrategias
Refactoring Databases - EstrategiasIsmael
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoGustavo Carvalho
 
Conceitos Basicos em Banco de Dados
Conceitos Basicos em Banco de DadosConceitos Basicos em Banco de Dados
Conceitos Basicos em Banco de DadosAlefe Variani
 

Semelhante a Otimizar Query's no PostgreSQL (20)

Bancos de dados analíticos open source
Bancos de dados analíticos open sourceBancos de dados analíticos open source
Bancos de dados analíticos open source
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a
 
Treinamento Elasticsearch - Parte 2
Treinamento Elasticsearch - Parte 2Treinamento Elasticsearch - Parte 2
Treinamento Elasticsearch - Parte 2
 
PL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQLPL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQL
 
Utilizando Machine Learning e Java para classificar o conteúdo de páginas Web
Utilizando Machine Learning e Java para classificar o conteúdo de páginas WebUtilizando Machine Learning e Java para classificar o conteúdo de páginas Web
Utilizando Machine Learning e Java para classificar o conteúdo de páginas Web
 
Uso de estatísticas pelo postgre sql
Uso de estatísticas pelo postgre sqlUso de estatísticas pelo postgre sql
Uso de estatísticas pelo postgre sql
 
Perfomance em MySQL
Perfomance em MySQLPerfomance em MySQL
Perfomance em MySQL
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
 
Boas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de DadosBoas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de Dados
 
24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores
24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores
24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores
 
pgDay Campinas – 2015
pgDay Campinas – 2015pgDay Campinas – 2015
pgDay Campinas – 2015
 
Refactoring Databases - Estrategias
Refactoring Databases - EstrategiasRefactoring Databases - Estrategias
Refactoring Databases - Estrategias
 
TechEd_OFC305
TechEd_OFC305TechEd_OFC305
TechEd_OFC305
 
P funcional
P funcionalP funcional
P funcional
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenação
 
Aula 01
Aula 01Aula 01
Aula 01
 
Aula3
Aula3Aula3
Aula3
 
Por que PostgreSQL?
Por que PostgreSQL?Por que PostgreSQL?
Por que PostgreSQL?
 
Logica Programação. ...
Logica Programação. ...Logica Programação. ...
Logica Programação. ...
 
Conceitos Basicos em Banco de Dados
Conceitos Basicos em Banco de DadosConceitos Basicos em Banco de Dados
Conceitos Basicos em Banco de Dados
 

Otimizar Query's no PostgreSQL

  • 1. Otimizando suas Querys no PostgreSQL XIV Fórum Goiano de Software Livre Jean Pierre Monteiro Queiroz
  • 2. Agenda ● Otimizador/Planejador ● Analyze ● Ferramentas de análise ● Índices ● Paralelismo ● Dicas Consultas Eficientes
  • 3. ● O que é o plano de execução ? ● Explain SELECT pessoa.nome,pessoa.cpf FROM pessoa WHERE pessoa.nome ILIKE ‘%pedro%’ Seq Scan on pessoa (cost=0.00..2346.66 rows=492 width=39) Filter: ((nome)::text ~~* '%pedro%'::text) ● Explain Analyze SELECT pessoa.nome,pessoa.cpf FROM pessoa WHERE pessoa.nome ILIKE ‘%pedro%’ Seq Scan on pessoa (cost=0.00..2346.66 rows=492 width=39) (actual time=26.338..158.150 rows=423 loops=1) Filter: ((nome)::text ~~* '%pedro%'::text) Rows Removed by Filter: 48670 Planning time: 0.666 ms Execution time: 158.259 ms Otimizador/Planejador
  • 4. ● Analyze ● Vaccum Analyze Analyze
  • 5. ● pgBadger ● pg_stat_statements 1 - Adicione a configuração abaixo no postgresql.conf: shared_preload_libraries = 'pg_stat_statements' # Increase the max size of the query strings Postgres records track_activity_query_size = 2048 # Track statements generated by stored procedures as well pg_stat_statements.track = all 2 - reiniciar o serviço do postgreSQL 3 - CREATE EXTENSION pg_stat_statements; Como identificar Query’s lentas ?
  • 6. ● Busca sequencial vs Busca indexada ● Índice Btree ● Índice GIN ● O planejador opta por realizar uma busca sequencial em tabelas menores. ● O planejador utilizará o índice apenas quando sua Query’s for seletiva.Se você criar um índice em uma coluna situação por exemplo,que contemple 50 % dos registros,o planejador irá realizar uma busca sequencial em toda a tabela. Índices
  • 7. Consultas paralelas no PostgreSQL ● max_parallel_workers_per_gather ● Nível de Banco de Dados ● Nível de Sessão ● Sequential Scan Parallelisation ● Parallel Aggregate Functions ● Parallel Joins
  • 8. ● O planejador altera a ordem dos joins conforme o parâmetro join_collapse_limit que por padrão é 8.Caso a query realize até 8 joins o planejador irá alterar a ordem de acordo com o melhor plano.Não é aconselhado alterar esse valor,caso a query tenha mais de 8 uma dica é colocar primeiro as tabelas que sofre filtros no predicado. ● EXISTS vs IN ● WITH Queries (Common Table Expressions). ● Para carga de dados utilize o COPY e não o INSERT. Dicas de melhores práticas
  • 9. Até aqui é isso Dúvidas ? jean.aparecida@gmail.com https://twitter.com/jpierremq https://github.com/jeanpierremq