Tenho uma consulta SQL que executa lentamente no PostgreSQL 13.15 com 128 GB de memória. A consulta executa principalmente um Bitmap Heap Scan, e notei que muitas leituras estão vindo do heap em vez do cache. Aqui está um link para a consulta e o plano de execução.
Um índice que aparece frequentemente no plano se parece com este:
create index ix_contacts__addresses_value__normalized
on contacts__addresses using gin (company_id, field_name, field_id, value__normalized);
Minhas configurações de memória:
• shared_buffers = 32GB
• work_mem = 64MB
• effective_cache_size = 96GB
• maintenance_work_mem = 1320MB
Questões:
- Por que a consulta está lendo tanto do heap?
- Como posso configurar o PostgreSQL para usar melhor a memória (shared_buffers, work_mem e outras configurações) para evitar leituras de heap desnecessárias?
- Devo considerar modificar os índices para reduzir o tempo de execução?
Eu apreciaria muito qualquer conselho sobre como otimizar o cache e o desempenho geral.