Add unified Database documentation (Postgres/MySQL/Redis) complying with new structure

This commit is contained in:
João Pedro Toledo Goncalves 2026-01-25 01:58:31 -03:00
parent 1106d0a8bd
commit 2c7cb4d197
18 changed files with 629 additions and 13 deletions

View File

@ -28,13 +28,13 @@ Este repositório contém a documentação técnica da iT Guys, organizada por s
- [ ] [Nível 3] Configuração de iSCSI Target - [ ] [Nível 3] Configuração de iSCSI Target
### 3. Bancos de Dados (PostgreSQL / MySQL / Redis) ### 3. Bancos de Dados (PostgreSQL / MySQL / Redis)
- [ ] [Nível 1] Backup e Restore Básico - [x] [Nível 1] Diagnóstico de Conectividade e Status
- [ ] [Nível 2] Manutenção Preventiva (Vacuum/Optimize) - [x] [Nível 1] Procedimento de Backup e Restore Manual
- [ ] [Nível 2] Gestão de Usuários e Permissões - [x] [Nível 2] Instalação e Configuração Base
- [ ] [Nível 3] Troubleshooting de Performance - [x] [Nível 2] Gestão de Usuários e Permissões
- [ ] [Nível 1] Redis: Instalação e Comandos - [x] [Nível 2] Manutenção Preventiva e Logs
- [ ] [Nível 2] Redis: Persistência e Segurança - [x] [Nível 3] Tuning de Performance e Otimização
- [ ] [Nível 3] Redis: Troubleshooting de Memória - [x] [Nível 3] Arquitetura de Persistência e Troubleshooting Avançado
### 4. Windows Server (AD / DNS / GPO) ### 4. Windows Server (AD / DNS / GPO)
- [ ] [Nível 1] Criação e Bloqueio de Usuários (Padrão) - [ ] [Nível 1] Criação e Bloqueio de Usuários (Padrão)

View File

@ -0,0 +1,101 @@
# MANUAL TÉCNICO - DIAGNÓSTICO DE CONECTIVIDADE DE BANCOS DE DADOS
**Código:** ITGSUP 0020/26 | **Classificação:** INTERNO
**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
Padronizar o diagnóstico inicial de incidentes de "banco fora do ar" ou "erro de conexão" para PostgreSQL, MySQL e Redis.
## 3. PRÉ-REQUISITOS
* [ ] Acesso ao terminal do servidor.
* [ ] Saber qual banco está sendo diagnosticado (PG, MySQL ou Redis).
---
## 4. VERIFICAÇÃO DE STATUS DO SERVIÇO
O primeiro passo é saber se o processo está rodando.
**PostgreSQL:**
```bash
sudo systemctl status postgresql
```
* **Ativo:** `Active: active (exited)` ou `(running)`.
* **Porta Padrão:** 5432.
**MySQL / MariaDB:**
```bash
sudo systemctl status mysql
# ou
sudo systemctl status mariadb
```
* **Porta Padrão:** 3306.
**Redis:**
```bash
sudo systemctl status redis-server
# ou
sudo systemctl status redis
```
* **Porta Padrão:** 6379.
---
## 5. TESTE DE CONEXÃO LOCAL (PING)
Se o serviço roda, ele responde?
### Redis (Mais Simples)
Use o `redis-cli` para enviar um PING.
```bash
redis-cli ping
```
* **Sucesso:** Retorna `PONG`.
* **Falha:** `Could not connect...` (Serviço parado) ou `NOAUTH` (Precisa de senha: `redis-cli -a SENHA ping`).
### PostgreSQL
Tente logar como o usuário `postgres`.
```bash
sudo -u postgres psql -c "\conninfo"
```
* **Sucesso:** Mostra dados da conexão (Socket, Port).
* **Falha:** `Is the server running locally...`
### MySQL
Teste o login (pode exigir senha de root).
```bash
sudo mysqladmin -u root -p ping
```
* **Sucesso:** `mysqld is alive`.
---
## 6. DIAGNÓSTICO DE REDE (ACESSO EXTERNO)
Se local funciona, mas a aplicação não conecta, verifique a rede.
**1. A Porta está aberta? (`ss` ou `netstat`)**
```bash
sudo ss -tuln | grep 5432 # (Exemplo PG)
```
* `127.0.0.1:5432` -> **ERRO:** Só aceita conexão local (localhost).
* `0.0.0.0:5432` -> **OK:** Aceita conexões de qualquer IP.
**2. Teste de Telnet (Da estação do usuário/app)**
No computador que está com erro, tente:
```bash
telnet IP_DO_SERVIDOR 5432
```
* **Connected:** Rede OK. Problema é senha/usuario.
* **Timeout:** Firewall bloqueando ou IP errado.
## 7. VALIDAÇÃO FINAL
- [ ] O serviço está "Active (Running)"?
- [ ] O teste local (Ping/Psql) funcionou?
- [ ] A porta está escutando em `0.0.0.0` (se precisar de acesso externo)?

