manuais-e-documentacao-itguys/documentacao bancos de dados/Nivel_2/[Nível 2] Manutenção Preven...

93 lines
2.4 KiB
Markdown

# MANUAL TÉCNICO - MANUTENÇÃO PREVENTIVA E LOGS DE BANCO
**Código:** ITGINF 0022/26 | **Classificação:** RESTRITO
**Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}}
## 1. HISTÓRICO DE REVISÃO
| Data | Versão | Descrição | Autor |
| :--- | :--- | :--- | :--- |
| {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves |
## 2. OBJETIVO
Descrever as rotinas de limpeza de espaço (Vacuum/Optimize), desfragmentação e verificação de logs para evitar paradas por disco cheio ou corrupção.
---
## 3. POSTGRESQL (VACUUM)
O Postgres usa MVCC, gerando "tuplas mortas" quando dados são deletados/alterados.
### Manutenção Automática (Autovacuum)
Geralmente já vem ativo. Verifique:
```sql
SHOW autovacuum; -- Deve ser 'on'
```
### Manutenção Manual (Recuperar Espaço)
Se o banco inchou muito após um DELETÃO em massa.
1. Acesse o `psql`.
2. Rode em horário de baixo pico (Pode travar mesas se usar FULL):
```sql
-- Limpa e otimiza estatisticas (Rapido)
VACUUM ANALYZE;
-- (PERIGOSO) Recria o arquivo do disco para liberar espaço físico. Bloqueia escrita!
VACUUM FULL;
```
---
## 4. MYSQL / MARIADB (OPTIMIZE)
Tabelas InnoDB podem ficar fragmentadas.
### Otimizar Tabelas
```sql
-- Reconstrói a tabela e indices (Bloqueia a tabela durante a execução!)
OPTIMIZE TABLE nome_da_tabela;
```
### Logs Binários (Binlog)
Cuidado: Eles podem encher o disco.
1. Verifique a expiração no `my.cnf`:
```ini
binlog_expire_logs_seconds = 604800 # 7 Dias
```
2. Limpar manualmente (PURGE):
```sql
PURGE BINARY LOGS BEFORE '2023-10-01 00:00:00';
```
---
## 5. REDIS (Memory Defrag)
O Redis pode alocar memória fragmentada.
1. Verifique a fragmentação: `INFO MEMORY`
* `mem_fragmentation_ratio > 1.5` indica fragmentação alta.
2. Ativar Desfragmentação Ativa (Config):
```bash
CONFIG SET activedefrag yes
```
---
## 6. ROTAÇÃO DE LOGS (Logrotate)
Garanta que os logs de erro (`/var/log/mysql`, `/var/log/postgresql`) não estão gigantes.
Verifique se existem arquivos em `/etc/logrotate.d/`:
* `mysql-server`
* `postgresql-common`
Force uma verificação se achar que não está rodando:
```bash
sudo logrotate -f /etc/logrotate.d/mysql-server
```
## 7. VALIDAÇÃO FINAL
- [ ] PostgreSQL: `VACUUM` rodou sem erro?
- [ ] MySQL: Disco liberado após Purge de Binlogs?
- [ ] Logs antigos estão compactados (.gz)?