Questão de Banco de Dados — PostgreSQL — VUNESP 2025
- Código
- vu222885
- Banca
- VUNESP
- Órgão
- TJM SP
- Ano
- 2025
- Cargo
- Ana BDJ ( )
- AABORT
- BVACUUM
- CCHECKPOINT
- DCOMMIT
- EDISCARD
GabaritoB — VACUUM
Gabarito: letra B. O comando VACUUM é o utilitário do PostgreSQL responsável por recuperar o espaço ocupado por registros excluídos (tuplas mortas) das tabelas, liberando-o para reutilização. Os demais comandos (ABORT, CHECKPOINT, COMMIT e DISCARD) têm funções distintas no gerenciamento do banco, como veremos a seguir.
O PostgreSQL, como um SGBD objeto-relacional, utiliza um mecanismo de controle de concorrência multiversão (MVCC). Isso significa que, quando um registro é excluído ou atualizado, a versão antiga da linha (a "tupla morta") não é fisicamente removida da tabela naquele momento. Ela permanece no arquivo de dados para que transações concorrentes que ainda estejam lendo essa versão possam continuar operando de forma consistente. Com o tempo, essas tuplas mortas se acumulam, ocupando espaço em disco e degradando o desempenho das consultas, pois o banco precisa varrer mais páginas para encontrar os dados válidos.
É exatamente nesse cenário que o comando VACUUM atua. Ele varre as tabelas, identifica as tuplas mortas e marca o espaço por elas ocupado como disponível para reutilização. Em outras palavras, o VACUUM não apenas "limpa" o banco, mas também libera o armazenamento que estava sendo desperdiçado. A documentação oficial do PostgreSQL descreve essa função de forma clara: "O VACUUM recupera o armazenamento ocupado por tuplas mortas". Além disso, o comando pode ser combinado com a opção ANALYZE (VACUUM ANALYZE), que, além de limpar, atualiza as estatísticas usadas pelo planejador de consultas para otimizar a execução dos comandos SQL.
É importante destacar que o VACUUM é uma operação de manutenção essencial em bancos de dados com alta taxa de atualização e exclusão de registros. Sem ele, o banco pode crescer indefinidamente, mesmo que os dados lógicos estejam sendo removidos. Por isso, é uma prática recomendada executar o VACUUM periodicamente, seja manualmente ou por meio do autovacuum, um processo em segundo plano que o PostgreSQL executa automaticamente.
A banca explora aqui um conhecimento específico de administração do PostgreSQL, que vai além do SQL padrão. Enquanto comandos como COMMIT e ROLLBACK são parte do padrão SQL (DTL/TCL), o VACUUM é um comando proprietário do PostgreSQL, essencial para quem administra esse SGBD. A pegadinha está em confundir o VACUUM com outros comandos de gerenciamento de transações ou de sessão, que têm propósitos completamente diferentes. Guarde a função central de cada um: VACUUM = limpeza/liberação de espaço; CHECKPOINT = sincronização de dados em disco; COMMIT = confirmação de transação; ABORT = cancelamento de transação; DISCARD = limpeza de estado da sessão.
O comando ABORT é um sinônimo do comando ROLLBACK no PostgreSQL. Ele é utilizado para cancelar uma transação em andamento, revertendo todas as alterações feitas desde o início da transação (ou desde o último SAVEPOINT). Ele não tem relação com a liberação de espaço de registros excluídos. A confusão pode ocorrer porque ambos os comandos lidam com o ciclo de vida de uma transação, mas suas funções são opostas: ABORT desfaz, VACUUM limpa.
O comando VACUUM é exatamente o utilitário do PostgreSQL que executa a liberação do espaço ocupado por registros excluídos das tabelas. Conforme a documentação oficial, "O VACUUM recupera o armazenamento ocupado por tuplas mortas". Ele é essencial para a manutenção do banco, evitando o crescimento desnecessário dos arquivos de dados e melhorando o desempenho das consultas.
O comando CHECKPOINT é responsável por forçar a gravação dos dados que estão em memória (buffers) para os arquivos de dados no disco. Ele é um mecanismo de recuperação e durabilidade, garantindo que as alterações confirmadas sejam persistidas. Ele não tem relação com a liberação de espaço de registros excluídos. A confusão pode ocorrer porque ambos são comandos de manutenção, mas atuam em aspectos diferentes do sistema.
O comando COMMIT é um comando da DTL (Data Transaction Language) que confirma uma transação, tornando permanentes todas as alterações feitas dentro dela. Ele é essencial para a integridade transacional, mas não tem relação com a liberação de espaço de registros excluídos. A confusão pode ocorrer porque ambos estão relacionados ao ciclo de vida dos dados, mas COMMIT finaliza uma transação, enquanto VACUUM limpa o armazenamento.
O comando DISCARD é utilizado para limpar o estado da sessão atual no PostgreSQL. Ele pode liberar recursos como buffers, planos de execução, sequências e até mesmo a conexão com o banco (DISCARD ALL). Ele não tem relação com a liberação de espaço de registros excluídos das tabelas. A confusão pode ocorrer porque ambos os comandos "limpam" algo, mas DISCARD limpa o estado da sessão, enquanto VACUUM limpa o armazenamento físico das tabelas.
Gabarito: letra B
Link permanente: /questoes/vu222885