Atualmente temos vários bancos de dados hospedados em uma única instância do postgres.
Queremos limitar o uso da CPU para bancos de dados/usuários específicos nessa instância de banco de dados.
É possível fazer essas operações de gerenciamento de recursos no postgres?
Não, isso não é possível. Seus bancos de dados teriam que estar em máquinas diferentes ou em contêineres diferentes.
Você pode limitar
work_mem
,hash_mem_multiplier
e algumas outras configurações por usuário. Documentação aqui e aqui . Isso não limita a memória geral ou a CPU, mas pode ajudar no ajuste da eficiência geral do servidor e do usuário.Por exemplo, se houver 1 conjunto de serviços de produção que executam consultas que classificam mais dados ou executam consultas mais complicadas/paralelas (como um serviço de criação de relatórios), talvez reduzir work_mem/hash_mem_multiplier como o parâmetro do servidor e aumentar para este usuário possa permitir mais PostgreSQL funcione com mais eficiência no mesmo envelope de memória. A memória, na forma de work_mem, não é “desperdiçada” em usuários que não precisam dela. Ou, para usuários mais sensíveis ao tempo, eles obtêm mais recursos, até o necessário, e usuários menos sensíveis ao tempo podem ter que usar uma classificação/hash externo.
Ou talvez a memória não seja um problema, mas a CPU é para que você possa ajustar as configurações de acordo.
Alguns deles também podem ser alterados no nível da sessão. Como antes de uma consulta que precisa de recursos definidos mais altos e depois redefinidos. Mas descobri que quando um usuário sabe que pode ajustar uma configuração "às vezes vá mais rápido", essa configuração é sempre usada, independentemente de essa configuração poder prejudicar outras pessoas. Cuidado aqui.
Alterá-los para o usuário ou sessão requer ajuste, monitoramento, manutenção, etc. Não limita a CPU ou a memória fornecida ao usuário. Mas pode permitir que você resolva o problema fornecendo mais memória a alguns usuários, na forma de work_mem, enquanto reserva a memória como um todo. Indo longe demais, cada usuário tem uma configuração separada, o que dificulta a manutenção, pois os usuários tendem a mudar os padrões ao longo do tempo e os dados certamente mudam com o tempo.
Esse mecanismo funcionou para mim, fazendo com que todas as consultas no servidor funcionassem mais rapidamente depois de comparar/ajustar/monitorar as configurações dos serviços "problemáticos".