manuais-e-documentacao-itguys/documentacao bancos de dados/Nivel_3/[Nível 3] Tuning de Perform...

83 lines
2.9 KiB
Markdown

# MANUAL TÉCNICO - TUNING E PERFORMANCE DE BANCOS DE DADOS
**Código:** ITGENG 0020/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
Guiar a identificação de gargalos (Slow Queries) e aplicar otimizações seguras (Universais) e agressivas (Tailored) para PostgreSQL, MySQL e Redis.
---
## 3. PREPARAÇÃO PROATIVA (MONITORAMENTO)
Não espere o problema acontecer. Ative isso AGORA.
1. **MySQL Slow Query Log:**
* No `my.cnf`: `slow_query_log = 1`, `long_query_time = 2` (segundos).
2. **Postgres pg_stat_statements:**
* Instale a extensão: `CREATE EXTENSION pg_stat_statements;`
* Veja as queries mais lentas: `SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 5;`
3. **Redis Latency Monitor:**
* Config: `CONFIG SET latency-monitor-threshold 100` (ms).
---
## 4. OTIMIZAÇÕES UNIVERSAIS (SEGURO PARA TODOS)
Alterações de Sistema Operacional (Linux) que beneficiam qualquer DB.
### 1. Swappiness (Evitar Swap)
Bancos de dados odeiam Swap. O padrão do Linux (60) é ruim.
* **Ação:** Mude para 1 ou 10.
* Arquivo `/etc/sysctl.conf`:
```ini
vm.swappiness = 10
```
### 2. Transparent Huge Pages (THP) - DESATIVAR
O THP causa picos de lag no Redis e MongoDB.
* **Ação:** Desative no boot (varie conforme distro, geralmente via GRUB ou Systemd service).
* Verifique: `cat /sys/kernel/mm/transparent_hugepage/enabled` (Deve estar `[never]`).
---
## 5. TUNING TAILORED (CENÁRIOS ESPECÍFICOS)
### Cenário A: Hardware com MUITA RAM (Cache Heavy)
O objetivo é manter o [Working Set] na RAM.
* **Postgres (`shared_buffers`):** Defina como 25% a 40% da RAM Total.
* **MySQL (`innodb_buffer_pool_size`):** Defina como 70-80% da RAM Total (Se o servidor for dedicado apenas ao DB).
### Cenário B: Aplicação Write-Heavy (Muita Escrita)
O gargalo é o disco (I/O).
* **Postgres:** Aumente `max_wal_size` (ex: 4GB) para reduzir checkpoints frequentes.
* **Redis:** Evite `AOF everysec` se puder tolerar perda de 1s. Use persistência mista (RDB + AOF).
---
## 6. DIAGNÓSTICO DE QUERIES (EXPLAIN)
O desenvolvedor diz que "o banco está lento". Prove que é a query.
1. Pegue a query lenta no log.
2. Rode com `EXPLAIN` (MySQL) ou `EXPLAIN ANALYZE` (Postgres).
```sql
EXPLAIN ANALYZE SELECT * FROM pedidos WHERE data < '2023-01-01';
```
3. **Analise:**
* **Seq Scan:** Leu a tabela inteira do inicio ao fim. **RUIM**. Falta índice.
* **Index Scan:** Usou o índice. **BOM**.
## 7. VALIDAÇÃO FINAL
- [ ] O Swappiness está baixo (1-10)?
- [ ] Slow Query Log está capturando consultas lentas?
- [ ] Índices foram criados para eliminar "Seq Scans" críticos?