View File

@ -0,0 +1,108 @@
# MANUAL TÉCNICO - BACKUP E RESTORE MANUAL (DUMP)
**Código:** ITGSUP 0021/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
Executar backups pontuais (Dumps) e restaurações de emergência em bancos de dados, incluindo a exportação segura para servidores remotos (Storage/NFS).
## 3. PRÉ-REQUISITOS
* [ ] Espaço em disco suficiente para o dump.
* [ ] Senhas de administração dos bancos.
---
## 4. POSTGRESQL (pg_dump)
### Backup (Exportar)
```bash
# Backup de UM banco
pg_dump -U usuario_admin -h localhost nome_do_banco > backup.sql
# Backup de TODOS os bancos (Cluster)
pg_dumpall -U usuario_admin > backup_full.sql
```
### Restore (Importar)
```bash
# Se o banco ja existe (Sobrescreve estruturas)
psql -U usuario_admin -d nome_do_banco < backup.sql
# Se foi gerado com pg_dumpall
psql -U usuario_admin -f backup_full.sql postgres
```
---
## 5. MYSQL / MARIADB (mysqldump)
### Backup (Exportar)
```bash
# Backup de UM banco
mysqldump -u root -p nome_do_banco > backup.sql
# Backup de VÁRIOS bancos
mysqldump -u root -p --databases db1 db2 > backup_db1_db2.sql
```
### Restore (Importar)
```bash
# O banco DEVE existir antes (mysqladmin create nome_do_banco)
mysql -u root -p nome_do_banco < backup.sql
```
---
## 6. REDIS (RDB Snapshot)
O Redis trabalha em memória, mas salva arquivos `.rdb`.
### Backup (Snapshot Force)
1. Acesse o CLI: `redis-cli`
2. Execute: `BGSAVE` (Salva em background).
3. Verifique o diretório de dados (geralmente `/var/lib/redis/dump.rdb`).
4. Copie o arquivo `dump.rdb` para local seguro.
### Restore
1. Pare o serviço: `systemctl stop redis`
2. Substitua o arquivo `dump.rdb` pelo seu backup.
3. Garanta as permissões: `chown redis:redis dump.rdb`
4. Inicie o serviço: `systemctl start redis`
---
## 7. EXPORTAÇÃO REMOTA (OFF-SITE)
> ⚠️ **IMPORTANTE:** Nunca deixe o backup apenas no próprio servidor. Mova-o.
### Opção A: Cópia via SCP (Windows/Linux Seguro)
Envia o arquivo para outro servidor via SSH.
```bash
scp backup.sql usuario@192.168.1.50:/home/usuario/backups/
```
### Opção B: Montagem NFS (Storage Linux)
Se você tem um storage montado em `/mnt/backup`:
```bash
# Gera direto na pasta remota
pg_dump -U postgres meu_banco > /mnt/backup/pg_$(date +%F).sql
```
### Opção C: Montagem SMB/CIFS (Windows Share)
Para enviar para uma pasta do Windows Server.
1. Instale: `apt install cifs-utils`
2. Monte:
```bash
mount -t cifs -o username=user,password=pass //servidor/share /mnt/windows
```
3. Copie: `cp backup.sql /mnt/windows/`
## 8. VALIDAÇÃO FINAL
- [ ] O arquivo `.sql` foi gerado e tem tamanho maior que 0?
- [ ] O arquivo está salvo em local externo (SCP/NFS)?

View File

