TL;DR - Não tenho o coletor ativado (ainda) e parece não ser o padrão; quão ruim é isso e devo ativá-lo?
Acabei de criar um novo índice em uma tabela onde uma consulta estava lenta.
Eu fiz isso executando
Explain
a consulta e criando índices em várias combinações das colunas das tabelas/consultas.Perdi os índices que não estavam sendo usados depois de correr
Explain
novamente, mantendo o que foi usadoEntão decidi verificar as estatísticas reunidas para aquela tabela. Acontece que
SELECT schemaname, relname, last_analyze FROM pg_stat_all_tables WHERE relname = '<MY TABLE>';
estava retornando NULL como para a última análise.Verificando o
postgresql.conf
eu identifiquei que atualmente não estou analisando nada...
...
#------------------------------------------------------------------------------
# STATISTICS
#------------------------------------------------------------------------------
# - Query and Index Statistics Collector -
#track_activities = on
#track_counts = on
#track_io_timing = off
#track_functions = none # none, pl, all
#track_activity_query_size = 1024 # (change requires restart)
#stats_temp_directory = 'pg_stat_tmp'
...
Minhas perguntas
- O planejador de consultas ainda tem inteligência suficiente para saber quando ir para um índice versus fazer uma varredura de tabela completa etc.?
- Quando se deve considerar a ativação do Coletor de Estatísticas de Consulta e Índice? (Sempre, apenas em certas circunstâncias, ...)