Um padrão comum que observei ao longo dos anos é que as pessoas tendem a continuar aumentando a memória de trabalho à medida que o tamanho dos dados aumenta, de modo que consultas mais complexas ainda podem aproveitar ao máximo a velocidade da memória, mas para algumas tarefas extremas (por exemplo, relatórios).
Pode ser vantajoso aumentar esse número drasticamente apenas para algumas consultas atípicas que raramente são executadas. Por exemplo, eu poderia querer manter work_mem
por exemplo. 8 MB para operações normais, mas depois execute uma consulta específica com um cliente/usuário específico com algo como 250 MB de memória de trabalho para que eu possa fazer coisas drásticas inteiramente na memória durante uma única sessão, rapidamente.
Isso é possível? Estou completamente fora da base para pensar nisso como uma solução?
Você tem algumas possibilidades.
Para alterar
work_mem
para um usuário é fácil:Se você puder organizar coisas como
alice
se o usuário está executando essas consultas pesadas, isso pode ser suficiente. Se esse número for grande (uma parte significativa da RAM que você tem em seu servidor), faz sentido limitar o usuário a ter apenas um pequeno número de conexões (até 1 pode fazer sentido) a qualquer momento:Se isso não for viável, você pode armazenar suas consultas como funções. A vantagem disso é que você pode definir os parâmetros escolhidos ao definir a função ou depois dela: