44
ecnicas de Database Refactoring para ambientes 24x7 Matheus de Oliveira <[email protected]>

Técnicas de Database Refactoring para ambientes 24x7 · Matheus de Oliveira DBA PostgreSQL { consultorias e suportes 24x7/8x5 Instrutor dos

  • Upload
    hahanh

  • View
    221

  • Download
    0

Embed Size (px)

Citation preview

Tecnicas de Database Refactoring para ambientes 24x7

Matheus de Oliveira<[email protected]>

Matheus de Oliveira<[email protected]>

DBA PostgreSQL – consultorias e suportes24x7/8x5

Instrutor dos treinamentos PostgreSQL

Concepcao, desenvolvimento e suporte aproducao

Matheus de Oliveira<[email protected]>

Mais de 15 anos trabalhando de suporte econsultoria PostgreSQL

http://www.dextra.com.br/

“Crafting Software, Transforming Business”

Instrutor dos treinamentos PostgreSQL

Concepcao, desenvolvimento e suporte aproducao

Matheus de Oliveira<[email protected]>

Mais de 15 anos trabalhando de suporte econsultoria PostgreSQL

http://www.dextra.com.br/

“Crafting Software, Transforming Business”

10 anos e mais de 10 mil profissionaiscapacitados em todo o Brasil.

http://www.dextraining.com.br/

“Aprenda com quem faz na pratica”

Concepcao, desenvolvimento e suporte aproducao

Matheus de Oliveira<[email protected]>

Mais de 15 anos trabalhando de suporte econsultoria PostgreSQL

http://www.dextra.com.br/

“Crafting Software, Transforming Business”

10 anos e mais de 10 mil profissionaiscapacitados em todo o Brasil.

http://www.dextraining.com.br/

“Aprenda com quem faz na pratica”

SaaS para analise e monitoramento PostgreSQLhttp://www.pganalytics.com.br/

“Facilitando a vida do DBA”

DatabaseRefactoring

Database Refactoring

“A simple change to a database schema that improves its designwhile retaining both its behavioral and informational semantics – in

other words, you can neither add new functionality nor break existingfunctionality, 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 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring

• Segue a mesma ideia e princıpios de refatoracao de codigo, so quee considerado um pouco mais difıcil.

• Escrever e evoluir o codigo de forma disciplinada:

◦ nem tao importante durante o desenvolvimento inicial (antes de entrarem producao);

◦ essencial (pra todos?) apos ter entrado em producao.

• Desenvolvedores, DBAs, sysadmins... DevOps... Todostrabalhando juntos com um objetivo em comum

5 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring

Estrategia:

6 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring

Mais difıcil do que parece:

7 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring – exemplos

Podemos dividir os tipos de refatoracao em 6 categorias:

• Estrutural (structural);

• Qualidade dos dados (data quality);

• Integridade referencial (referential integrity);

• Arquitetural (architectural);

• Metodos/funcoes (method);

• Transformacao (non-refactoring transformation).

8 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring – exemplos

Incrementar o esquema e facil:

9 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring – exemplos

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 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring – exemplos

Em alguns casos, como no exemplo, nao ha necessidade desincronizacao:

• adicionar colunas a tabelas, desde que essas possam ser NULL outenham um valor DEFAULT definido;

• adicionar novas tabelas, visoes ou funcoes ao modelo;

• adicionar funcoes que mantenham compatibilidade.

11 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring – exemplos

Mudar a estrutura ja e mais complicado:

12 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring – sincronizacao

Para muitos casos, como renomear uma coluna, mover de uma tabelapara outra, remover uma tabela, entre outros; e necessario ummecanismo de sincronizacao. Estes podem ser feitos via:

• gatilhos (triggers);

• visoes (views);

• atualizacoes em lote (batch updates);

13 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring – dicas

• Tenha diversos ambientes (sandboxes para desenvolvedores,ambiente de teste de carga, demonstracao, QA, etc.);

• Mantenha o versionamento da base num controle de versoes, etambem a informacao da versao atual na propria base (useferramentas como Sqitch, dbdeploy, Flyway, etc... ou faca a sua);

• Use ambientes de Integracao Contınua (Continuous Integration);• Pequenas modificacoes sao mais faceis de aplicar e testar (tente

dividir uma grande tarefa e varias menores);• Automatize tudo;• Faca as pazes entre desenvolvedores e DBAs (dica:

pair-programming entre ambos sempre que possıvel)... =) ;• Teste...• Teste...• TESTE...

14 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring – dicas

• Tenha diversos ambientes (sandboxes para desenvolvedores,ambiente de teste de carga, demonstracao, QA, etc.);

