Recomendações de desempenho do banco de dados (por Azure PSQL)

Olá,

Estamos hospedando nosso fórum baseado no Discourse no Azure com uma instância do “Azure Database for PostgreSQL”. Uma das vantagens desse serviço são as recomendações de desempenho com base nas “características do banco de dados” e no uso.

Desde a migração para o Azure, recebemos algumas sugestões sobre índices ausentes e presumivelmente redundantes, que gostaria de compartilhar com vocês.

Observamos um pequeno (não muito) aumento geral no desempenho após criar esses índices ausentes, mas não conseguimos aplicar as recomendações de DROP INDEX, pois isso poderia/poderá potencialmente quebrar atualizações ou migrações futuras do banco de dados. De qualquer forma, não podemos dizer se esses índices são seguros para exclusão ou se terão um efeito negativo no desempenho.

Aqui estão os índices que o Azure sugeriu que criássemos (impacto “baixo” e “moderado”):
create-indexes.csv (1,5 KB)

Abaixo estão as recomendações para índices “já cobertos”:

Resumo

Excluir o índice index_optimized_images_on_upload_id na tabela public.optimized_images.
Motivo: O índice está coberto por index_optimized_images_on_upload_id_and_width_and_height.

Excluir o índice index_post_revisions_on_post_id na tabela public.post_revisions.
Motivo: O índice está coberto por index_post_revisions_on_post_id_and_number.

Excluir o índice post_timings_summary na tabela public.post_timings.
Motivo: O índice está coberto por post_timings_unique.

Excluir o índice index_topic_links_on_topic_id na tabela public.topic_links.
Motivo: O índice está coberto por unique_post_links.

Excluir o índice index_post_uploads_on_post_id na tabela public.post_uploads.
Motivo: O índice está coberto por idx_unique_post_uploads.

Vocês devem levar essas recomendações de “DROP” com uma pitada de ceticismo, pois acredito que elas afetarão apenas o tamanho total do banco de dados, em vez de aumentar o desempenho. Por exemplo: todo o nosso banco de dados ocupa ~120 GB, e todas essas recomendações liberariam apenas 422 MB. O próprio Azure define o impacto como “baixo”. Parece, portanto, que se trata apenas de uma limpeza.

Como dito acima, gostaria apenas de compartilhar isso com vocês, pois pode ajudar a ajustar um pouco o desempenho. Além desses índices, não houve outras recomendações fornecidas pelo Azure durante o tempo em que estamos usando seus serviços.

Atenciosamente,
Sascha

Obrigado por compartilhar, algumas das recomendações são um pouco estranhas…

CREATE INDEX index_topics_on_category_id ON public.topics USING btree (category_id)
CREATE INDEX index_topics_on_category_id_and_id ON public.topics USING btree (category_id, id)
CREATE INDEX index_topics_on_id_and_category_id ON public.topics USING btree (category_id, id)

Esse índice duplicado triplo sugerido tem seletividade extremamente baixa; o problema com índices assim é que o planejador tende corretamente a ignorá-los. Se houver apenas 10 valores diferentes, você precisa combiná-los com algo mais, como, por exemplo, topic_id.

Quanto aos índices pouco utilizados, há cerca de 6 meses executamos algumas estatísticas no banco de dados procurando por índices que não foram usados em nossa infraestrutura. Eliminamos alguns, mas este tópico é um bom lembrete para repetirmos esse processo.

Obrigado por postar isso.

Obrigado pela sua resposta e por me indicar esses 3 índices. Não percebi essa duplicidade triplo, pois as recomendações não chegaram todas de uma vez e eu as apliquei aos poucos, ao longo de semanas.
É bastante estranho que elas não apareçam nas recomendações de DROP. Parece que a Azure ainda tem algum trabalho a fazer :smiley: (e eu tenho que verificar essas recomendações duas vezes).

Atenciosamente