Questão de Banco de Dados — PostgreSQL — FCC 2024
- Código
- fc147222
- Banca
- FCC
- Órgão
- SEAD PI
- Ano
- 2024
- Cargo
- Ana Gov ( )
- ANOTIFY
- BCLEAR
- CLISTEN
- DVACUUM
- EEXPLAIN
GabaritoD — VACUUM
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.
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.
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.
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.
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.
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.
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.
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