As consultas SELECT (com JOINs de tabela) em um banco de dados afetam o espaço em disco enquanto estão em execução?
Background: Eu tenho um aplicativo Django com um backend Postgresql (9.3.10). Meu banco de dados reside em uma VM que estava com pouco espaço em disco (cerca de ~400 MB restantes).
Consultei algumas tabelas para avaliar quais dados devem ser preteridos para liberar espaço em disco (isso inclui junções entre tabelas). Essas consultas do tipo analítico foram agrupadas em um único URL e executadas em uníssono. Quando eu bati o URL, a VM contendo meu banco de dados ficou sem espaço após cerca de meio minuto.
Eu sou um DBA acidental e ainda estou aprendendo as cordas. Alguém pode explicar por que fiquei sem espaço neste cenário? Algum tipo de arquivo temporário é criado em tais operações? Compartilharei meus detalhes de configuração caso sejam necessários.
Claro, na verdade, existem muitas maneiras de
SELECT
ocupar espaço em disco. Basta olhar para os documentos parawork_mem
Mesmo com um alto
work_mem
aSELECT
pode consumir espaço em disco. Você pode, por exemplo, ter uma função necessária que grava diretamente no disco.Você pode estar interessado em mitigar isso usando
temp_file_limit
(A resposta de Evan está correta, por favor, aceite a dele, não a minha. Estou adicionando informações suplementares.)
Sim, algumas operações de classificação e junção podem usar o armazenamento em disco para arquivos temporários.
Habilite
log_temp_files
ou execute a consulta comEXPLAIN (VERBOSE, BUFFERS, ANALYZE)
.