• Mantenha o versionamento da base num controle de versoes, etambem a informacao da versao atual na propria base (useferramentas como Sqitch, dbdeploy, Flyway, etc... ou faca a sua);

• Use ambientes de Integracao Contınua (Continuous Integration);• Pequenas modificacoes sao mais faceis de aplicar e testar (tente

dividir uma grande tarefa e varias menores);• Automatize tudo;• Faca as pazes entre desenvolvedores e DBAs (dica:

pair-programming entre ambos sempre que possıvel)... =) ;• Teste...• Teste...• TESTE...

14 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring – dicas

• Tenha diversos ambientes (sandboxes para desenvolvedores,ambiente de teste de carga, demonstracao, QA, etc.);

• Mantenha o versionamento da base num controle de versoes, etambem a informacao da versao atual na propria base (useferramentas como Sqitch, dbdeploy, Flyway, etc... ou faca a sua);

• Use ambientes de Integracao Contınua (Continuous Integration);

• Pequenas modificacoes sao mais faceis de aplicar e testar (tentedividir uma grande tarefa e varias menores);

• Automatize tudo;• Faca as pazes entre desenvolvedores e DBAs (dica:

pair-programming entre ambos sempre que possıvel)... =) ;• Teste...• Teste...• TESTE...

14 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring – dicas

• Tenha diversos ambientes (sandboxes para desenvolvedores,ambiente de teste de carga, demonstracao, QA, etc.);

• Mantenha o versionamento da base num controle de versoes, etambem a informacao da versao atual na propria base (useferramentas como Sqitch, dbdeploy, Flyway, etc... ou faca a sua);

• Use ambientes de Integracao Contınua (Continuous Integration);• Pequenas modificacoes sao mais faceis de aplicar e testar (tente

dividir uma grande tarefa e varias menores);

• Automatize tudo;• Faca as pazes entre desenvolvedores e DBAs (dica:

pair-programming entre ambos sempre que possıvel)... =) ;• Teste...• Teste...• TESTE...

14 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring – dicas

• Tenha diversos ambientes (sandboxes para desenvolvedores,ambiente de teste de carga, demonstracao, QA, etc.);

• Mantenha o versionamento da base num controle de versoes, etambem a informacao da versao atual na propria base (useferramentas como Sqitch, dbdeploy, Flyway, etc... ou faca a sua);

• Use ambientes de Integracao Contınua (Continuous Integration);• Pequenas modificacoes sao mais faceis de aplicar e testar (tente

dividir uma grande tarefa e varias menores);• Automatize tudo;

• Faca as pazes entre desenvolvedores e DBAs (dica:pair-programming entre ambos sempre que possıvel)... =) ;

• Teste...• Teste...• TESTE...

14 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring – dicas

• Tenha diversos ambientes (sandboxes para desenvolvedores,ambiente de teste de carga, demonstracao, QA, etc.);

• Mantenha o versionamento da base num controle de versoes, etambem a informacao da versao atual na propria base (useferramentas como Sqitch, dbdeploy, Flyway, etc... ou faca a sua);

