Em um ambiente dinâmico de gerenciamento de banco de dados PostgreSQL, a eficiência operacional é muito importante para garantir a estabilidade e o desempenho consistentes. Uma abordagem fundamental para alcançar esse objetivo é a automatização de tarefas repetitivas, um processo que não apenas economiza tempo, mas também minimiza a probabilidade de erros humanos.
Por que automatizar?
Tarefas operacionais, como backup, otimização de índices e monitoramento, frequentemente consomem recursos significativos, exigindo intervenção manual frequente. A automação dessas tarefas não apenas libera a equipe para se concentrar em atividades mais estratégicas, mas também reduz a margem de erro humano, associada a intervenções manuais repetitivas. Como, por exemplo:
1- Backups: o time que administra o banco de dados pode esquecer de fazer backups regularmente, o que pode resultar na perda de dados em caso de falha no sistema.
2- Scripts SQL: ao executar manualmente scripts SQL para tarefas como limpeza de dados antigos ou otimização de consultas, a pessoa que está digitando os comandos, pode cometer erros de sintaxe que geram retrabalho ou mesmo erros de lógica, que podem causar problemas de integridade.
3- Comandos incorretos: ao executar rotineiramente comandos manuais, uma pessoa operando o banco pode executar comandos incorretos por engano. Um exemplo é executar um expurgo manual de dados e esquecer de utilizar algum filtro ou mesmo colocar um “;” (ponto-e-vírgula) onde não deveria e, com isso, excluir dados importantes em vez de dados obsoletos, durante esta limpeza de dados antigos.
4- Otimizações regulares: sem automatização, o time que administra o banco de dados pode esquecer de realizar otimizações regulares, levando à degradação do desempenho ao longo do tempo.
5- Monitorar o desempenho: sem ferramentas de automação para coletar dados, monitorar o desempenho do banco de dados e emitir notificações, o time que opera o banco o ambiente pode não identificar problemas de desempenho até que eles afetem negativamente os usuários finais.
Como automatizar?
Para efetuar tarefas repetitivas — tais como a realização de backups, a exclusão de dados obsoletos e a otimização de objetos no banco — uma prática comum de automação no PostgreSQL envolve a criação de scripts utilizando linguagens como Bash ou Python, e, em alguns casos, até mesmo PL/pgSQL.
Abaixo, apresentamos dois exemplos de tarefas usuais e como podemos automatizá-las.
Backups
Os backups constituem uma medida fundamental para proteger os dados contra perdas ou danos. No contexto do PostgreSQL, é possível efetuar backups recorrendo a utilitários como o pg_dump, para backups lógicos, ou pg_basebackup, para backups físicos.
A automatização pode ser feita por meio de scripts ou recorrer a ferramentas de automação e agendamento que permite programar a execução de backups automáticos em momentos específicos. Por exemplo, pode-se elaborar um script configurado para realizar backups diários no período da madrugada, aproveitando a redução da atividade no sistema.
Em sistemas Linux é comum utilizar o utilitário “crontab” que é uma ferramenta disponível utilizada para agendar a execução automática de tarefas em horários específicos. Isso o torna útil para automatizar uma série de operações de manutenção de bancos de dados PostgreSQL, como backups, por exemplo.
Um exemplo prático é que podemos agendar um script que executa o pg_dump ou pg_basebackup para executar automaticamente durante a madrugada. Por exemplo, para um backup diário às 2 AM, uma entrada no crontab pode parecer com isso:
0 2 * * * /caminho/para/script_backup.sh
Já no Windows, você pode utilizar o Agendador de Tarefas que pode ser chamado pelo comando taskschd.msc. A diferença é que, no Windows, você criará um script em um arquivo BAT ou em Power Shell que será executado pelo agendador de tarefas conforme o agendamento configurado.
> Para saber mais sobre crontab
> Para saber mais sobre o Agendador de Tarefas
Limpeza de dados antigos
Em muitos sistemas, é necessário remover periodicamente dados antigos para manter o banco de dados limpo e otimizado. Isso é importante em bancos de dados com grande volume de dados que podem impactar no desempenho das consultas.
A automatização nestes cenários pode ser feita através de procedures em PL/SQL ou mesmo PL/pgSQL, desenvolvendo mecanismos para identificar e excluir registros com base em critérios de validade ou outros critérios específicos. Essas procedures podem ser agendadas para executarem em intervalos regulares, garantindo que dados obsoletos sejam removidos automaticamente.
Uma vez que você tenha implementado a sua regra em uma procedure no Postgres, você pode utilizar a extensão “pg_cron” para agendar as execuções. Veja o exemplo abaixo onde uma procedure que remove registros criados há mais de 1 ano:
CREATE OR REPLACE PROCEDURE expurgar_dados_antigos()
LANGUAGE sql
AS $$
DELETE FROM registros
WHERE data_criacao < NOW() – INTERVAL ‘1 year’;
$$;
Agora, suponha que este procedimento precise executar diariamente às 3 horas da madrugada. Utilizando o pg_cron podemos criar um agendamento recorrente com um simples comando:
SELECT cron.schedule(‘expurgo’, ‘0 3 * * *’, ‘CALL expurgar_dados_antigos()’);
Caso queira desabilitar este expurgo por algum motivo, você pode utilizar o comando:
SELECT cron.unschedule(‘expurgo’);
> Para saber mais sobre procedures
> Para saber mais sobre pg_cron
Esses são apenas alguns exemplos para servirem como ponto de partida e podem ser adaptados para suas necessidades.
Ganho de Eficiência e Redução de Riscos
Em resumo, a automatização de tarefas repetitivas no PostgreSQL não é apenas uma prática conveniente, mas uma estratégia essencial para otimizar operações e reduzir erros operacionais. Ao adotar uma abordagem proativa para a gestão de tarefas rotineiras, as equipes de banco de dados podem garantir a estabilidade, eficiência e integridade dos dados, posicionando-se para enfrentar desafios operacionais com confiança.
Se você está buscando otimizar o desempenho e a confiabilidade do seu banco de dados PostgreSQL, a Timbira está aqui para ajudar. Podemos oferecer orientação especializada para automatizar tarefas repetitivas, implementar melhores práticas e garantir que seu banco de dados esteja funcionando de forma eficiente e segura.