# MANUAL TÉCNICO - ARQUITETURA DE PERSISTÊNCIA E TROUBLESHOOTING AVANÇADO

**Código:** ITGENG 0021/26 | **Classificação:** CONFIDENCIAL
**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
Definir políticas de persistência de dados (Trade-off Performance vs Segurança) e procedimentos de recuperação de desastres (Crash Recovery e OOM).

---

## 3. ESTRATÉGIAS DE PERSISTÊNCIA REDIS

O Redis pode ser apenas Cache (volátil) ou Banco (persistente).

| Modo | Descrição | Prós | Contras |
| :--- | :--- | :--- | :--- |
| **RDB (Snapshot)** | Salva o banco a cada X minutos. | Rápido restore, arquivo compacto. | Perde os dados desde o último snap. |
| **AOF (Append Only)** | Salva cada comando escrito. | Perda mínima (1s), Seguro. | Arquivo cresce muito, restore lento. |
| **Híbrido** | RDB + AOF. | Segurança do AOF + Rapidez do RDB. | Mais I/O de disco. |

**Recomendação iT Guys:** Use **Híbrido** para bancos críticos e **Apenas RDB** para Cache.

---

## 4. PERSISTÊNCIA SQL (WAL / BINLOG)

Se o servidor desligar da tomada, os dados no WAL/Binlog salvam o dia.

**PostgreSQL (WAL):**
*   `fsync = on`: **OBRIGATÓRIO**. Garante que o dado foi pro disco físico. Desativar dá velocidade mas corrompe o banco em crash.
*   `synchronous_commit`: Pode ser `off` se você aceita perder alguns milissegundos em troca de performance.

---

## 5. CENÁRIOS DE CRASH E SOLUÇÕES

### Cenário 1: OOM Killer (Out Of Memory)
O Linux mata o banco porque acabou a RAM.
*   **Sintoma:** Log do sistema diz `Killed process 1234 (postgres)`.
*   **Correção Imediata:** Aumente o Swap ou reduza os Buffers do banco.
*   **Prevenção:** Ajuste o `oom_score_adj` no Systemd para -1000 (Imune) - *Use com cautela extrema*.

### Cenário 2: Arquivo Corrompido (.pid lock)
Após um crash elétrico, o serviço não sobe dizendo que "já está rodando".
*   **Solução:** Verifique se o processo existe (`ps aux`). Se não existir, delete o arquivo `postmaster.pid` (PG) ou `mysql.pid`.

### Cenário 3: Redis em modo Read-Only
O Redis parou de aceitar escrita.
*   **Causa provável:** O disco encheu ou o RDB falhou (`stop-writes-on-bgsave-error yes`).
*   **Solução:** Libere espaço em disco ou corrija a permissão da pasta de dados.

## 6. POLÍTICA DE DISASTER RECOVERY (DR)

Em caso de corrupção total:
1.  Não tente consertar a produção corrompida.
2.  Suba uma nova instância (VM limpa).
3.  Importe o Último Dump/Backup (Nível 1).
4.  Reaplique os logs de transação (Point-in-Time Recovery) se disponíveis (Requer setup prévio de Archiving).

## 7. VALIDAÇÃO FINAL
- [ ] A persistência (fsync/AOF) está ativa conforme a criticidade?
- [ ] O servidor tem Swap configurado para segurar picos antes do OOM?
