Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The Postgres Chainsaw Massacre

The Postgres Chainsaw Massacre

Todas as emoções de um filme B sobre particionamento de tabelas no PostgreSQL

Tutorial realizado no PGBR 2013

Fábio Telles Rodriguez

August 17, 2013
Tweet

More Decks by Fábio Telles Rodriguez

Other Decks in Programming

Transcript

  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
  2. Apresenta¸ c˜ ao F´ abio Telles Rodrigues DBA Oracle e

    PostgreSQL +10 anos Colaborador Comunidade Brasileira de PostgreSQL Blog: http://savepoint.blog.br @telles
  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
  5. 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;
  6. 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;
  7. 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.
  8. 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;
  9. 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
  10. 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!!!
  11. 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)
  12. As vantagens ´ E f´ acil de automatizar; ´ E

    bastante flex´ ıvel; ´ E poss´ ıvel particionar tabelas j´ a populadas;
  13. 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!!!
  14. Perguntas ? F´ abio Telles Rodriguez ([email protected]) http://www.timbira.com.br http://savepoint.blog.br/particionamento-de-tabelas-no-postgres-quando http://savepoint.blog.br/particionamento-de-tabelas-no-postgres-como

    http://savepoint.blog.br/particionamento-de-tabelas-no-postgres-detalhes http://savepoint.blog.br/particionamento-de-tabelas-no-postgres-automatizando