The Postgres Chainsaw Massacre
Todas as emo¸
c˜
oes de um filme B sobre particionamento de
tabelas
F´
abio Telles Rodriguez
Timbira - A empresa brasileira de PostgreSQL
17 de agosto de 2013
PGBR2013
Slide 2
Slide 2 text
Apresenta¸
c˜
ao
F´
abio Telles Rodrigues
DBA Oracle e PostgreSQL +10 anos
Colaborador Comunidade Brasileira de PostgreSQL
Blog: http://savepoint.blog.br
@telles
Slide 3
Slide 3 text
Timbira
http://www.timbira.com.br
A empresa Brasileira de PostgreSQL
Consultoria / Desenvolvimento
Planos de Suporte
Parcerias com Empresas Desenvolvedoras de Software
Treinamentos In-Company e On-Line
Corre¸
c˜
ao de bugs no PostgreSQL garantida em contrato
Slide 4
Slide 4 text
Sobre esta apresenta¸
c˜
ao
esta apresenta¸
c˜
ao est´
a dispon´
ıvel em:
http://www.timbira.com.br/material
esta apresenta¸
c˜
ao est´
a sob licen¸
ca Creative Commons
Atribui¸
c˜
ao 3.0 Brasil:
http://creativecommons.org/licenses/by/3.0/br
Slide 5
Slide 5 text
Sobre o que estamos falando?
Slide 6
Slide 6 text
Sobre o que estamos falando?
Particionamento:
´
E um mal necess´
ario;
Ningu´
em quer fazˆ
e-lo se n˜
ao for absolutamente necess´
ario;
Usa o princ´
ıpio do ”dividir para conquistar”;
Se suas tabelas n˜
ao chegaram na casa dos 100GB, gaste seu
tempo com algo mais divertido como criar um bilh˜
ao de
tabelas;
Slide 7
Slide 7 text
Mantra
Nada ´
e t˜
ao ruim que n˜
ao possa piorar
Slide 8
Slide 8 text
Vantagens
Trabalhar com um volume de dados menor ´
e mais r´
apido;
Tabelas menores tem maior chance de caber no buffer em
mem´
oria;
Uma parti¸
c˜
ao mais acessada pode ficar em discos mais
r´
apidas;
Rotinas de expurgo podem trocar um DELETE por um DROP
TABLE ou TRUNCATE;
Rotinas de manuten¸
c˜
ao como VACUUM, CLUSTER,
REINDEX e ANALYZE podem rodar s´
o em uma parti¸
c˜
ao;
Slide 9
Slide 9 text
Implementa¸
c˜
ao no PostgreSQL
No PostgreSQL ´
e implementado gra¸
cas a uma gambiarra
chamada ”Heran¸
ca de tabelas”;
Ningu´
em levou a heran¸
ca de tabelas muito `
a s´
erio no
Postgres, exceto o seu criador, o Prof. Michael Stonebraker;
Come¸
cou a ser utilizado de verdade para particionamento a
partir da vers˜
ao 8.1;
Pequenas e importantes melhorias surgiram em todas vers˜
oes
subsequentes;
Estamos quase na vers˜
ao 9.3 e ainda assim ´
e uma gambiarra.
Funciona, mas ´
E UMA GAMBIARRA.
Slide 10
Slide 10 text
Modelagem
Sistemas com grande volume de dados tem de ser criados j´
a
pensando no particionamento;
A modelagem para o particionamento n˜
ao ´
e uma
particularidade do PostgreSQL. Todos SGDBs tem a mesma
limita¸
c˜
ao;
O particionamento consiste apenas em quebrar as tabelas em
peda¸
cos menores;
O grande problema ´
e decidir qual o crit´
erio para decidir quais
registros ficam em cada peda¸
co A.K.A. parti¸
c˜
ao;
O problema central consiste em escolher um campo chave
para o crit´
erio de divis˜
ao das tabelas;
Este campo deve estar presente como parte da PK composta
de todas tabelas particionadas;
Slide 11
Slide 11 text
M˜
ao na massa
Vamos criar nossa primeira tabela particionada com...
schema APP
usu´
arios APP e CLIENT
TABLESPACEs CLIENTE, VENDEDOR, PEDIDO,
PEDIDO DETALHE
GRANTs
PK, FK, CHECK
Parˆ
ametros de storage
Slide 12
Slide 12 text
Hora de estripar tabelas!!!
Slide 13
Slide 13 text
Hora de estripar tabelas!!!
Criar tabelas filhas, A.K.A parti¸
c˜
oes;
Remover constraint NO INHERIT;
Adicionar FKs;
Adicionar parˆ
ametros de storage;
Alterar dono permiss˜
oes na parti¸
c˜
ao;
Criar gatilho;
TESTAR!!!
Slide 14
Slide 14 text
Os Horrores
INSERT retorna 0 registros inseridos;
´
E poss´
ıvel criar parti¸
c˜
oes com chaves que se sobreponham;
Overhead criado pelo gatilho de INSERT;
Problemas com chaves estrangeiras (FKs)
Slide 15
Slide 15 text
As vantagens
´
E f´
acil de automatizar;
´
E bastante flex´
ıvel;
´
E poss´
ıvel particionar tabelas j´
a populadas;
Slide 16
Slide 16 text
Para os DBAs...
Durma bem antes de um novo deploy. Tire uns dias de folga;
N˜
ao deixe de tomar cerveja com os amigos...
Pratique exerc´
ıcios f´
ısicos regularmente!!!