É possÃvel definir o local de criação do arquivo temporário para um backend Postgresql (versão 9.3.10)?
Aqui está o meu cenário: meu banco de dados Postgresql reside em uma VM dedicada com o sistema operacional Ubuntu 14.04. Minha VM vem com 200 GB de armazenamento SSD temporário de alto desempenho fornecido pelo meu provedor de infraestrutura, destinado a armazenamento de curto prazo para aplicativos e processos. Veja como ele se parece:
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 221G 9.9G 200G 5% /mnt
Estou com pouco espaço em disco e preciso executar algumas consultas analÃticas que podem me levar ao disco cheio devido à criação de arquivos temporários.
Além de tomar medidas como excluir entradas de log para liberar mais espaço ou configurar temp_file_limit
no postgresql conf, também estou interessado em saber se posso definir o local para arquivos temporários. Afinal, tenho 220 GB disponÃveis para esse tipo de cenário, então quero usá-los bem (o espaço de troca também é definido aqui).
Um exemplo ilustrativo de como posso configurar isso seria muito útil, pois sou um DBA neófito.
Há um grande problema com a solução de a_horse_with_no_name. Nem todas as instâncias do PostgreSQL têm um $PGDATA/base/pgsql_tmp porque esse caminho inteiro é realmente criado conforme necessário nessas instâncias. Ele nem existe até que seja necessário e é destruÃdo quando não é mais necessário, então você não pode criar um link simbólico em um caminho inteiro que não existe e que é criado dinamicamente e depois destruÃdo. Você precisa configurar o local do tablespace temporário no arquivo postgresql.conf usando o parâmetro temp_tablespaces ( https://www.postgresql.org/docs/9.3/static/runtime-config-client.html#GUC-TEMP-TABLESPACES). Isso ocorre porque o parâmetro temp_tablespace não apenas designa a localização de todas as tabelas temporárias criadas pelo comando CREATE que não possuem um tablespace explÃcito no momento em que são criadas, mas também designa a localização de todos os arquivos temporários usados ​​para junções, classificações, e outro processamento de sobrecarga ( https://www.postgresql.org/message-id/490ABE1D.3060700%40deriva.de ).
Conforme documentado no manual, o Postgres cria arquivos temporários em formato
$PGDATA/base/pgsql_tmp
.É seguro tornar esse diretório um link simbólico para apontar
/mnt
.Tentar:
Acho que a resposta de paul e a sugestão de um horse_with_no_name estão corretas.
Arquivos temporários e tabelas temporárias são dois processos diferentes de armazenamento temporário do PostgreSQL. A partir do 12.x tenho visto um fenômeno único onde o PostgreSQL está criando pgsql_tmp na pasta designada para Temp tablespace se houver. Eu acho que tem a ver com qual usuário escreveu privs nas pastas, mas não tenho certeza.
É importante lembrar que as tabelas ou arquivos temporários geralmente são limpos ou removidos da pasta e, portanto, raramente são vistos.
Eu geralmente crio um tablespace temporário, configuro-o em conf e concedo privs a todos os usuários para o espaço temptable enquanto o hospedo em um ssd/Ramdrive. Dessa forma, todas as tabelas temporárias são criadas no local de disco mais rápido, resultando em velocidades de processamento mais rápidas.