@ -0,0 +1,91 @@
# MANUAL TÉCNICO - GESTÃO DE USUÁRIOS E PERMISSÕES DE BANCO
**Código:** ITGINF 0021/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
Padronizar a criação de credenciais, rotação de senhas e a concessão de privilégios mínimos (Least Privilege) em bancos de dados.
---
## 3. POSTGRESQL
Acesse como admin: `sudo -u postgres psql`
### Criar Usuário (Role)
```sql
-- Criar usuario com senha
CREATE USER app_user WITH PASSWORD 'SenhaForte123';
-- Criar um banco para ele
CREATE DATABASE app_db OWNER app_user;
```
### Permissões (Grant)
```sql
-- Conectar no banco especifico
\c app_db
-- Dar acesso a todas as tabelas (SCHEMA public)
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO app_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO app_user;
```
---
## 4. MYSQL / MARIADB
Acesse como admin: `mysql -u root -p`
### Criar Usuário (Definindo Origem)
No MySQL, o usuário é atrelado ao IP de origem (`@'%'` = qualquer lugar, `@'localhost'` = local).
```sql
CREATE USER 'app_user'@'%' IDENTIFIED BY 'SenhaForte123';
```
### Permissões (Grant)
```sql
-- Dar acesso total a UM banco especifico
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'%';
-- Aplicar mudancas
FLUSH PRIVILEGES;
```
---
## 5. REDIS
### Redis Antigo ( < 6.0 )
Só existe UMA senha global definida no `redis.conf` (`requirepass`). Não há usuários.
### Redis Moderno (ACLs - Access Control Lists)
Acesse: `redis-cli` (com a senha de admin/default).
```bash
# Criar usuario 'app_user'
# on > Habilitado
# >Senha... > Define senha
# ~app:* > Só acessa chaves que comessem com 'app:'
# +@all > Pode rodar todos os comandos (Cuidado!)
ACL SETUSER app_user on >SenhaForte123 ~app:* +get +set
```
### Verificar Permissões
```bash
ACL LIST
ACL WHOAMI
```
## 6. VALIDAÇÃO FINAL
- [ ] O usuário consegue logar remotamente?
- [ ] O usuário consegue escrever na tabela/chave permitida?
- [ ] O usuário é BLOQUEADO ao tentar acessar outro banco/tabela (Teste de negação)?

View File

@ -0,0 +1,80 @@
# MANUAL TÉCNICO - INSTALAÇÃO E CONFIGURAÇÃO BASE DE BANCOS DE DADOS
**Código:** ITGINF 0020/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
Padronizar a instalação, caminhos de configuração e liberação de acesso externo para PostgreSQL, MySQL e Redis em servidores Linux.
## 3. PRÉ-REQUISITOS
* [ ] Servidor Linux (Debian/RHEL) atualizado.
* [ ] Acesso root/sudo.
---
## 4. POSTGRESQL
**Instalação:**
* **Debian/Ubuntu:** `sudo apt install postgresql postgresql-contrib`
* **RHEL/CentOS:** `sudo dnf install postgresql-server postgresql-contrib && sudo postgresql-setup --initdb`
**Arquivos de Configuração (Padrão Debian):**
* **Principal:** `/etc/postgresql/14/main/postgresql.conf` (Versão varia).
* **Acesso (Quem conecta):** `/etc/postgresql/14/main/pg_hba.conf`
**Liberar Acesso Externo:**
1. No `postgresql.conf`, mude `listen_addresses = 'localhost'` para `listen_addresses = '*'`.
2. No `pg_hba.conf`, adicione no final:
```
# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 scram-sha-256
```
3. Reinicie: `sudo systemctl restart postgresql`.
---
## 5. MYSQL / MARIADB
**Instalação:**
* **Debian/Ubuntu:** `sudo apt install mariadb-server` (ou `mysql-server`).
* **RHEL/CentOS:** `sudo dnf install mariadb-server`
**Arquivos de Configuração:**
* **Principal:** `/etc/mysql/mysql.conf.d/mysqld.cnf` (ou `/etc/my.cnf`).
**Liberar Acesso Externo:**
1. Edite o arquivo de config.
2. Localize `bind-address` e mude de `127.0.0.1` para `0.0.0.0`.
3. Reinicie: `sudo systemctl restart mariadb`.
**Secure Installation (Obrigatório):**
Rode `sudo mysql_secure_installation` logo após instalar para definir senha de root e remover usuários anônimos.
---
## 6. REDIS
**Instalação:**
* **Todas as distros:** `sudo apt install redis-server` (ou `dnf install redis`).
**Arquivos de Configuração:**
* **Principal:** `/etc/redis/redis.conf`.
**Liberar Acesso Externo (CUIDADO):**
> ⚠️ **ALERTA:** O Redis não tem autenticação forte por padrão. NUNCA exponha para a internet.
1. Edite `/etc/redis/redis.conf`.
2. Mude `bind 127.0.0.1 ::1` para `bind 0.0.0.0`.
3. **OBRIGATÓRIO:** Defina uma senha na diretiva `requirepass SUA_SENHA_FORTE`.
4. Reinicie: `sudo systemctl restart redis`.
## 7. VALIDAÇÃO FINAL
- [ ] O serviço está rodando e habilitado no boot (`systemctl enable`)?
- [ ] O acesso externo funciona (se configurado)?
- [ ] (Redis) A senha foi configurada antes de abrir a rede?

View File

@ -0,0 +1,92 @@
# 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)?

View File

@ -0,0 +1,68 @@
# 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?

View File

@ -0,0 +1,82 @@
# 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?

Binary file not shown.

View File

@ -1,3 +0,0 @@
# Documentação Mysql
Local para manuais e procedimentos referentes ao **Mysql**.

View File

@ -1,3 +0,0 @@
# Documentação Postgresql
Local para manuais e procedimentos referentes ao **Postgresql**.