Otimização – Uma Ferramenta Chamada Vacuum
Veja neste artigo uma ferramenta chamada Vacuum.
Olá, neste rápido artigo iremos explorar uma ferramenta chamada Vacuum. O Vacuum é um utilitário que deve ser usado pelo DBA como manutenção diária do Banco de Dados. Não creio que exista um banco com um utilitário como esse, o qual precisa ser utilizado praticamente diariamente. No entanto, o vacuum existe devido ao controle exclusivo de transação que o postgreSQL possui: o MVCC. As duas principais operações realizadas por essa ferramenta são:
- Recuperar espaço em disco devido a registros atualizados ou deletados;
- Atualizar as estatísticas utilizadas pelo otimizador para determinar o modo mais eficiente de executar uma conusulta no PostgreSQL.
Quando realizamos um UPDATE o registro propriamente dito não é alterado; é incluído um novo registro clone. Sendo assim, o PostgreSQL marca o registro "original" (antigo) como expirado e realiza a alteração no clone. Se for um DELETE, o PostgreSQL apenas marca o registro deletado como expirado. Por isso, é normal vermos a base de dados crescer de forma descomunal no PostgreSQL e as pesquisas começarem a ficar cada vez mais lentas. Esta lentidão fica mais visível principalmente se a consulta não for indexada e for utilizado acesso seqüencial, que faz com que o PostgreSQL verifique TODOS os registros (incluindo os expirados) para localizar o dado. No caso do Índice, ele é o responsável por localizar o dado.
Quando executamos o Vacuum, o mesmo remove fisicamente o dado expirado, pega os dois últimos registros da tabela e joga no lugar do “buraco”.
No segundo caso, o PostgreSQL analisa a quantidade de registros, relacionamentos e índices para atualizar uma feature do PostgreSQL chamada “query planner”. Esta funcionalidade analisa as tabelas gerando informações úteis ao PostgreSQL a fim de que as queries consigam ser aproveitadas de uma maneira mais eficiente em tempo de execução.
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ tabela ]
VACUUM [ FULL ] [ FREEZE ]
[ VERBOSE ] ANALYZE [ tabela [ (coluna [, ...] )] ]
FULL | Seleciona uma limpeza "completa", que pode recuperar mais espaço, mas é muito mais demorada e bloqueia a tabela em modo exclusivo. |
FREEZE | Seleciona um "congelamento" agressivo das tuplas. |
VERBOSE | Produz um relatório detalhado da atividade de limpeza de cada tabela. |
ANALYZE | Atualiza as estatísticas utilizadas pelo otimizador para determinar o modo mais eficiente de executar uma consulta. |
tabela | O nome da tabela específica a ser limpa. O padrão é que sejam todas as tabelas do banco de dados corrente. |
coluna | O nome da coluna específica a ser analisada. O padrão é que sejam todas as colunas. |
Poderiamos executar no Prompt de Comando do Sistema Operacional, através de um script chamado vacuumdb:
#vacuumdb –a –f –z –v
Executando o vacuum em TODOS OS BANCOS existentes no PostgreSQL.
-a | Todos os Banco de Dados. |
-f | Full |
VERBOSE | Analyze |
-z | Exibe mensagens de debug |
tabela | Exibe mensagens de debug. |
-v | O nome da coluna específica a ser analisada. O padrão é que sejam todas as colunas. |
Se fôssemos fazer exatamente como no commando VACUUM VERBOSE ANALYSE tabela_teste>, seria:
#vacuumdb –t tabela_teste banco_teste –v –z BANCO
É muito importante usar diariamente o Vacuum, por isso, não se esqueça deste utilitário pois ele nos poupa dor de cabeça. Uma boa forma é usar o gerenciador de tarefas agendadas do sistema Operacional (no caso do Linux, o cron). Eu sempre executo um Vacuum às 23:00h. (antes do meu backup) e às 4:00 h. (antes dos operadores iniciarem o trabalho).
Um dado importante: O Vaccum FULL usa acesso exclusive da Tabela, ou seja, poderá travar a tabela (lock), se necessitar ser executado com operadores conectados. Execute o vacuum sem o parâmetro FULL.
Iisso é tudo, pessoal. Acredito que com essa dica rápida sobre o Vacuum, conseguimos aprender rapidamente como funciona e como utilizar este utilitário do PostgreSQL. Qualquer dúvida ou sujestão, estou às ordens.
Abraços e até logo,
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo