SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
T´ecnicas de Database Refactoring para ambientes 24x7
Matheus de Oliveira
<matheus.oliveira@dextra.com.br>
Apresentado no
27 de Mar¸co de 2015
Matheus de Oliveira
<matheus.oliveira@dextra.com.br>
DBA PostgreSQL – consultorias e suportes
24x7/8x5
Instrutor dos treinamentos PostgreSQL
Concep¸c˜ao, desenvolvimento e suporte `a
produ¸c˜ao
Matheus de Oliveira
<matheus.oliveira@dextra.com.br>
Mais de 15 anos trabalhando de suporte e
consultoria PostgreSQL
http://www.dextra.com.br/
“Crafting Software, Transforming Business”
Instrutor dos treinamentos PostgreSQL
Concep¸c˜ao, desenvolvimento e suporte `a
produ¸c˜ao
Matheus de Oliveira
<matheus.oliveira@dextra.com.br>
Mais de 15 anos trabalhando de suporte e
consultoria PostgreSQL
http://www.dextra.com.br/
“Crafting Software, Transforming Business”
10 anos e mais de 10 mil profissionais
capacitados em todo o Brasil.
http://www.dextraining.com.br/
“Aprenda com quem faz na pr´atica”
Concep¸c˜ao, desenvolvimento e suporte `a
produ¸c˜ao
Matheus de Oliveira
<matheus.oliveira@dextra.com.br>
Mais de 15 anos trabalhando de suporte e
consultoria PostgreSQL
http://www.dextra.com.br/
“Crafting Software, Transforming Business”
10 anos e mais de 10 mil profissionais
capacitados em todo o Brasil.
http://www.dextraining.com.br/
“Aprenda com quem faz na pr´atica”
SaaS para an´alise e monitoramento PostgreSQL
http://www.pganalytics.com.br/
“Facilitando a vida do DBA”
Database
Refactoring
Database Refactoring abc
“A simple change to a database schema that improves its design
while retaining both its behavioral and informational semantics – in
other words, you can neither add new functionality nor break existing
functionality, nor can you add new data nor change the meaning of
existing data.”
Scott Ambler and Pramod Sadalage (2006).
Refactoring databases: Evolutionary database design.
Addison-Wesley.
4 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring abc
• Segue a mesma ideia e princ´ıpios de refatora¸c˜ao de c´odigo, s´o que
´e considerado um pouco mais dif´ıcil.
• Escrever e evoluir o c´odigo de forma disciplinada:
◦ nem t˜ao importante durante o desenvolvimento inicial (antes de entrar
em produ¸c˜ao);
◦ essencial (pra todos?) ap´os ter entrado em produ¸c˜ao.
• Desenvolvedores, DBAs, sysadmins... DevOps... Todos
trabalhando juntos com um objetivo em comum
5 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring abc
Estrat´egia:
6 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring abc
Mais dif´ıcil do que parece:
7 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring – exemplos abc
Podemos dividir os tipos de refatora¸c˜ao em 6 categorias:
• Estrutural (structural);
• Qualidade dos dados (data quality);
• Integridade referencial (referential integrity);
• Arquitetural (architectural);
• M´etodos/fun¸c˜oes (method);
• Transforma¸c˜ao (non-refactoring transformation).
8 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring – exemplos abc
Incrementar o esquema ´e f´acil:
9 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring – exemplos abc
SELECT ... FROM mensagens m
LEFT JOIN usuario_local l
ON l.usuario_id = m.de_id
AND m.data_hora BETWEEN l.data_ini
AND l.data_fim
10 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring – exemplos abc
Em alguns casos, como no exemplo, n˜ao h´a necessidade de
sincroniza¸c˜ao:
• adicionar colunas `a tabelas, desde que essas possam ser NULL ou
tenham um valor DEFAULT definido;
• adicionar novas tabelas, vis˜oes ou fun¸c˜oes ao modelo;
• adicionar fun¸c˜oes que mantenham compatibilidade.
11 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring – exemplos abc
Mudar a estrutura j´a ´e mais complicado:
12 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring – sincroniza¸c˜ao abc
Para muitos casos, como renomear uma coluna, mover de uma tabela
para outra, remover uma tabela, entre outros; ´e necess´ario um
mecanismo de sincroniza¸c˜ao. Estes podem ser feitos via:
• gatilhos (triggers);
• vis˜oes (views);
• atualiza¸c˜oes em lote (batch updates);
13 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring – dicasabc
• Tenha diversos ambientes (sandboxes para desenvolvedores,
ambiente de teste de carga, demonstra¸c˜ao, QA, etc.);
14 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring – dicasabc
• Tenha diversos ambientes (sandboxes para desenvolvedores,
ambiente de teste de carga, demonstra¸c˜ao, QA, etc.);
• Mantenha o versionamento da base num controle de vers˜oes, e
tamb´em a informa¸c˜ao da vers˜ao atual na pr´opria base (use
ferramentas como Sqitch, dbdeploy, Flyway, etc... ou fa¸ca a sua);
14 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring – dicasabc
• Tenha diversos ambientes (sandboxes para desenvolvedores,
ambiente de teste de carga, demonstra¸c˜ao, QA, etc.);
• Mantenha o versionamento da base num controle de vers˜oes, e
tamb´em a informa¸c˜ao da vers˜ao atual na pr´opria base (use
ferramentas como Sqitch, dbdeploy, Flyway, etc... ou fa¸ca a sua);
• Use ambientes de Integra¸c˜ao Cont´ınua (Continuous Integration);
14 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring – dicasabc
• Tenha diversos ambientes (sandboxes para desenvolvedores,
ambiente de teste de carga, demonstra¸c˜ao, QA, etc.);
• Mantenha o versionamento da base num controle de vers˜oes, e
tamb´em a informa¸c˜ao da vers˜ao atual na pr´opria base (use
ferramentas como Sqitch, dbdeploy, Flyway, etc... ou fa¸ca a sua);
• Use ambientes de Integra¸c˜ao Cont´ınua (Continuous Integration);
• Pequenas modifica¸c˜oes s˜ao mais f´aceis de aplicar e testar (tente
dividir uma grande tarefa e v´arias menores);
14 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring – dicasabc
• Tenha diversos ambientes (sandboxes para desenvolvedores,
ambiente de teste de carga, demonstra¸c˜ao, QA, etc.);
• Mantenha o versionamento da base num controle de vers˜oes, e
tamb´em a informa¸c˜ao da vers˜ao atual na pr´opria base (use
ferramentas como Sqitch, dbdeploy, Flyway, etc... ou fa¸ca a sua);
• Use ambientes de Integra¸c˜ao Cont´ınua (Continuous Integration);
• Pequenas modifica¸c˜oes s˜ao mais f´aceis de aplicar e testar (tente
dividir uma grande tarefa e v´arias menores);
• Automatize tudo;
14 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring – dicasabc
• Tenha diversos ambientes (sandboxes para desenvolvedores,
ambiente de teste de carga, demonstra¸c˜ao, QA, etc.);
• Mantenha o versionamento da base num controle de vers˜oes, e
tamb´em a informa¸c˜ao da vers˜ao atual na pr´opria base (use
ferramentas como Sqitch, dbdeploy, Flyway, etc... ou fa¸ca a sua);
• Use ambientes de Integra¸c˜ao Cont´ınua (Continuous Integration);
• Pequenas modifica¸c˜oes s˜ao mais f´aceis de aplicar e testar (tente
dividir uma grande tarefa e v´arias menores);
• Automatize tudo;
• Fa¸ca as pazes entre desenvolvedores e DBAs (dica:
pair-programming entre ambos sempre que poss´ıvel)... =) ;
14 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring – dicasabc
• Tenha diversos ambientes (sandboxes para desenvolvedores,
ambiente de teste de carga, demonstra¸c˜ao, QA, etc.);
• Mantenha o versionamento da base num controle de vers˜oes, e
tamb´em a informa¸c˜ao da vers˜ao atual na pr´opria base (use
ferramentas como Sqitch, dbdeploy, Flyway, etc... ou fa¸ca a sua);
• Use ambientes de Integra¸c˜ao Cont´ınua (Continuous Integration);
• Pequenas modifica¸c˜oes s˜ao mais f´aceis de aplicar e testar (tente
dividir uma grande tarefa e v´arias menores);
• Automatize tudo;
• Fa¸ca as pazes entre desenvolvedores e DBAs (dica:
pair-programming entre ambos sempre que poss´ıvel)... =) ;
• Teste...
14 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring – dicasabc
• Tenha diversos ambientes (sandboxes para desenvolvedores,
ambiente de teste de carga, demonstra¸c˜ao, QA, etc.);
• Mantenha o versionamento da base num controle de vers˜oes, e
tamb´em a informa¸c˜ao da vers˜ao atual na pr´opria base (use
ferramentas como Sqitch, dbdeploy, Flyway, etc... ou fa¸ca a sua);
• Use ambientes de Integra¸c˜ao Cont´ınua (Continuous Integration);
• Pequenas modifica¸c˜oes s˜ao mais f´aceis de aplicar e testar (tente
dividir uma grande tarefa e v´arias menores);
• Automatize tudo;
• Fa¸ca as pazes entre desenvolvedores e DBAs (dica:
pair-programming entre ambos sempre que poss´ıvel)... =) ;
• Teste...
• Teste...
14 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Database Refactoring – dicasabc
• Tenha diversos ambientes (sandboxes para desenvolvedores,
ambiente de teste de carga, demonstra¸c˜ao, QA, etc.);
• Mantenha o versionamento da base num controle de vers˜oes, e
tamb´em a informa¸c˜ao da vers˜ao atual na pr´opria base (use
ferramentas como Sqitch, dbdeploy, Flyway, etc... ou fa¸ca a sua);
• Use ambientes de Integra¸c˜ao Cont´ınua (Continuous Integration);
• Pequenas modifica¸c˜oes s˜ao mais f´aceis de aplicar e testar (tente
dividir uma grande tarefa e v´arias menores);
• Automatize tudo;
• Fa¸ca as pazes entre desenvolvedores e DBAs (dica:
pair-programming entre ambos sempre que poss´ıvel)... =) ;
• Teste...
• Teste...
• TESTE!!!
14 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime
Upgrades
Zero Downtime Upgradesabc
• Existe um mito que qualquer atualiza¸c˜oes em bancos de dados
relacionais ´e extremamente lenta.
• ´E fato que opera¸c˜oes DDL (Data Definition Language) muitas
vezes bloqueiam opera¸c˜oes DML (Data Manipulation Language),
mas ´e poss´ıvel fazer com que este bloqueio seja extremamente
r´apido na grande maioria dos casos.
16 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime Upgrades – ALTER TABLE abc
• Sem d´uvida o comando que gera maiores d´uvidas e dores de
cabe¸ca.
• Para executar um ALTER TABLE o banco de dados necessita de um
bloqueio exclusivo da tabela (em muitos casos bloqueando at´e
consultas), mas existem basicamente dois mecanismos para um
ALTER TABLE atualizar o esquema:
◦ com necessidade de reescrita – a tabela ´e atualizada completamente
(in-place ou usando arquivos tempor´arios) + atualiza¸c˜ao de cat´alogo;
◦ sem necessidade de reescrita – apenas atualiza¸c˜ao de cat´alogo.
• A necessidade ou n˜ao de reescrita depende do SGDB e do
comando executado, vamos ver alguns exemplos e como s˜ao
tratados no PostgreSQL, Oracle e MySQL.
17 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime Upgrades – ALTER TABLE abc
Adicionar coluna, sem valor DEFAULT:
ALTER TABLE usuarios
ADD lat NUMERIC;
PostgreSQL : sem reescrita;
Oracle : sem reescrita;
MySQL : com reescrita (mas a partir da vers˜ao 5.6 ´e poss´ıvel
reescrita in-place e sem bloqueio de opera¸c˜oes DML –
exceto para auto increment);
18 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime Upgrades – ALTER TABLE abc
Adicionar coluna, com valor DEFAULT:
ALTER TABLE usuarios
ADD ativo BOOLEAN DEFAULT true ;
PostgreSQL : com reescrita (devido `a necessidade do valor
DEFAULT);
Oracle : com reescrita (devido `a necessidade do valor
DEFAULT);
MySQL : com reescrita (mesmas considera¸c˜oes do anterior);
19 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime Upgrades – ALTER TABLE abc
Adicionar coluna, com valor DEFAULT e NOT NULL:
ALTER TABLE usuarios
ADD ativo BOOLEAN DEFAULT true NOT NULL;
PostgreSQL : com reescrita (devido `a necessidade do valor
DEFAULT);
Oracle : sem reescrita (a partir da vers˜ao 11g, anteriormente a
reescrita era necess´aria);
MySQL : com reescrita (mesmas considera¸c˜oes do anterior);
Para adi¸c˜ao de colunas com valor DEFAULT (exceto MySQL 5.6+),
uma pr´atica comum ´e adicionar a coluna sem DEFAULT, definir o
DEFAULT em outra opera¸c˜ao e fazer um UPDATE em grupos
(batches) e/ou em paralelo para aplicar `as linhas antigas.
20 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime Upgrades – ALTER TABLE abc
Remover coluna:
ALTER TABLE usuarios
DROP fone_casa;
PostgreSQL : sem reescrita;
Oracle : sem reescrita se usando o comando:
ALTER TABLE usuarios ALTER fone_casa SET UNUSED
;
MySQL : com reescrita (mas a partir da vers˜ao 5.6 ´e poss´ıvel
reescrita in-place e sem bloqueio de opera¸c˜oes DML);
21 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime Upgrades – ALTER TABLE abc
Alterar tipo de uma coluna:
ALTER TABLE usuarios
ALTER lat TYPE b i g i n t ;
PostgreSQL : com reescrita;
Oracle : com reescrita;
MySQL : com reescrita;
22 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime Upgrades – ALTER TABLE abc
Alterar limite de uma coluna:
ALTER TABLE usuarios
ALTER nome TYPE varchar (100);
PostgreSQL : a partir da vers˜ao 9.2, sem reescrita somente se o
limite estiver aumentando (ou remo¸c˜ao de limite);
Oracle : sem reescrita somente se o limite estiver aumentando;
MySQL : a partir da vers˜ao 5.6, sem reescrita somente se o
limite estiver aumentando;
23 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime Upgrades – ALTER TABLE abc
Cria¸c˜ao de ´ındices.
PostgreSQL : diminui o bloqueio se usado CREATE INDEX
CONCURRENTLY ...;
Oracle : diminui o bloqueio se usado CREATE INDEX ...
ONLINE;
MySQL : n˜ao bloqueia para ´ındices secund´arios, exceto
FULLTEXT (InnoDB 5.1+, demais 5.6+).
24 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime Upgrades – dicasabc
• Nunca se preocupe com a posi¸c˜ao das colunas numa tabela,
mapeia as posi¸c˜oes l´ogicas no seu c´odigo/aplica¸c˜ao;
25 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime Upgrades – dicasabc
• Nunca se preocupe com a posi¸c˜ao das colunas numa tabela,
mapeia as posi¸c˜oes l´ogicas no seu c´odigo/aplica¸c˜ao;
• Nunca utilize o famigerado SELECT * ;
25 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime Upgrades – dicasabc
• Nunca se preocupe com a posi¸c˜ao das colunas numa tabela,
mapeia as posi¸c˜oes l´ogicas no seu c´odigo/aplica¸c˜ao;
• Nunca utilize o famigerado SELECT * ;
• Tente executar essas migra¸c˜oes em momentos de menor
atividade, mesmo que sejam sem reescrita;
25 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime Upgrades – dicasabc
• Nunca se preocupe com a posi¸c˜ao das colunas numa tabela,
mapeia as posi¸c˜oes l´ogicas no seu c´odigo/aplica¸c˜ao;
• Nunca utilize o famigerado SELECT * ;
• Tente executar essas migra¸c˜oes em momentos de menor
atividade, mesmo que sejam sem reescrita;
• Execute scripts de migra¸c˜ao parte a parte, algumas vezes um
´unico script de migra¸c˜ao pode levar dias;
25 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime Upgrades – dicasabc
• Nunca se preocupe com a posi¸c˜ao das colunas numa tabela,
mapeia as posi¸c˜oes l´ogicas no seu c´odigo/aplica¸c˜ao;
• Nunca utilize o famigerado SELECT * ;
• Tente executar essas migra¸c˜oes em momentos de menor
atividade, mesmo que sejam sem reescrita;
• Execute scripts de migra¸c˜ao parte a parte, algumas vezes um
´unico script de migra¸c˜ao pode levar dias;
• Automatize tudo que for poss´ıvel, mas acompanhe a execu¸c˜ao
quando for em produ¸c˜ao.
25 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime Upgrades – dicasabc
• Nunca se preocupe com a posi¸c˜ao das colunas numa tabela,
mapeia as posi¸c˜oes l´ogicas no seu c´odigo/aplica¸c˜ao;
• Nunca utilize o famigerado SELECT * ;
• Tente executar essas migra¸c˜oes em momentos de menor
atividade, mesmo que sejam sem reescrita;
• Execute scripts de migra¸c˜ao parte a parte, algumas vezes um
´unico script de migra¸c˜ao pode levar dias;
• Automatize tudo que for poss´ıvel, mas acompanhe a execu¸c˜ao
quando for em produ¸c˜ao.
• Teste...
25 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime Upgrades – dicasabc
• Nunca se preocupe com a posi¸c˜ao das colunas numa tabela,
mapeia as posi¸c˜oes l´ogicas no seu c´odigo/aplica¸c˜ao;
• Nunca utilize o famigerado SELECT * ;
• Tente executar essas migra¸c˜oes em momentos de menor
atividade, mesmo que sejam sem reescrita;
• Execute scripts de migra¸c˜ao parte a parte, algumas vezes um
´unico script de migra¸c˜ao pode levar dias;
• Automatize tudo que for poss´ıvel, mas acompanhe a execu¸c˜ao
quando for em produ¸c˜ao.
• Teste...
• Teste...
25 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Zero Downtime Upgrades – dicasabc
• Nunca se preocupe com a posi¸c˜ao das colunas numa tabela,
mapeia as posi¸c˜oes l´ogicas no seu c´odigo/aplica¸c˜ao;
• Nunca utilize o famigerado SELECT * ;
• Tente executar essas migra¸c˜oes em momentos de menor
atividade, mesmo que sejam sem reescrita;
• Execute scripts de migra¸c˜ao parte a parte, algumas vezes um
´unico script de migra¸c˜ao pode levar dias;
• Automatize tudo que for poss´ıvel, mas acompanhe a execu¸c˜ao
quando for em produ¸c˜ao.
• Teste...
• Teste...
• TESTE!!!
25 / 26
T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
Obrigado!abc
D´uvidas?
Matheus de Oliveira
<matheus.oliveira@dextra.com.br>
IRC – irc.freenode.net:
/join #postgresql,#postgresql-br,#dextra
Meu nick: MatheusOl
Twitter: @matioli matheus
LinkedIn: br.linkedin.com/in/matheusdeoliveira/
SlideShare: slideshare.net/matheus de oliveira

Mais conteúdo relacionado

Destaque

O que você acha que sabe sobre banco de dados
O que você acha que sabe sobre banco de dadosO que você acha que sabe sobre banco de dados
O que você acha que sabe sobre banco de dadosMatheus de Oliveira
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
Is agile adoption losing steam?
Is agile adoption losing steam?Is agile adoption losing steam?
Is agile adoption losing steam?Go2Group, Inc.
 
Software Configuration Management Problemas e Soluções
Software Configuration Management Problemas e SoluçõesSoftware Configuration Management Problemas e Soluções
Software Configuration Management Problemas e Soluçõeselliando dias
 
Delphix modernization whitepaper
Delphix  modernization whitepaperDelphix  modernization whitepaper
Delphix modernization whitepaperFranco_Dagosto
 
DBTA Data Summit : Eliminating the data constraint in Application Development
DBTA Data Summit : Eliminating the data constraint in Application DevelopmentDBTA Data Summit : Eliminating the data constraint in Application Development
DBTA Data Summit : Eliminating the data constraint in Application DevelopmentKyle Hailey
 
Tui Travel - Overcoming the Challenges of Agile Methods
Tui Travel - Overcoming the Challenges of Agile MethodsTui Travel - Overcoming the Challenges of Agile Methods
Tui Travel - Overcoming the Challenges of Agile MethodsDBmaestro - Database DevOps
 
Trustworthy Transparency and Lean Traceability
Trustworthy Transparency and Lean TraceabilityTrustworthy Transparency and Lean Traceability
Trustworthy Transparency and Lean TraceabilityBrad Appleton
 
Kscope 2013 delphix
Kscope 2013 delphixKscope 2013 delphix
Kscope 2013 delphixKyle Hailey
 
Go2Group_secrets of high-performing software teams_EAD event_san jose_Doug Bass
Go2Group_secrets of high-performing software teams_EAD event_san jose_Doug BassGo2Group_secrets of high-performing software teams_EAD event_san jose_Doug Bass
Go2Group_secrets of high-performing software teams_EAD event_san jose_Doug BassGo2Group, Inc.
 
WANTED: Seeking Single Agile Knowledge Development Tool-set
WANTED: Seeking Single Agile Knowledge Development Tool-setWANTED: Seeking Single Agile Knowledge Development Tool-set
WANTED: Seeking Single Agile Knowledge Development Tool-setBrad Appleton
 
Delphix and DBmaestro
Delphix and DBmaestroDelphix and DBmaestro
Delphix and DBmaestroKyle Hailey
 
How do you deliver your applications to the cloud?
How do you deliver your applications to the cloud?How do you deliver your applications to the cloud?
How do you deliver your applications to the cloud?Michael Elder
 
Continuous delivery made possible
Continuous delivery made possibleContinuous delivery made possible
Continuous delivery made possiblemimmozzo_
 
Test case management and requirements traceability
Test case management and requirements traceabilityTest case management and requirements traceability
Test case management and requirements traceabilityGo2Group, Inc.
 
Agile Configuration Management Environments
Agile Configuration Management EnvironmentsAgile Configuration Management Environments
Agile Configuration Management EnvironmentsBrad Appleton
 

Destaque (20)

O que você acha que sabe sobre banco de dados
O que você acha que sabe sobre banco de dadosO que você acha que sabe sobre banco de dados
O que você acha que sabe sobre banco de dados
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Is agile adoption losing steam?
Is agile adoption losing steam?Is agile adoption losing steam?
Is agile adoption losing steam?
 
P4 Branching Overview
P4 Branching OverviewP4 Branching Overview
P4 Branching Overview
 
Software Configuration Management Problemas e Soluções
Software Configuration Management Problemas e SoluçõesSoftware Configuration Management Problemas e Soluções
Software Configuration Management Problemas e Soluções
 
Delphix modernization whitepaper
Delphix  modernization whitepaperDelphix  modernization whitepaper
Delphix modernization whitepaper
 
In (database) automation we trust
In (database) automation we trustIn (database) automation we trust
In (database) automation we trust
 
DBTA Data Summit : Eliminating the data constraint in Application Development
DBTA Data Summit : Eliminating the data constraint in Application DevelopmentDBTA Data Summit : Eliminating the data constraint in Application Development
DBTA Data Summit : Eliminating the data constraint in Application Development
 
Jenkins Plugin
Jenkins PluginJenkins Plugin
Jenkins Plugin
 
Tui Travel - Overcoming the Challenges of Agile Methods
Tui Travel - Overcoming the Challenges of Agile MethodsTui Travel - Overcoming the Challenges of Agile Methods
Tui Travel - Overcoming the Challenges of Agile Methods
 
Trustworthy Transparency and Lean Traceability
Trustworthy Transparency and Lean TraceabilityTrustworthy Transparency and Lean Traceability
Trustworthy Transparency and Lean Traceability
 
Kscope 2013 delphix
Kscope 2013 delphixKscope 2013 delphix
Kscope 2013 delphix
 
Go2Group_secrets of high-performing software teams_EAD event_san jose_Doug Bass
Go2Group_secrets of high-performing software teams_EAD event_san jose_Doug BassGo2Group_secrets of high-performing software teams_EAD event_san jose_Doug Bass
Go2Group_secrets of high-performing software teams_EAD event_san jose_Doug Bass
 
Faking Hell
Faking HellFaking Hell
Faking Hell
 
WANTED: Seeking Single Agile Knowledge Development Tool-set
WANTED: Seeking Single Agile Knowledge Development Tool-setWANTED: Seeking Single Agile Knowledge Development Tool-set
WANTED: Seeking Single Agile Knowledge Development Tool-set
 
Delphix and DBmaestro
Delphix and DBmaestroDelphix and DBmaestro
Delphix and DBmaestro
 
How do you deliver your applications to the cloud?
How do you deliver your applications to the cloud?How do you deliver your applications to the cloud?
How do you deliver your applications to the cloud?
 
Continuous delivery made possible
Continuous delivery made possibleContinuous delivery made possible
Continuous delivery made possible
 
Test case management and requirements traceability
Test case management and requirements traceabilityTest case management and requirements traceability
Test case management and requirements traceability
 
Agile Configuration Management Environments
Agile Configuration Management EnvironmentsAgile Configuration Management Environments
Agile Configuration Management Environments
 

Semelhante a Técnicas de Database Refactoring para ambientes 24x7

Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareNorberto Santos
 
Refactoring Databases
Refactoring DatabasesRefactoring Databases
Refactoring DatabasesIsmael
 
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas DistribuídosQConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas DistribuídosEiti Kimura
 
Indo para o proximo nivel: MCSM e MCA em SQL Server 2012
Indo para o proximo nivel:  MCSM e MCA em SQL Server 2012Indo para o proximo nivel:  MCSM e MCA em SQL Server 2012
Indo para o proximo nivel: MCSM e MCA em SQL Server 2012Fabrício Catae
 
Devops: Gestão e publicação de Dados no SQL Server
Devops: Gestão e publicação de Dados no SQL ServerDevops: Gestão e publicação de Dados no SQL Server
Devops: Gestão e publicação de Dados no SQL ServerIgor Rosa Macedo
 
Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Fabrízio Mello
 
MIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como CódigoMIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como CódigoCaio Candido
 
Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)Fabrízio Mello
 
Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Fabrízio Mello
 
