segunda-feira, 6 de abril de 2009

Alter In-Place

Alter In-Place é uma daquelas features que ninguém sabe que existe até no dia que é preciso fazer um alter table no Oracle ou Db2.

Veja a tabela abaixo:

create table tabela1
( codigo integer,
campo1 char(30)
)

Aqui neste ponto insermos 10GB de dados na Tabela!!!

Agora por uma mudança na área de negócio a tabela irá receber mais uma coluna, porém ela será criada antes da coluna campo1.

alter table tabela1
add (novo_campo integer) before campo1;

Quanto tempo o Informix demorou para adicionar uma coluna na tabela? 1 Segundo!!!

Como isto é possivel magia negra? Não, pra quem é safo sabe que o Informix apenas fez o versionamento da estrutura da tabela, os dados antigos estão com a mesma estrutura, os novos inserts farão com que os dados sejam inseridos no novo lay-out.

Se é tão fácil assim porque no Oracle/Db2 tenho que recriar a tabela para fazer este tipo de alteração?

É simples, nos outros RDBMS a estrutura da tabela é armazenada fisicamente no mesmo bloco com os dados, isto é bom se olharmos no caso de um crash onde a partition page seja destruida, os dados continuam no disco e é possivel extrair com as ferramentas de suporte avançado.

Então a estrutura do Informix é pior?

Claro que não, o produto foi projetado para operar com esforço reduzido de administração, com este tipo de feature é possivel criar appliances (soluções) onde não é necessário intervenção manual.

Resumindo um bom Arquiteto de Soluções ou um bom Desenvolvedor pode criar soluções embutidas e espalhar sua solução por ai sem ter que se preocupar com o banco de dados.

Se eu escrevo solução embarcada porque não usar Mysql ou Postgress?

Bom o Mysql acabou de ser adquirido pela Sun, o Postgress é questão de tempo até alguem adquirir, o sonho do open-source acabou, só é bom para o fornecedor que economizou milhões em pesquisa e desenvolvimento que foi feito pela comunidade open-source.

Voltando ao comando alter table do Informix, existem três tipos de alter in-place:

Slow Alter

Neste caso o Informix efetua o reorg da tabela inteira, caso a tabela seja muito grande pode-se correr o risco de long-transaction, um exemplo pode ser um alter table que altera o tipo de dados de uma coluna de varchar(20) para char(40).

In-Place Alter

Quando ocorre alteracao na estrutura da tabela e o Informix efetua o versionamento do layout, assim nao executando reorg da tabela.

Fast Alter

O fast alter ocorre quando:

- ocorre alteracao do next extent size
- uma constraint é criada ou dropada
- o lock mode da tabela é alterado
- um atributo da tabela é alterado para único.

Como sempre quem quiser mais informações sobre alter in-place acesse:
http://publib.boulder.ibm.com/infocenter/idshelp/v115/index.jsp

O objetivo deste post foi por em cena uma feature bacana que muitas vezes ninguém nem sabe que existe.

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.