Pular para o conteúdo principal

Questão de Banco de Dados — PostgreSQL — FCC 2024

Banco de DadosPostgreSQL
Código
fc147222
Banca
FCC
Órgão
SEAD PI
Ano
2024
Cargo
Ana Gov ( )
Um analista de uma Secretaria de Estado está analisando uma base de dados PostgreSQL e, para manter a saúde e a performance do banco, pretende remover tuplas obsoletas, limpar dados mortos, recuperar espaço em disco e atualizar estatísticas das tabelas. Essa operação deve ser realizada através do comando
  1. ANOTIFY
  2. BCLEAR
  3. CLISTEN
  4. DVACUUM
  5. EEXPLAIN
Revelar gabarito e comentário

GabaritoD — VACUUM

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

PostgreSQL: o comando VACUUM e a manutenção do banco

Gabarito: letra D. O comando VACUUM é o utilitário do PostgreSQL responsável por remover tuplas obsoletas (dados mortos), recuperar espaço em disco e, na forma VACUUM ANALYZE, atualizar as estatísticas usadas pelo planejador de consultas — exatamente o que o enunciado descreve. As demais alternativas (NOTIFY, LISTEN, EXPLAIN) são comandos válidos do PostgreSQL, mas com finalidades totalmente distintas, e CLEAR nem sequer existe como comando SQL no PostgreSQL.

O PostgreSQL, como a maioria dos SGBDs relacionais, não remove fisicamente as linhas excluídas ou atualizadas no momento em que a operação é executada. Em vez disso, ele marca essas versões antigas como "tuplas mortas" e as mantém no arquivo da tabela até que uma limpeza seja feita. Isso é uma consequência do controle de concorrência multiversão (MVCC), que permite que leitores vejam uma versão consistente dos dados mesmo enquanto outras transações escrevem. O problema é que, sem limpeza, o arquivo da tabela cresce indefinidamente, o desempenho das consultas degrada (o banco precisa varrer tuplas mortas) e o espaço em disco é desperdiçado.

É aí que entra o VACUUM. Ele percorre a tabela, identifica as tuplas que não são mais visíveis para nenhuma transação ativa e as remove fisicamente, liberando espaço para reutilização. A forma VACUUM ANALYZE vai além: após a limpeza, ela atualiza as estatísticas de distribuição dos dados (número de linhas, valores distintos, histogramas etc.), que são usadas pelo planejador de consultas para escolher o plano de execução mais eficiente (por exemplo, usar um índice ou fazer uma varredura sequencial). Por isso, a manutenção periódica com VACUUM é essencial em tabelas com alta taxa de atualização.

Na prática, um administrador de banco de dados pode executar VACUUM; manualmente ou configurar o autovacuum, que é o processo automático do PostgreSQL que executa a limpeza em segundo plano. Em tabelas muito grandes, também existe o VACUUM FULL, que reescreve o arquivo da tabela para compactar o espaço, mas com custo de bloquear a tabela durante a operação. O VACUUM ANALYZE é a combinação mais comum para manutenção preventiva, pois resolve tanto a limpeza quanto a atualização de estatísticas em um único comando.

A pegadinha desta questão está em distinguir o VACUUM dos demais comandos que a banca oferece como distratores. NOTIFY e LISTEN fazem parte do mecanismo de notificação assíncrona do PostgreSQL: LISTEN registra uma sessão para receber notificações de um canal, e NOTIFY envia uma notificação para esse canal. EXPLAIN é usado para mostrar o plano de execução de uma consulta, sem executá-la de fato — é uma ferramenta de análise de desempenho, não de manutenção. Já CLEAR não é um comando SQL padrão nem do PostgreSQL; pode lembrar o CLEAR SCREEN de alguns clientes, mas não tem relação com limpeza de dados.

Guarde a função de cada comando: VACUUM = limpeza e manutenção; NOTIFY/LISTEN = comunicação entre sessões; EXPLAIN = análise de plano de execução. É exatamente essa distinção que separa a alternativa correta das demais.

1VACUUM
Remove tuplas mortas
Recupera espaço em disco
VACUUM ANALYZE: atualiza estatísticas
2NOTIFY / LISTEN
Comunicação assíncrona entre sessões
3EXPLAIN
Mostra plano de execução
4CLEAR
Não existe no PostgreSQL
Comandos PostgreSQL
LEVELsoulevel.com.br
Comandos PostgreSQL: VACUUM (Remove tuplas mortas, Recupera espaço em disco, VACUUM ANALYZE: atualiza estatísticas); NOTIFY / LISTEN (Comunicação assíncrona entre sessões); EXPLAIN (Mostra plano de execução); CLEAR (Não existe no PostgreSQL)

Alternativa A — ❌ Incorreta

NOTIFY é um comando do PostgreSQL usado para enviar uma notificação assíncrona para um canal. Ele faz parte do mecanismo de mensageria entre sessões, juntamente com LISTEN. Não tem nenhuma relação com limpeza de tuplas, recuperação de espaço ou atualização de estatísticas. O candidato que confunde NOTIFY com "notificar o banco para limpar" cai na pegadinha.

Alternativa B — ❌ Incorreta

CLEAR não é um comando válido no PostgreSQL nem no padrão SQL. Pode lembrar o comando CLEAR SCREEN de alguns clientes de linha de comando (como o psql), mas não executa nenhuma operação de manutenção no banco. É um distrator puro, sem correspondência funcional.

Alternativa C — ❌ Incorreta

LISTEN é o comando complementar ao NOTIFY: ele registra a sessão atual para receber notificações de um canal específico. Assim como o NOTIFY, faz parte do mecanismo de comunicação assíncrona, não de manutenção de dados. A banca o incluiu para testar se o candidato conhece a finalidade real do comando.

Alternativa D — ✅ Correta ⟵ GABARITO

VACUUM é o comando do PostgreSQL que remove tuplas mortas, recupera espaço em disco e, na forma VACUUM ANALYZE, atualiza as estatísticas do planejador de consultas. O enunciado descreve exatamente essa operação: "remover tuplas obsoletas, limpar dados mortos, recuperar espaço em disco e atualizar estatísticas das tabelas". É a ferramenta central de manutenção do PostgreSQL.

Alternativa E — ❌ Incorreta

EXPLAIN é usado para exibir o plano de execução de uma consulta, mostrando como o PostgreSQL pretende executá-la (quais índices usar, ordem de junções, custos estimados etc.). É uma ferramenta de análise e otimização de consultas, não de limpeza de dados. Não remove tuplas nem recupera espaço.

NÃO CAIA NESSA!

A banca oferece comandos que existem no PostgreSQL (NOTIFY, LISTEN, EXPLAIN) mas que têm funções completamente diferentes, tentando confundir o candidato que não conhece a finalidade de cada um. O VACUUM é o único que realiza manutenção física dos dados. Memorize a função de cada comando para não cair nessa troca.

NÃO CAIA NESSA!

Para questões sobre comandos do PostgreSQL, monte uma tabela mental com a função de cada um: VACUUM (limpeza), ANALYZE (estatísticas), EXPLAIN (plano de execução), NOTIFY/LISTEN (comunicação), TRUNCATE (remoção rápida de todos os dados). Isso cobre a maioria das pegadinhas de banca.

Gabarito: letra D — o comando VACUUM (e sua variação VACUUM ANALYZE) é o responsável pela manutenção descrita no enunciado.

Link permanente: /questoes/fc147222