• Nenhum resultado encontrado

Técnicas de Database Refactoring para ambientes 24x7. Matheus de Oliveira

N/A
N/A
Protected

Academic year: 2021

Share "Técnicas de Database Refactoring para ambientes 24x7. Matheus de Oliveira"

Copied!
44
0
0

Texto

(1)

Matheus de Oliveira

(2)

Matheus de Oliveira

<matheus.oliveira@dextra.com.br>

DBA PostgreSQL – consultorias e suportes 24x7/8x5

(3)

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/

(5)

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”

(6)

Database

Refactoring

(7)

“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.

(8)

Database Refactoring

• 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

(9)

Estrat´egia:

(10)

Database Refactoring

(11)

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).

(12)

Database Refactoring – exemplos

(13)

SELECT ... FROM m e n s a g e n s m

LEFT JOIN u s u a r i o _ l o c a l l

ON l . u s u a r i o _ i d = m . d e _ i d

AND m . d a t a _ h o r a BETWEEN l . d a t a _ i n i

AND l . d a t a _ f i m

(14)

Database Refactoring – exemplos

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;

(15)

Mudar a estrutura j´a ´e mais complicado:

(16)

Database Refactoring – sincroniza¸c˜

ao

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);

(17)

Database Refactoring – dicas

• Tenha diversos ambientes (sandboxes para desenvolvedores,

ambiente de teste de carga, demonstra¸c˜ao, QA, etc.);

Use ambientes de Integra¸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...

(18)

Database Refactoring – dicas

• 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¸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...

(19)

Database Refactoring – dicas

• 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);

Automatize tudo;

• Fa¸ca as pazes entre desenvolvedores e DBAs (dica:

pair-programming entre ambos sempre que poss´ıvel)... =) ;

• Teste...

Teste...

TESTE...

(20)

Database Refactoring – dicas

• 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...

(21)

Database Refactoring – dicas

• 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;

Teste...

Teste...

TESTE...

(22)

Database Refactoring – dicas

• 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:

• Teste...

Teste...

TESTE...

(23)

Database Refactoring – dicas

• 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...

(24)

Database Refactoring – dicas

• 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:

(25)

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...

(26)

Zero Downtime

Upgrades

(27)

• Existe um mito que qualquer atualiza¸c˜oes em bancos de dados relacionais ´e extremamente lenta.

E fato que opera¸´ 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.

(28)

Zero Downtime Upgrades – ALTER TABLE

• 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.

(29)

Adicionar coluna, sem valor DEFAULT:

ALTER TABLE u s u a r i o s

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);

(30)

Zero Downtime Upgrades – ALTER TABLE

Adicionar coluna, com valor DEFAULT:

ALTER TABLE u s u a r i o s

ADD a t i v o BOOLEAN DEFAULT t r u e;

PostgreSQL : com reescrita (devido `a necessidade do valor DEFAULT);

Oracle : com reescrita (devido `a necessidade do valor DEFAULT);

(31)

ALTER TABLE u s u a r i o s

ADD a t i v o BOOLEAN DEFAULT t r u e 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.

(32)

Zero Downtime Upgrades – ALTER TABLE

Remover coluna:

ALTER TABLE u s u a r i o s

DROP f o n e _ c a s a ;

PostgreSQL : sem reescrita;

Oracle : sem reescrita se usando o comando:

ALTER TABLE usuarios ALTER fone_casa SET UNUSED

;

(33)

Alterar tipo de uma coluna:

ALTER TABLE u s u a r i o s

ALTER lat TYPE b i g i n t;

PostgreSQL : com reescrita;

Oracle : com reescrita;

MySQL : com reescrita;

(34)

Zero Downtime Upgrades – ALTER TABLE

Alterar limite de uma coluna:

ALTER TABLE u s u a r i o s

ALTER n o m e TYPE v a r c h a r( 1 0 0 ) ;

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;

(35)

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+).

(36)

Zero Downtime Upgrades – dicas

• 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...

(37)

Zero Downtime Upgrades – dicas

• 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 * ;

• 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...

(38)

Zero Downtime Upgrades – dicas

• 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...

(39)

Zero Downtime Upgrades – dicas

• 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;

• Teste...

Teste...

TESTE...

(40)

Zero Downtime Upgrades – dicas

• 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...

(41)

Zero Downtime Upgrades – dicas

• 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...

(42)

Zero Downtime Upgrades – dicas

• 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.

(43)

• 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...

(44)

Obrigado!

uvidas?

Matheus de Oliveira <matheus.oliveira@dextra.com.br> IRC – irc.freenode.net: /join #postgresql,#postgresql-br,#dextra Meu nick: MatheusOl

Referências

Documentos relacionados

A inserção de pessoas com deficiências em empresas brasileiras – Um estudo sobre as relações entre concepções de deficiência, condições de trabalho e qualidade de vida

Grande Dourados, no uso das atribuições que lhe foram conferidas pela Portaria nº 779, de 26/08/2014, considerando a Portaria nº 1.369/10, de 07/12/2010, que

v) por conseguinte, desenvolveu-se uma aproximação semi-paramétrica decompondo o problema de estimação em três partes: (1) a transformação das vazões anuais em cada lo-

Participação em curso/congresso Não será cobrado Farmacêutico Substituto, desde que não ultrapasse.. os

Algumas sementes e castanhas vão ficar só nessa etapa de hidratação pois já passaram por um processo térmico no caso de algumas castanhas e nozes, outras sementes descascadas

Silva e Márquez Romero, no prelo), seleccionei apenas os contextos com datas provenientes de amostras recolhidas no interior de fossos (dado que frequentemente não há garantia

são afetadas pela falta de interatividade com o mercado estadual e nacional, seguidos da pouca especificação técnica do produto aliado a baixa qualidade do vime

[...] o ponto de vista que me parece de fundamental importância e que representa o verdadeiro espírito da Matemática é a capacidade de modelar situações reais,