• Use ambientes de Integracao Contınua (Continuous Integration);• Pequenas modificacoes sao mais faceis de aplicar e testar (tente

dividir uma grande tarefa e varias menores);• Automatize tudo;• Faca as pazes entre desenvolvedores e DBAs (dica:

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

• Teste...• Teste...• TESTE...

14 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring – dicas

• Tenha diversos ambientes (sandboxes para desenvolvedores,ambiente de teste de carga, demonstracao, QA, etc.);

• Mantenha o versionamento da base num controle de versoes, etambem a informacao da versao atual na propria base (useferramentas como Sqitch, dbdeploy, Flyway, etc... ou faca a sua);

• Use ambientes de Integracao Contınua (Continuous Integration);• Pequenas modificacoes sao mais faceis de aplicar e testar (tente

dividir uma grande tarefa e varias menores);• Automatize tudo;• Faca as pazes entre desenvolvedores e DBAs (dica:

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

• Teste...• TESTE...

14 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring – dicas

• Tenha diversos ambientes (sandboxes para desenvolvedores,ambiente de teste de carga, demonstracao, QA, etc.);

• Mantenha o versionamento da base num controle de versoes, etambem a informacao da versao atual na propria base (useferramentas como Sqitch, dbdeploy, Flyway, etc... ou faca a sua);

• Use ambientes de Integracao Contınua (Continuous Integration);• Pequenas modificacoes sao mais faceis de aplicar e testar (tente

dividir uma grande tarefa e varias menores);• Automatize tudo;• Faca as pazes entre desenvolvedores e DBAs (dica:

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

• TESTE...

14 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Database Refactoring – dicas

• Tenha diversos ambientes (sandboxes para desenvolvedores,ambiente de teste de carga, demonstracao, QA, etc.);

• Mantenha o versionamento da base num controle de versoes, etambem a informacao da versao atual na propria base (useferramentas como Sqitch, dbdeploy, Flyway, etc... ou faca a sua);

• Use ambientes de Integracao Contınua (Continuous Integration);• Pequenas modificacoes sao mais faceis de aplicar e testar (tente

dividir uma grande tarefa e varias menores);• Automatize tudo;• Faca as pazes entre desenvolvedores e DBAs (dica:

pair-programming entre ambos sempre que possıvel)... =) ;• Teste...• Teste...• TESTE...

14 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero DowntimeUpgrades

Zero Downtime Upgrades

• Existe um mito que qualquer atualizacoes em bancos de dadosrelacionais e extremamente lenta.

• E fato que operacoes DDL (Data Definition Language) muitasvezes bloqueiam operacoes DML (Data Manipulation Language),mas e possıvel fazer com que este bloqueio seja extremamenterapido na grande maioria dos casos.

16 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero Downtime Upgrades – ALTER TABLE

• Sem duvida o comando que gera maiores duvidas e dores decabeca.

• Para executar um ALTER TABLE o banco de dados necessita de umbloqueio exclusivo da tabela (em muitos casos bloqueando ateconsultas), mas existem basicamente dois mecanismos para umALTER TABLE atualizar o esquema:◦ com necessidade de reescrita – a tabela e atualizada completamente

(in-place ou usando arquivos temporarios) + atualizacao de catalogo;◦ sem necessidade de reescrita – apenas atualizacao de catalogo.

• A necessidade ou nao de reescrita depende do SGDB e docomando executado, vamos ver alguns exemplos e como saotratados no PostgreSQL, Oracle e MySQL.

17 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero Downtime Upgrades – ALTER TABLE

Adicionar coluna, sem valor DEFAULT:

ALTER TABLE usuarios

ADD lat NUMERIC;

PostgreSQL : sem reescrita;

Oracle : sem reescrita;

MySQL : com reescrita (mas a partir da versao 5.6 e possıvelreescrita in-place e sem bloqueio de operacoes DML –exceto para auto increment);

18 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero Downtime Upgrades – ALTER TABLE

Adicionar coluna, com valor DEFAULT:

ALTER TABLE usuarios

ADD ativo BOOLEAN DEFAULT t r u e ;

PostgreSQL : com reescrita (devido a necessidade do valorDEFAULT);

Oracle : com reescrita (devido a necessidade do valorDEFAULT);

MySQL : com reescrita (mesmas consideracoes do anterior);

19 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero Downtime Upgrades – ALTER TABLE

Adicionar coluna, com valor DEFAULT e NOT NULL:

ALTER TABLE usuarios

ADD ativo BOOLEAN DEFAULT t r u e NOT NULL;

PostgreSQL : com reescrita (devido a necessidade do valorDEFAULT);

Oracle : sem reescrita (a partir da versao 11g, anteriormente areescrita era necessaria);

MySQL : com reescrita (mesmas consideracoes do anterior);

Para adicao de colunas com valor DEFAULT (exceto MySQL 5.6+),uma pratica comum e adicionar a coluna sem DEFAULT, definir o

DEFAULT em outra operacao e fazer um UPDATE em grupos(batches) e/ou em paralelo para aplicar as linhas antigas.

20 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero Downtime Upgrades – ALTER TABLE

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 versao 5.6 e possıvelreescrita in-place e sem bloqueio de operacoes DML);

21 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero Downtime Upgrades – ALTER TABLE

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 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero Downtime Upgrades – ALTER TABLE

Alterar limite de uma coluna:

ALTER TABLE usuarios

ALTER nome TYPE v a r c h a r (100);

PostgreSQL : a partir da versao 9.2, sem reescrita somente se olimite estiver aumentando (ou remocao de limite);

Oracle : sem reescrita somente se o limite estiver aumentando;

MySQL : a partir da versao 5.6, sem reescrita somente se olimite estiver aumentando;

23 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero Downtime Upgrades – ALTER TABLE

Criacao de ındices.

PostgreSQL : diminui o bloqueio se usado CREATE INDEX

CONCURRENTLY ...;

Oracle : diminui o bloqueio se usado CREATE INDEX ...

ONLINE;

MySQL : nao bloqueia para ındices secundarios, excetoFULLTEXT (InnoDB 5.1+, demais 5.6+).

24 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero Downtime Upgrades – dicas

• Nunca se preocupe com a posicao das colunas numa tabela,mapeia as posicoes logicas no seu codigo/aplicacao;

• Nunca utilize o famigerado SELECT * ;

• Tente executar essas migracoes em momentos de menoratividade, mesmo que sejam sem reescrita;

• Execute scripts de migracao parte a parte, algumas vezes umunico script de migracao pode levar dias;

• Automatize tudo que for possıvel, mas acompanhe a execucaoquando for em producao.

• Teste...

• Teste...• TESTE...

25 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero Downtime Upgrades – dicas

• Nunca se preocupe com a posicao das colunas numa tabela,mapeia as posicoes logicas no seu codigo/aplicacao;

• Nunca utilize o famigerado SELECT * ;

• Tente executar essas migracoes em momentos de menoratividade, mesmo que sejam sem reescrita;

• Execute scripts de migracao parte a parte, algumas vezes umunico script de migracao pode levar dias;

• Automatize tudo que for possıvel, mas acompanhe a execucaoquando for em producao.

• Teste...

• Teste...• TESTE...

25 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero Downtime Upgrades – dicas

• Nunca se preocupe com a posicao das colunas numa tabela,mapeia as posicoes logicas no seu codigo/aplicacao;

• Nunca utilize o famigerado SELECT * ;

• Tente executar essas migracoes em momentos de menoratividade, mesmo que sejam sem reescrita;

• Execute scripts de migracao parte a parte, algumas vezes umunico script de migracao pode levar dias;

• Automatize tudo que for possıvel, mas acompanhe a execucaoquando for em producao.

• Teste...

• Teste...• TESTE...

25 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero Downtime Upgrades – dicas

• Nunca se preocupe com a posicao das colunas numa tabela,mapeia as posicoes logicas no seu codigo/aplicacao;

• Nunca utilize o famigerado SELECT * ;

• Tente executar essas migracoes em momentos de menoratividade, mesmo que sejam sem reescrita;

• Execute scripts de migracao parte a parte, algumas vezes umunico script de migracao pode levar dias;

• Automatize tudo que for possıvel, mas acompanhe a execucaoquando for em producao.

• Teste...

• Teste...• TESTE...

25 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero Downtime Upgrades – dicas

• Nunca se preocupe com a posicao das colunas numa tabela,mapeia as posicoes logicas no seu codigo/aplicacao;

• Nunca utilize o famigerado SELECT * ;

• Tente executar essas migracoes em momentos de menoratividade, mesmo que sejam sem reescrita;

• Execute scripts de migracao parte a parte, algumas vezes umunico script de migracao pode levar dias;

• Automatize tudo que for possıvel, mas acompanhe a execucaoquando for em producao.

• Teste...

• Teste...• TESTE...

25 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero Downtime Upgrades – dicas

• Nunca se preocupe com a posicao das colunas numa tabela,mapeia as posicoes logicas no seu codigo/aplicacao;

• Nunca utilize o famigerado SELECT * ;

• Tente executar essas migracoes em momentos de menoratividade, mesmo que sejam sem reescrita;

• Execute scripts de migracao parte a parte, algumas vezes umunico script de migracao pode levar dias;

• Automatize tudo que for possıvel, mas acompanhe a execucaoquando for em producao.

• Teste...

• Teste...• TESTE...

25 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero Downtime Upgrades – dicas

• Nunca se preocupe com a posicao das colunas numa tabela,mapeia as posicoes logicas no seu codigo/aplicacao;

• Nunca utilize o famigerado SELECT * ;

• Tente executar essas migracoes em momentos de menoratividade, mesmo que sejam sem reescrita;

• Execute scripts de migracao parte a parte, algumas vezes umunico script de migracao pode levar dias;

• Automatize tudo que for possıvel, mas acompanhe a execucaoquando for em producao.

• Teste...

• Teste...

• TESTE...

25 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Zero Downtime Upgrades – dicas

• Nunca se preocupe com a posicao das colunas numa tabela,mapeia as posicoes logicas no seu codigo/aplicacao;

• Nunca utilize o famigerado SELECT * ;

• Tente executar essas migracoes em momentos de menoratividade, mesmo que sejam sem reescrita;

• Execute scripts de migracao parte a parte, algumas vezes umunico script de migracao pode levar dias;

• Automatize tudo que for possıvel, mas acompanhe a execucaoquando for em producao.

• Teste...

• Teste...• TESTE...

25 / 26Tecnicas de Database Refactoring para ambientes 24x7 – Matheus de Oliveira – QCon SP 2015

Obrigado!

Duvidas?

Matheus de Oliveira<[email protected]>

IRC – irc.freenode.net:/join #postgresql,#postgresql-br,#dextra

Meu nick: MatheusOl

Twitter: @matioli matheusLinkedIn: br.linkedin.com/in/matheusdeoliveira/

SlideShare: slideshare.net/matheus de oliveira