Otimização de
Banco de Dados
Otimização de Infraestrutura
Módulo 8
Otimização de Infraestrutura
Otimização de Infraestrutura
Virtualização
Introdução à Infraestrutura Moderna
A infraestrutura de TI evoluiu
significativamente nas últimas décadas:
De servidores físicos dedicados para
ambientes virtualizados
De aplicações monolíticas para
containers e microserviços
De data centers próprios para
nuvem computacional
Foco em otimização de recursos e
desempenho
Otimização de Infraestrutura
Virtualização
Virtualização
Tecnologia que permite criar versões
virtuais de recursos de computação,
como servidores, sistemas
operacionais, dispositivos de
armazenamento ou recursos de rede.
Permite executar múltiplos sistemas
operacionais em um único hardware físico
Gerenciada por um hipervisor (VMM
- Virtual Machine Monitor)
Cada VM possui seu próprio sistema
operacional convidado e aplicações
Otimização de Infraestrutura
Virtualização
Vantagens da Virtualização para Bancos de Dados
Consolidação de Hardware: Múltiplos bancos
de dados menores podem compartilhar
um único servidor físico potente, reduzindo
custos de hardware e energia.
Flexibilidade e Provisionamento Rápido:
VMs podem ser criadas, clonadas e movidas
rapidamente, facilitando o desenvolvimento,
testes e recuperação de desastres.
Isolamento: Cada VM é isolada das outras,
garantindo que problemas em uma não
afetem as demais.
Mobilidade: VMs podem ser migradas
(vMotion, Live Migration) entre hosts físicos
sem tempo de inatividade.
Otimização de Infraestrutura
Virtualização
Desafios de Desempenho - Virtualização
Overhead do Hipervisor: Consome parte dos recursos do hardware físico,
introduzindo latência adicional.
Concorrência de Recursos (Resource Contention):Múltiplas VMs competindo
pelos mesmos recursos físicos podem degradar o desempenho.
I/O de Disco: Gargalo mais comum. A camada de virtualização adiciona
complexidade ao caminho do I/O.
Alocação de Recursos (CPU Ready/CPU Wait):VMs aguardando ciclos de CPU
ficam em "CPU Ready", impactando o desempenho.
Fragmentação de Memória: Alocação de memória para VMs pode não ser tão
eficiente quanto em hardware dedicado.
Otimização de Infraestrutura
Virtualização
Alocação de Recursos - CPU e Memória
CPU: Alocar vCPUs suficientes, mas
não excessivas
Memória: Reservar RAM para evitar
swapping no host
Evitar oversubscription que causa
CPU Ready
Utilizar reservas e limites de recursos
Exemplo:
Servidor físico: 64 GB RAM, 16 núcleos VM
de banco de dados: 32 GB RAM, 8 vCPUs
Reserva: 100% da RAM para garantir disponibilidade
Otimização de Infraestrutura
Virtualização
Otimização de I/O de Disco
Discos Virtuais Dedicados: Separar
dados, logs e arquivos temporários
Raw Device Mappings (RDM):
Acesso direto aos discos físicos
Controladores SCSI Virtuais:
Utilizar controladores de alto
desempenho
Armazenamento de Alta
Performance: SANs, NAS ou SSDs
Exemplo:
Configurar um RDM para o volume de dados do
PostgreSQL em uma VM VMware, permitindo que a
VM acesse o SAN diretamente, melhorando
significativamente o desempenho de I/O.
Otimização de Infraestrutura
Virtualização
Monitoramento em Ambientes Virtualizados
Além das métricas tradicionais do
banco de dados, é essencial monitorar:
CPU Ready Time: Tempo que a VM
aguarda por ciclos de CPU
Latência de I/O: Tempo para
operações de leitura/escrita
Uso de memória do host:
Ballooning e swapping
Exemplo:
Usar o vCenter para VMware ou ferramentas do
KVM/Proxmox para verificar o tempo de "CPU Ready" da VM.
Se estiver consistentemente acima de 5-10%, indica
necessidade de mais vCPUs ou menos oversubscription.
Otimização de Infraestrutura
Containers
O que são os Containers
Tecnologia de virtualização de sistema operacional
que permite empacotar uma aplicação e todas as
suas dependências em uma unidade
autocontida e isolada.
Compartilham o kernel do sistema
operacional do host
Mais leves e rápidos para iniciar que
VMs
Mais eficientes em termos de
recursos
Ideais para aplicações stateless, mas
desafiadores para bancos de dados
(stateful)
Arquitetura de Containers Docker
Otimização de Infraestrutura
Containers
Containers vs Máquinas Virtuais
Compartilhamento do Kernel:
Containers compartilham o kernel
do host, enquanto VMs têm seu
próprio sistema operacional completo.
Eficiência de Recursos: Containers
são mais leves e iniciam em
segundos, consumindo menos RAM e CPU.
Isolamento: VMs oferecem
isolamento mais forte, enquanto
containers têm isolamento mais leve.
Portabilidade: Containers são mais
portáteis e consistentes entre ambientes.
Comparação entre arquitetura de Containers e Máquinas Virtuais
Otimização de Infraestrutura
Containers
Vantagens dos Containers para Bancos de Dados
Portabilidade: Execução consistente em
qualquer ambiente compatível.
Início Rápido: Containers iniciam em
segundos, ideal para desenvolvimento.
Isolamento Leve: Bom isolamento sem o
overhead de uma VM completa.
Eficiência de Recursos: Menor consumo de
RAM e CPU pelo compartilhamento do kernel.
Automação e Orquestração: Facilita
deployment e gerenciamento de clusters.
Otimização de Infraestrutura
Containers
Desafios dos Containers em Produção
Persistência de Dados (Statefulness):
Bancos de dados precisam que seus dados
persistam mesmo se o container for destruído,
exigindo volumes persistentes.
I/O de Disco: O caminho do I/O através do
sistema de arquivos do host, do motor do
container e dos volumes pode introduzir latência.
Compartilhamento de Kernel: Embora
eficiente, pode ter implicações de segurança
e isolamento para dados sensíveis.
Monitoramento: Monitorar o banco de
dados dentro de um container exige
ferramentas e abordagens específicas.
Networking: A rede entre containers e para
o exterior pode exigir otimização.
Otimização de Infraestrutura
Containers
Volumes Persistentes em Containers
Volumes Dedicados: Não armazenar
dados no sistema de arquivos do
container (efêmero)
Armazenamento de Blocos Direto:
Volumes de bloco com alta
performance (SSDs, NVMe)
Otimização de I/O: Configurar
driver de armazenamento para alto
desempenho
# Exemplo Docker PostgreSQL
docker volume create pgdata
docker run -d --name meu_pg_container \
-v pgdata:/var/lib/postgresql/data \
-p 5432:5432 postgres:16
Otimização de Infraestrutura
Containers
Orquestração com Kubernetes
Kubernetes é uma plataforma de
orquestração de containers que
automatiza:
StatefulSets: Recurso para
gerenciar aplicações stateful como
bancos de dados.
Operadores de Banco de Dados:
Automatizam deployment, alta
disponibilidade e backups.
Exemplo:
Um operador PostgreSQL no Kubernetes
automatiza a criação de clusters com Master e
réplicas, gerenciando failover e recuperação.
Otimização de Infraestrutura
Nuvem Computacional
Nuvem Computacional
Serviços de computação (servidores,
armazenamento, bancos de dados,
rede) pela internet, geralmente em
um modelo de pagamento por uso
(pay-as-you-go).
Recursos sob demanda, escaláveis
conforme necessidade
Acesso remoto a recursos
computacionais
Redução de custos com
infraestrutura própria
Diversos modelos de serviço: IaaS,
PaaS, SaaS Infraestrutura de Nuvem Computacional
Otimização de Infraestrutura
Nuvem Computacional
Modelos de Serviços em Nuvem
IaaS (Infrastructure as a Service):
Provisiona VMs na nuvem e
instala/gerencia o banco de dados nelas.
Exemplo: EC2 (AWS) com Ubuntu e PostgreSQL.
PaaS (Platform as a Service): O
provedor gerencia a infraestrutura e
o SGBD. Você gerencia os dados e a
configuração.
Exemplo: Amazon RDS, Azure SQL
Database, Google Cloud SQL.
SaaS (Software as a Service): O
provedor gerencia tudo, incluindo o
software da aplicação e os dados.
Exemplo: Salesforce, serviços NoSQL
gerenciados.
Otimização de Infraestrutura
Nuvem Computacional
Vantagens da Nuvem para Bancos de Dados
Escalabilidade Elástica: Capacidade
de aumentar ou diminuir recursos
sob demanda.
Alta Disponibilidade: Replicação
multi-AZ, failover automático e
backups gerenciados.
Redução de Custos: Menos recursos
gastos em gerenciamento de
infraestrutura.
Segurança: Provedores investem
pesadamente em segurança física e
lógica.
Otimização de Infraestrutura
Nuvem Computacional
Desafios da Nuvem
Custo: Modelo pay-as-you-go flexível,
mas custo total pode ser alto se não
monitorado.
Latência de Rede: Maior latência se
aplicação e banco não estiverem na
mesma região.
Gerenciamento Limitado: Menos
controle sobre configurações de baixo
nível do SGBD.
Egress Costs: Transferência de dados
para fora da nuvem pode ter custos
significativos.
Otimização de Infraestrutura
Nuvem Computacional
Dimensionamento Correto em Nuvem
Escolha do Serviço Adequado:
Dimensionar corretamente a
instância (CPU, RAM, IOPS) para a
carga de trabalho.
Monitoramento para Scaling:
Acompanhar métricas para escalar
up ou down conforme necessidade.
Burst Capacity e Auto Scaling:
Utilizar recursos que permitem lidar
com picos de tráfego.
Exemplo:
Para uma aplicação web com picos de tráfego, usar
uma instância RDS com "Burst Capacity" ou "Auto
Scaling" de IOPS para lidar com variações de carga.
Otimização de Infraestrutura
Nuvem Computacional
Otimização de I/O em Nuvem
Tipos de Armazenamento:
Selecionar o tipo com o perfil de
IOPS adequado (ex: gp3 vs. io2 no
AWS EBS)
Tamanho do Volume:Aumentar o
tamanho do volume pode aumentar
os IOPS disponíveis
Monitoramento: Acompanhar
métricas como DiskReadOps ou
DiskWriteOps
Exemplo: Se as métricas de I/O
estão consistentemente altas,
aumentar a capacidade de IOPS
Otimização de Infraestrutura
Nuvem Computacional
Rede e Localidade em Nuvem
A localidade dos recursos é crucial para o desempenho:
Mesma Região/Zona: Manter a
aplicação e o banco de dados na
mesma região e, idealmente, na
mesma Zona de Disponibilidade para
minimizar a latência.
Réplicas de Leitura: Utilizar
endpoints de réplica de leitura para
balancear leituras e reduzir a carga
no Master.
Minimização de Latência: Escolher
regiões próximas aos usuários finais A latência de rede pode ser o maior gargalo de desempenho em
para reduzir o tempo de resposta. ambientes de nuvem.
Otimização de Infraestrutura
Nuvem Computacional
Caching Distribuído
Implementar camadas de cache entre a
aplicação e o banco de dados:
Redis e Memcached: Sistemas de
cache em memória de alta
performance.
Redução de Carga: Diminui
consultas repetitivas ao banco de dados
Consultas Frequentes: Ideal para
dados acessados frequentemente e
pouco voláteis.
Exemplo:
Armazenar resultados de consultas frequentes como
catálogos de produtos ou dados de configuração em um
cache Redis, reduzindo a carga no banco de dados principal.
Referências
Date, C. J. An Introduction to Database Systems. 8th ed. Addison-Wesley, 2003.
Ramakrishnan, Raghu; Gehrke, Johannes. Database Management Systems. 3rd ed. McGraw-Hill
Education, 2002.
Garcia-Molina, Hector; Ullman, Jeffrey D.; Widom, Jennifer. Database Systems: The Complete Book.
2nd ed. Pearson Prentice Hall, 2009.
Celko, Joe. Joe Celko's SQL Performance Tuning. 4th ed. Morgan Kaufmann, 2010.
Shasha, Dennis. Database Tuning: Principles, Experiments, and Best Practices. Morgan Kaufmann,
2002.
Saraswathi, S. Database Management Systems: Concepts, Techniques & Applications. PHI Learning,
2018.
Kyte, Tom; Harrison, Darl. Expert Oracle Database Architecture: Oracle Database 11g Internals and
Performance Tuning. 2nd ed. Apress, 2010.
Fim da Aula