TechNet Wiki Summit 2015 - DevOps
TechNet Wiki Summit 2015 - DevOpsTechNet Wiki Summit 2015 - DevOps
TechNet Wiki Summit 2015 - DevOpsAlan Carlos
 
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...Fabrízio Mello
 
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Wagner Bianchi
 
[ServiceNow] Governança da Plataforma (5ª edição)
[ServiceNow] Governança da Plataforma (5ª edição)[ServiceNow] Governança da Plataforma (5ª edição)
[ServiceNow] Governança da Plataforma (5ª edição)Alessandro Almeida
 
Katálysis - Webshow - Automação Laboratorial V
Katálysis - Webshow - Automação Laboratorial VKatálysis - Webshow - Automação Laboratorial V
Katálysis - Webshow - Automação Laboratorial VKatálysis Científica
 
Boas práticas para deploy contínuo com drupal
Boas práticas para deploy contínuo com drupalBoas práticas para deploy contínuo com drupal
Boas práticas para deploy contínuo com drupalRenato Vasconcellos Gomes
 
Estrategias de backup e recovery
Estrategias de backup e recoveryEstrategias de backup e recovery
Estrategias de backup e recoveryRodrigo Crespi
 
Monitorando APIs REST com o Application Insights
Monitorando APIs REST com o Application InsightsMonitorando APIs REST com o Application Insights
Monitorando APIs REST com o Application InsightsRenato Groff
 

Semelhante a Técnicas de Database Refactoring para ambientes 24x7 (20)

Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de Software
 
Refactoring Databases
Refactoring DatabasesRefactoring Databases
Refactoring Databases
 
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas DistribuídosQConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
 
Indo para o proximo nivel: MCSM e MCA em SQL Server 2012
Indo para o proximo nivel:  MCSM e MCA em SQL Server 2012Indo para o proximo nivel:  MCSM e MCA em SQL Server 2012
Indo para o proximo nivel: MCSM e MCA em SQL Server 2012
 
Devops: Gestão e publicação de Dados no SQL Server
Devops: Gestão e publicação de Dados no SQL ServerDevops: Gestão e publicação de Dados no SQL Server
Devops: Gestão e publicação de Dados no SQL Server
 
Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009
 
MIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como CódigoMIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como Código
 
Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)
 
Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010
 
TechNet Wiki Summit 2015 - DevOps
TechNet Wiki Summit 2015 - DevOpsTechNet Wiki Summit 2015 - DevOps
TechNet Wiki Summit 2015 - DevOps
 
TechEd_OFC305
TechEd_OFC305TechEd_OFC305
TechEd_OFC305
 
TechEd_OFC302
TechEd_OFC302TechEd_OFC302
TechEd_OFC302
 
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...
 
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
 
