1. 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
3. 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
4. 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
6. 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;
8. 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;
9. 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.
10. 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;
11. 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
13. 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!!!
14. 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)
15. As vantagens
´E f´acil de automatizar;
´E bastante flex´ıvel;
´E poss´ıvel particionar tabelas j´a populadas;
16. 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!!!