# 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)?