[ServiceNow] Governança da Plataforma (5ª edição)
[ServiceNow] Governança da Plataforma (5ª edição)[ServiceNow] Governança da Plataforma (5ª edição)
[ServiceNow] Governança da Plataforma (5ª edição)
 
Cv luciano stoppa ptb
Cv luciano stoppa ptbCv luciano stoppa ptb
Cv luciano stoppa ptb
 
Katálysis - Webshow - Automação Laboratorial V
Katálysis - Webshow - Automação Laboratorial VKatálysis - Webshow - Automação Laboratorial V
Katálysis - Webshow - Automação Laboratorial V
 
Boas práticas para deploy contínuo com drupal
Boas práticas para deploy contínuo com drupalBoas práticas para deploy contínuo com drupal
Boas práticas para deploy contínuo com drupal
 
Estrategias de backup e recovery
Estrategias de backup e recoveryEstrategias de backup e recovery
Estrategias de backup e recovery
 
Monitorando APIs REST com o Application Insights
Monitorando APIs REST com o Application InsightsMonitorando APIs REST com o Application Insights
Monitorando APIs REST com o Application Insights
 

Técnicas de Database Refactoring para ambientes 24x7

  • 1. T´ecnicas de Database Refactoring para ambientes 24x7 Matheus de Oliveira <matheus.oliveira@dextra.com.br> Apresentado no 27 de Mar¸co de 2015
  • 2. Matheus de Oliveira <matheus.oliveira@dextra.com.br> DBA PostgreSQL – consultorias e suportes 24x7/8x5 Instrutor dos treinamentos PostgreSQL Concep¸c˜ao, desenvolvimento e suporte `a produ¸c˜ao
  • 3. Matheus de Oliveira <matheus.oliveira@dextra.com.br> Mais de 15 anos trabalhando de suporte e consultoria PostgreSQL http://www.dextra.com.br/ “Crafting Software, Transforming Business” Instrutor dos treinamentos PostgreSQL Concep¸c˜ao, desenvolvimento e suporte `a produ¸c˜ao
  • 4. Matheus de Oliveira <matheus.oliveira@dextra.com.br> Mais de 15 anos trabalhando de suporte e consultoria PostgreSQL http://www.dextra.com.br/ “Crafting Software, Transforming Business” 10 anos e mais de 10 mil profissionais capacitados em todo o Brasil. http://www.dextraining.com.br/ “Aprenda com quem faz na pr´atica” Concep¸c˜ao, desenvolvimento e suporte `a produ¸c˜ao
  • 5. Matheus de Oliveira <matheus.oliveira@dextra.com.br> Mais de 15 anos trabalhando de suporte e consultoria PostgreSQL http://www.dextra.com.br/ “Crafting Software, Transforming Business” 10 anos e mais de 10 mil profissionais capacitados em todo o Brasil. http://www.dextraining.com.br/ “Aprenda com quem faz na pr´atica” SaaS para an´alise e monitoramento PostgreSQL http://www.pganalytics.com.br/ “Facilitando a vida do DBA”
  • 7. Database Refactoring abc “A simple change to a database schema that improves its design while retaining both its behavioral and informational semantics – in other words, you can neither add new functionality nor break existing functionality, nor can you add new data nor change the meaning of existing data.” Scott Ambler and Pramod Sadalage (2006). Refactoring databases: Evolutionary database design. Addison-Wesley. 4 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 8. Database Refactoring abc • Segue a mesma ideia e princ´ıpios de refatora¸c˜ao de c´odigo, s´o que ´e considerado um pouco mais dif´ıcil. • Escrever e evoluir o c´odigo de forma disciplinada: ◦ nem t˜ao importante durante o desenvolvimento inicial (antes de entrar em produ¸c˜ao); ◦ essencial (pra todos?) ap´os ter entrado em produ¸c˜ao. • Desenvolvedores, DBAs, sysadmins... DevOps... Todos trabalhando juntos com um objetivo em comum 5 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 9. Database Refactoring abc Estrat´egia: 6 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 10. Database Refactoring abc Mais dif´ıcil do que parece: 7 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 11. Database Refactoring – exemplos abc Podemos dividir os tipos de refatora¸c˜ao em 6 categorias: • Estrutural (structural); • Qualidade dos dados (data quality); • Integridade referencial (referential integrity); • Arquitetural (architectural); • M´etodos/fun¸c˜oes (method); • Transforma¸c˜ao (non-refactoring transformation). 8 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 12. Database Refactoring – exemplos abc Incrementar o esquema ´e f´acil: 9 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 13. Database Refactoring – exemplos abc SELECT ... FROM mensagens m LEFT JOIN usuario_local l ON l.usuario_id = m.de_id AND m.data_hora BETWEEN l.data_ini AND l.data_fim 10 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 14. Database Refactoring – exemplos abc Em alguns casos, como no exemplo, n˜ao h´a necessidade de sincroniza¸c˜ao: • adicionar colunas `a tabelas, desde que essas possam ser NULL ou tenham um valor DEFAULT definido; • adicionar novas tabelas, vis˜oes ou fun¸c˜oes ao modelo; • adicionar fun¸c˜oes que mantenham compatibilidade. 11 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 15. Database Refactoring – exemplos abc Mudar a estrutura j´a ´e mais complicado: 12 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 16. Database Refactoring – sincroniza¸c˜ao abc Para muitos casos, como renomear uma coluna, mover de uma tabela para outra, remover uma tabela, entre outros; ´e necess´ario um mecanismo de sincroniza¸c˜ao. Estes podem ser feitos via: • gatilhos (triggers); • vis˜oes (views); • atualiza¸c˜oes em lote (batch updates); 13 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 17. Database Refactoring – dicasabc • Tenha diversos ambientes (sandboxes para desenvolvedores, ambiente de teste de carga, demonstra¸c˜ao, QA, etc.); 14 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 18. Database Refactoring – dicasabc • Tenha diversos ambientes (sandboxes para desenvolvedores, ambiente de teste de carga, demonstra¸c˜ao, QA, etc.); • Mantenha o versionamento da base num controle de vers˜oes, e tamb´em a informa¸c˜ao da vers˜ao atual na pr´opria base (use ferramentas como Sqitch, dbdeploy, Flyway, etc... ou fa¸ca a sua); 14 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 19. Database Refactoring – dicasabc • Tenha diversos ambientes (sandboxes para desenvolvedores, ambiente de teste de carga, demonstra¸c˜ao, QA, etc.); • Mantenha o versionamento da base num controle de vers˜oes, e tamb´em a informa¸c˜ao da vers˜ao atual na pr´opria base (use ferramentas como Sqitch, dbdeploy, Flyway, etc... ou fa¸ca a sua); • Use ambientes de Integra¸c˜ao Cont´ınua (Continuous Integration); 14 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 20. Database Refactoring – dicasabc • Tenha diversos ambientes (sandboxes para desenvolvedores, ambiente de teste de carga, demonstra¸c˜ao, QA, etc.); • Mantenha o versionamento da base num controle de vers˜oes, e tamb´em a informa¸c˜ao da vers˜ao atual na pr´opria base (use ferramentas como Sqitch, dbdeploy, Flyway, etc... ou fa¸ca a sua); • Use ambientes de Integra¸c˜ao Cont´ınua (Continuous Integration); • Pequenas modifica¸c˜oes s˜ao mais f´aceis de aplicar e testar (tente dividir uma grande tarefa e v´arias menores); 14 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 21. Database Refactoring – dicasabc • Tenha diversos ambientes (sandboxes para desenvolvedores, ambiente de teste de carga, demonstra¸c˜ao, QA, etc.); • Mantenha o versionamento da base num controle de vers˜oes, e tamb´em a informa¸c˜ao da vers˜ao atual na pr´opria base (use ferramentas como Sqitch, dbdeploy, Flyway, etc... ou fa¸ca a sua); • Use ambientes de Integra¸c˜ao Cont´ınua (Continuous Integration); • Pequenas modifica¸c˜oes s˜ao mais f´aceis de aplicar e testar (tente dividir uma grande tarefa e v´arias menores); • Automatize tudo; 14 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 22. Database Refactoring – dicasabc • Tenha diversos ambientes (sandboxes para desenvolvedores, ambiente de teste de carga, demonstra¸c˜ao, QA, etc.); • Mantenha o versionamento da base num controle de vers˜oes, e tamb´em a informa¸c˜ao da vers˜ao atual na pr´opria base (use ferramentas como Sqitch, dbdeploy, Flyway, etc... ou fa¸ca a sua); • Use ambientes de Integra¸c˜ao Cont´ınua (Continuous Integration); • Pequenas modifica¸c˜oes s˜ao mais f´aceis de aplicar e testar (tente dividir uma grande tarefa e v´arias menores); • Automatize tudo; • Fa¸ca as pazes entre desenvolvedores e DBAs (dica: pair-programming entre ambos sempre que poss´ıvel)... =) ; 14 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 23. Database Refactoring – dicasabc • Tenha diversos ambientes (sandboxes para desenvolvedores, ambiente de teste de carga, demonstra¸c˜ao, QA, etc.); • Mantenha o versionamento da base num controle de vers˜oes, e tamb´em a informa¸c˜ao da vers˜ao atual na pr´opria base (use ferramentas como Sqitch, dbdeploy, Flyway, etc... ou fa¸ca a sua); • Use ambientes de Integra¸c˜ao Cont´ınua (Continuous Integration); • Pequenas modifica¸c˜oes s˜ao mais f´aceis de aplicar e testar (tente dividir uma grande tarefa e v´arias menores); • Automatize tudo; • Fa¸ca as pazes entre desenvolvedores e DBAs (dica: pair-programming entre ambos sempre que poss´ıvel)... =) ; • Teste... 14 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 24. Database Refactoring – dicasabc • Tenha diversos ambientes (sandboxes para desenvolvedores, ambiente de teste de carga, demonstra¸c˜ao, QA, etc.); • Mantenha o versionamento da base num controle de vers˜oes, e tamb´em a informa¸c˜ao da vers˜ao atual na pr´opria base (use ferramentas como Sqitch, dbdeploy, Flyway, etc... ou fa¸ca a sua); • Use ambientes de Integra¸c˜ao Cont´ınua (Continuous Integration); • Pequenas modifica¸c˜oes s˜ao mais f´aceis de aplicar e testar (tente dividir uma grande tarefa e v´arias menores); • Automatize tudo; • Fa¸ca as pazes entre desenvolvedores e DBAs (dica: pair-programming entre ambos sempre que poss´ıvel)... =) ; • Teste... • Teste... 14 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 25. Database Refactoring – dicasabc • Tenha diversos ambientes (sandboxes para desenvolvedores, ambiente de teste de carga, demonstra¸c˜ao, QA, etc.); • Mantenha o versionamento da base num controle de vers˜oes, e tamb´em a informa¸c˜ao da vers˜ao atual na pr´opria base (use ferramentas como Sqitch, dbdeploy, Flyway, etc... ou fa¸ca a sua); • Use ambientes de Integra¸c˜ao Cont´ınua (Continuous Integration); • Pequenas modifica¸c˜oes s˜ao mais f´aceis de aplicar e testar (tente dividir uma grande tarefa e v´arias menores); • Automatize tudo; • Fa¸ca as pazes entre desenvolvedores e DBAs (dica: pair-programming entre ambos sempre que poss´ıvel)... =) ; • Teste... • Teste... • TESTE!!! 14 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 27. Zero Downtime Upgradesabc • Existe um mito que qualquer atualiza¸c˜oes em bancos de dados relacionais ´e extremamente lenta. • ´E fato que opera¸c˜oes DDL (Data Definition Language) muitas vezes bloqueiam opera¸c˜oes DML (Data Manipulation Language), mas ´e poss´ıvel fazer com que este bloqueio seja extremamente r´apido na grande maioria dos casos. 16 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 28. Zero Downtime Upgrades – ALTER TABLE abc • Sem d´uvida o comando que gera maiores d´uvidas e dores de cabe¸ca. • Para executar um ALTER TABLE o banco de dados necessita de um bloqueio exclusivo da tabela (em muitos casos bloqueando at´e consultas), mas existem basicamente dois mecanismos para um ALTER TABLE atualizar o esquema: ◦ com necessidade de reescrita – a tabela ´e atualizada completamente (in-place ou usando arquivos tempor´arios) + atualiza¸c˜ao de cat´alogo; ◦ sem necessidade de reescrita – apenas atualiza¸c˜ao de cat´alogo. • A necessidade ou n˜ao de reescrita depende do SGDB e do comando executado, vamos ver alguns exemplos e como s˜ao tratados no PostgreSQL, Oracle e MySQL. 17 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 29. Zero Downtime Upgrades – ALTER TABLE abc Adicionar coluna, sem valor DEFAULT: ALTER TABLE usuarios ADD lat NUMERIC; PostgreSQL : sem reescrita; Oracle : sem reescrita; MySQL : com reescrita (mas a partir da vers˜ao 5.6 ´e poss´ıvel reescrita in-place e sem bloqueio de opera¸c˜oes DML – exceto para auto increment); 18 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 30. Zero Downtime Upgrades – ALTER TABLE abc Adicionar coluna, com valor DEFAULT: ALTER TABLE usuarios ADD ativo BOOLEAN DEFAULT true ; PostgreSQL : com reescrita (devido `a necessidade do valor DEFAULT); Oracle : com reescrita (devido `a necessidade do valor DEFAULT); MySQL : com reescrita (mesmas considera¸c˜oes do anterior); 19 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 31. Zero Downtime Upgrades – ALTER TABLE abc Adicionar coluna, com valor DEFAULT e NOT NULL: ALTER TABLE usuarios ADD ativo BOOLEAN DEFAULT true NOT NULL; PostgreSQL : com reescrita (devido `a necessidade do valor DEFAULT); Oracle : sem reescrita (a partir da vers˜ao 11g, anteriormente a reescrita era necess´aria); MySQL : com reescrita (mesmas considera¸c˜oes do anterior); Para adi¸c˜ao de colunas com valor DEFAULT (exceto MySQL 5.6+), uma pr´atica comum ´e adicionar a coluna sem DEFAULT, definir o DEFAULT em outra opera¸c˜ao e fazer um UPDATE em grupos (batches) e/ou em paralelo para aplicar `as linhas antigas. 20 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 32. Zero Downtime Upgrades – ALTER TABLE abc Remover coluna: ALTER TABLE usuarios DROP fone_casa; PostgreSQL : sem reescrita; Oracle : sem reescrita se usando o comando: ALTER TABLE usuarios ALTER fone_casa SET UNUSED ; MySQL : com reescrita (mas a partir da vers˜ao 5.6 ´e poss´ıvel reescrita in-place e sem bloqueio de opera¸c˜oes DML); 21 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 33. Zero Downtime Upgrades – ALTER TABLE abc Alterar tipo de uma coluna: ALTER TABLE usuarios ALTER lat TYPE b i g i n t ; PostgreSQL : com reescrita; Oracle : com reescrita; MySQL : com reescrita; 22 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 34. Zero Downtime Upgrades – ALTER TABLE abc Alterar limite de uma coluna: ALTER TABLE usuarios ALTER nome TYPE varchar (100); PostgreSQL : a partir da vers˜ao 9.2, sem reescrita somente se o limite estiver aumentando (ou remo¸c˜ao de limite); Oracle : sem reescrita somente se o limite estiver aumentando; MySQL : a partir da vers˜ao 5.6, sem reescrita somente se o limite estiver aumentando; 23 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 35. Zero Downtime Upgrades – ALTER TABLE abc Cria¸c˜ao de ´ındices. PostgreSQL : diminui o bloqueio se usado CREATE INDEX CONCURRENTLY ...; Oracle : diminui o bloqueio se usado CREATE INDEX ... ONLINE; MySQL : n˜ao bloqueia para ´ındices secund´arios, exceto FULLTEXT (InnoDB 5.1+, demais 5.6+). 24 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 36. Zero Downtime Upgrades – dicasabc • Nunca se preocupe com a posi¸c˜ao das colunas numa tabela, mapeia as posi¸c˜oes l´ogicas no seu c´odigo/aplica¸c˜ao; 25 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 37. Zero Downtime Upgrades – dicasabc • Nunca se preocupe com a posi¸c˜ao das colunas numa tabela, mapeia as posi¸c˜oes l´ogicas no seu c´odigo/aplica¸c˜ao; • Nunca utilize o famigerado SELECT * ; 25 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 38. Zero Downtime Upgrades – dicasabc • Nunca se preocupe com a posi¸c˜ao das colunas numa tabela, mapeia as posi¸c˜oes l´ogicas no seu c´odigo/aplica¸c˜ao; • Nunca utilize o famigerado SELECT * ; • Tente executar essas migra¸c˜oes em momentos de menor atividade, mesmo que sejam sem reescrita; 25 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 39. Zero Downtime Upgrades – dicasabc • Nunca se preocupe com a posi¸c˜ao das colunas numa tabela, mapeia as posi¸c˜oes l´ogicas no seu c´odigo/aplica¸c˜ao; • Nunca utilize o famigerado SELECT * ; • Tente executar essas migra¸c˜oes em momentos de menor atividade, mesmo que sejam sem reescrita; • Execute scripts de migra¸c˜ao parte a parte, algumas vezes um ´unico script de migra¸c˜ao pode levar dias; 25 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 40. Zero Downtime Upgrades – dicasabc • Nunca se preocupe com a posi¸c˜ao das colunas numa tabela, mapeia as posi¸c˜oes l´ogicas no seu c´odigo/aplica¸c˜ao; • Nunca utilize o famigerado SELECT * ; • Tente executar essas migra¸c˜oes em momentos de menor atividade, mesmo que sejam sem reescrita; • Execute scripts de migra¸c˜ao parte a parte, algumas vezes um ´unico script de migra¸c˜ao pode levar dias; • Automatize tudo que for poss´ıvel, mas acompanhe a execu¸c˜ao quando for em produ¸c˜ao. 25 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 41. Zero Downtime Upgrades – dicasabc • Nunca se preocupe com a posi¸c˜ao das colunas numa tabela, mapeia as posi¸c˜oes l´ogicas no seu c´odigo/aplica¸c˜ao; • Nunca utilize o famigerado SELECT * ; • Tente executar essas migra¸c˜oes em momentos de menor atividade, mesmo que sejam sem reescrita; • Execute scripts de migra¸c˜ao parte a parte, algumas vezes um ´unico script de migra¸c˜ao pode levar dias; • Automatize tudo que for poss´ıvel, mas acompanhe a execu¸c˜ao quando for em produ¸c˜ao. • Teste... 25 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 42. Zero Downtime Upgrades – dicasabc • Nunca se preocupe com a posi¸c˜ao das colunas numa tabela, mapeia as posi¸c˜oes l´ogicas no seu c´odigo/aplica¸c˜ao; • Nunca utilize o famigerado SELECT * ; • Tente executar essas migra¸c˜oes em momentos de menor atividade, mesmo que sejam sem reescrita; • Execute scripts de migra¸c˜ao parte a parte, algumas vezes um ´unico script de migra¸c˜ao pode levar dias; • Automatize tudo que for poss´ıvel, mas acompanhe a execu¸c˜ao quando for em produ¸c˜ao. • Teste... • Teste... 25 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 43. Zero Downtime Upgrades – dicasabc • Nunca se preocupe com a posi¸c˜ao das colunas numa tabela, mapeia as posi¸c˜oes l´ogicas no seu c´odigo/aplica¸c˜ao; • Nunca utilize o famigerado SELECT * ; • Tente executar essas migra¸c˜oes em momentos de menor atividade, mesmo que sejam sem reescrita; • Execute scripts de migra¸c˜ao parte a parte, algumas vezes um ´unico script de migra¸c˜ao pode levar dias; • Automatize tudo que for poss´ıvel, mas acompanhe a execu¸c˜ao quando for em produ¸c˜ao. • Teste... • Teste... • TESTE!!! 25 / 26 T´ecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015
  • 44. Obrigado!abc D´uvidas? Matheus de Oliveira <matheus.oliveira@dextra.com.br> IRC – irc.freenode.net: /join #postgresql,#postgresql-br,#dextra Meu nick: MatheusOl Twitter: @matioli matheus LinkedIn: br.linkedin.com/in/matheusdeoliveira/ SlideShare: slideshare.net/matheus de oliveira