Trabalhei em um servidor de banco de dados que hospeda vários bancos de dados grandes, incluindo bancos de dados que não são mais usados. Eu queria descartar um desses bancos de dados antigos e já demorou mais do que eu esperava (mais de 40 segundos), então notei que o desempenho do servidor foi significativamente impactado e até parou de responder. Felizmente, consegui encerrar a consulta eventualmente e colocar o servidor de volta em um estado estável.
Você pode me ajudar a entender:
- Qual pode ser a razão para o impacto no desempenho? Eu teria assumido que largar um banco de dados é barato e rápido.
- Qual é a melhor abordagem para limpar um DB-Server? Seria melhor descartar cada tabela sequencialmente antes de descartar o banco de dados ou há outras coisas que eu possa fazer para descartar um banco de dados com segurança e rapidez?
Obrigado!
Não. É um pouco como a diferença entre
truncate tbl
edelete from tbl
. O primeiro apenas "esquece" as linhas de dados, o último passa por cada linha, registra sua remoção e se livra dela.Se houvesse uma opção para "esquecer" um banco de dados da mesma maneira, isso seria "barato e rápido".
História curta - não existe essa opção.
A eliminação de um banco de dados elimina tudo . Isso destruirá os discos e afetará todo o resto no servidor.
Esse tipo de atividade disruptiva realmente "pesada" é para que servem as Janelas de Manutenção.
A eliminação de um banco de dados requer a atualização de registros em todos os
pg_catalog
esquemas de outros bancos de dados (por exemplo: tablepg_catalog.pg_database
), se você tiver um grande número de outros bancos de dados ou se deparar com algum tipo de problema de bloqueio que possa causar interrupções.Você pode obter o maior benefício de descartar um banco de dados simplesmente descartando todos os esquemas no banco de dados:
DROP SCHEMA PUBLIC CASCADE;
etc.Isso será executado sem bloquear nenhum outro banco de dados. depois disso, espere até um momento de silêncio para descartar o banco de dados. agora que o banco de dados de saída não possui tabelas, a duração do bloqueio será muito mais curta.