24
PGBR 2013 Como lidar com cargas de trabalho mistas Flavio Gurgel

Como lidar com cargas de trabalho mistas - PostgreSQL

Embed Size (px)

DESCRIPTION

Slides da palestra “Como lidar com cargas de trabalho mistas”, apresentada por Flavio Gurgel no PGBR 2013.

Citation preview

Page 1: Como lidar com cargas de trabalho mistas - PostgreSQL

PGBR 2013

Como lidar com cargas de trabalho mistasFlavio Gurgel

Page 2: Como lidar com cargas de trabalho mistas - PostgreSQL

2

Flavio Gurgel

● Engenheiro eletricista - UFPR

● Líder de projetos especiais – 4Linux

● EnterpriseDB Certified Postgres Plus Associate

● Experiência:

● 18 anos - DBA

● 14 anos - PostgreSQL

● 4 anos – Comunidade brasileira PostgreSQL

Page 3: Como lidar com cargas de trabalho mistas - PostgreSQL

3

OLTP

● Transações rápidas

● Volume alto

● Poucas linhas de cada vez

● Maioria escrita

● INSERT, UPDATE, DELETE

● Operacional

Page 4: Como lidar com cargas de trabalho mistas - PostgreSQL

4

OLAP

● Transações lentas

● Volume menor

● Muitas linhas

● Maioria leitura

● SELECTs complexos

● Analítico

Page 5: Como lidar com cargas de trabalho mistas - PostgreSQL

5

WEB

● Saída do preto e branco

● Adaptação para o mundo Internet

● Intermediário entre OLTP e OLAP

Page 6: Como lidar com cargas de trabalho mistas - PostgreSQL

6

OLTP em PostgreSQL● Priorizar escrita

● pg_xlog separado em discos rápidos

● shared_buffers mais alto

● work_mem mais baixo

● Poucas conexões

● Tuning dos parâmetros WAL

● Tuning do autovacuum

● Índices na dose certa

● Tablespaces onde necessário

Page 7: Como lidar com cargas de trabalho mistas - PostgreSQL

7

OLAP em PostgreSQL

● Priorizar leitura

● Algumas tabelas em tablespaces próprias

● Tablespaces em discos rápidos

● work_mem mais alto

● shared_buffers mais baixo

● Tuning dos parâmetros de custo

● Menos conexões ainda

● Maior abundância de índices

Page 8: Como lidar com cargas de trabalho mistas - PostgreSQL

8

Web em PostgreSQL

Algo entre os dois anteriores

Page 9: Como lidar com cargas de trabalho mistas - PostgreSQL

9

A loucura

Os três modelos anteriores...

...no mesmo banco de dados!

Tudo bem grande.

Lembrete: tem que ser rápido, CLARO.

Page 10: Como lidar com cargas de trabalho mistas - PostgreSQL

10

Como

COMO

COMO ?

COMO ???

Page 11: Como lidar com cargas de trabalho mistas - PostgreSQL

11

Já ia me esquecendo

Tem uma pitada de linguagem procedural também.

Page 12: Como lidar com cargas de trabalho mistas - PostgreSQL

12

Assim

Sistema Transacional

Rápido

ETLBanco de dados

em RAM

Sistema Webdo Recente

Usuários

Alertas

Sistema OLAPdo Histórico

SistemaAlerta

Tabelas epl/PgSQL

Page 13: Como lidar com cargas de trabalho mistas - PostgreSQL

13

O que faz essa joça?

● Coleta os dados OLTP

● Faz um data mining dedicado:

● Detecta padrões em tempo real (Alertas)

● Permite análise manual do que foi alertado (Web)

● Permite análise refinada, posterior, cruzamentos e

relatórios (Histórico, OLAP)

Page 14: Como lidar com cargas de trabalho mistas - PostgreSQL

14

Quem usa isso?

● Quem precisa de detecção em tempo real, alerta e análise, exemplos:

● Trânsito – Detecção de gargalos

● Meteorologia – Prevenção de fenômenos

● Bancos - Prevenção à fraude

● Bolsa de valores – Ativação de circuit-breaker

● Energia – Preparação para picos de consumo

● Telefonia – Prevenção à clonagem

Page 15: Como lidar com cargas de trabalho mistas - PostgreSQL

15

1. Usar esquemas

EsquemaOLTP

EsquemaOLAP

EsquemaWEB

PL/pgSQL PL/pgSQL

Page 16: Como lidar com cargas de trabalho mistas - PostgreSQL

16

2. Muita memória

● Usar shared_buffers de OLTP

● Usar usuários separados para cada coisa

● OLTP, WEB e OLAP

● ETL

● Se possível segmentar mais

● work_mem individual

Page 17: Como lidar com cargas de trabalho mistas - PostgreSQL

17

3. Tablespaces

● Testar, testar

● Medir pg_statio_user_tables

● Verificar heap_blks_read e heap_blks_hit

● Medir pg_statio_user_indexes

● Verificar idx_blks_read e idx_blks_hit

● Separar quem usa mais

Page 18: Como lidar com cargas de trabalho mistas - PostgreSQL

18

3. Tablespaces● select relname, heap_blks_read + heap_blks_hit as heap_usage from

pg_statio_user_tables order by 2 desc;

● relname | heap_usage

● --------------------+------------

● tabela1 | 6020

● tabela2 | 932

● tabela3 | 5

● tabela4 | 1

Tablespace 1

Tablespace 2

Page 19: Como lidar com cargas de trabalho mistas - PostgreSQL

19

4. Funções

● Simples e diretas

● Abusar - INSERT INTO foo SELECT...

● Cautela - tabelas temporárias

● Evitar – loops

● Preferir SELECTs complicados ao invés de loops

Page 20: Como lidar com cargas de trabalho mistas - PostgreSQL

20

5. Testar muito

● Ter sempre dados de teste bons

● Próximos da realidade

● Em grande volume

● Testar cada função individualmente

● Testar cada consulta individualmente

● Otimizar uma coisa de cada vez

● NUNCA ASSUMIR POR ACHISMO!

Page 21: Como lidar com cargas de trabalho mistas - PostgreSQL

21

6. Já em produção

● O log é meu melhor amigo

● PgBadger meu fiel escudeiro

● Escolha o pior e otimize primeiro

● Fazer uma otimização de cada vez

● Sempre verificar o impacto no resto

● NUNCA ASSUMIR POR ACHISMO!

Page 22: Como lidar com cargas de trabalho mistas - PostgreSQL

22

Importante

● Entender estatísticas do PostgreSQL

● pg_stat_*

● pg_statio_*

● Entender resultados do PgBagder

● Não existe mágica

● Não é para principiantes (sozinhos)

● Que são sempre bem vindos para contribuir e aprender juntos

Page 23: Como lidar com cargas de trabalho mistas - PostgreSQL

23

Conclusão

● Existe trabalho também embaixo do capô

● Discos

● Sistema de arquivos

● Hardware bem comprado e montado

● Demais dicas PostgreSQL

Page 24: Como lidar com cargas de trabalho mistas - PostgreSQL

24

Obrigado!

● Flavio Henrique Araque Gurgel

[email protected]

● O nome mais forte em integração Open Source no Brasil● O maior case Open Source em missão crítica: Caixa Econômica Federal● Mais de 50.000 alunos treinados● Mais de 10 anos apenas com Open Source● Equipe multidisciplinar: analistas de negócios, programadores, arquitetos, sysadmins e

gerentes de projetos.● Quando pega um desafio, sai do outro lado● Parceira Red Hat, Zend, Puppetlabs, EnterpriseDB● Orientada a padrões abertos e melhores práticas