Quem sou eu

2016 ESTÁ INICIANDO E O PROJETO DESTE BLOG ESTA RESSURGINDO !!!!

segunda-feira, 27 de setembro de 2010

INDENTIFICANDO NUMERO MAXIMO DE EXTENTS

Esse assunto abaixo abordado é extenso recomendo que entendam primeiramente o que é dbspace, chunk, extent , sem duvida nenhuma a maneira como os dados irão ser construidos faz grande diferença principalmente para performance e elimina também trabalhar reativamente.

Comenatrio:  A versão 11.7 não tem mais limitação de números de extents , mas não é por isso que vamos deixar nossos objetos serem construídos de forma desordenada e sem controle até porque isso influencia diretamente na performance.

Considerações iniciais :

Uma das tarefas do DBA é admistrar o numero de extents que as tabelas estão utilizando, caso essa administração não seja feita certamente em algum momento teremos uma mensagem -136 no more extentsque será retornado após a execução de um comando INSERT.

O que vou escrever abaixo é uma resposta a qual busquei por algum tempo, lá traz quando comecei a mexer com informix quando me falaram que o banco precisava ser exportado e importado para reorganizar os extents ... isso nunca entrou na minha cabeça como um banco de dados tão eficiente exige uma manutenção tão radical ... e não tinha explicações nem sobro o que era extents e muito menos como não cair no problema -136 então como muitas coisas fui a luta pesquisar e abaixo estarei passando a explicação de como definir o numero maximo de extents que uma tabela comporta.

para determinar o numero maximo de extents de uma tabela é uma tarefa muito simples.

Não posso deixar de falar agora neste assunto apesar de nosso objetivo ser apenas aprender o numero maximo de extents , mas vou falar superficialmente somente para chamar a atenção -- É DE FUNDAMENTAL IMPORTANCIA CONHECERMOS O BANCO DE DADOS E AS PROJEÇÕES DE CRESCIMENTO DAS TABELAS ...


Os 4 passos abaixo são exatamente o que precisa ser feito para achar o numero maximo de extents.

1. execute o comando oncheck -pt databaseanme:tablename
2. oncheck -pP <Physical Address>
3. Additional_extents = trunc (frcnt / 8)
4. Maximum_number_extents = Additional_extents + Number_of_extents

.... verdade esses 4 passos é simples, mas vamos ter colegas que estão ainda começando a trabalhar com informix que terão ainda certa dificuldade então vamos melhorar o exemplo.

Vou utilizar no meu exemplo uma tabela chamada "cidade" e uma database com o nome "eli"

1. execute o comando oncheck -pt databaseanme:tablename
$ oncheck -pt eli:estoque more # estou usando more pois o que me intereça é o começo do retorno ..

Retorno do comando :

TBLspace Report for eli:eis.cidade
Physical Address 5:487 Creation date 11/23/2009 19:58:07 TBLspace Flags 801 Page Locking TBLspace use 4 bit bit-maps Maximum row size 26
Number of special columns 0
Number of keys 0
Number of extents 1
Current serial value 1
Pagesize (k) 2
First extent size 8
Next extent size 8

Number of pages allocated 8
Number of pages used 3
Number of data pages 2
Number of rows 69
Partition partnum 5242932
Partition lockid 5242932

Extents Logical Page Physical Page Size Physical Pages 0 5:831 8 8


Comentario: No retorno acima está evidenciado na cor vermelha as informações as quais são necessarias para chegarmos no resultado que este tutorial propoe.
Na cor amarela está evidenciado informações interessantes para serem observadas as quais iremos trabalhar em outras postagens.

2. oncheck -pP
$ oncheck -pP 5 487 more # estou usando more pois o que me intereça é o começo do retorno.

addr stamp chksum nslots flag type frptr frcnt next prev
5:487 -892218219 1fa6 5 802 PARTN 160 1864 0 0

slot ptr len flg 1 24 92 0 2 116 28 0 3 144 0 0 4 144 0 0 5 144 16 0

Comentario: No retorno acima está evidenciado na cor vermelha as informações as quais são necessarias para chegarmos no resultado que este tutorial propoe.


3. Additional_extents = trunc (frcnt / 8)

Agora já temos todas as informações é só fazer conta

Additional_extents = (1864 / 8)
Additional_extents = 233

4. Maximum_number_extents = Additional_extents + Number_of_extents

Maximum_number_extents = 233 + 1
Maximum_number_extents = 234

BEM SABEMOS AGORA QUE A TABELA "CIDADE" DA DATABASE "ELI" COMPORTA UM NUMERO MAXIMO DE 234 EXTENTS , APÓS ATINGIR ESSE NUMERO VAI ACONTECER O ERRO -166 ...

ATENÇÃO 234 não é um tamanho é uma quantidade ou seja dentro destes234 posso administrar o tamanho dos extents, passando na criação das tabelas informações de size de extent ... porém esse assunto vamos discutir em outra postagem ...


Quando deixamos o banco de dados alocar os extents de maneira automatica inicialmente ele vai alocar o primeiro extent com 8 KB e vai seguir com a alocação dos demais extents seguindo a logica de quando atingir 16 extents eles dobra o tamanho ou seja o primeiro foi criado com 8KB o decimo setimo terá 16 Kb o vigezimo quinto terá 32 Kb e assim por diante ... mas isso não precisa ser assim podemos tratar esses valores definindo eles na criação da tabela facilmente ..


Dicas:
1. É importante tenatar criar os extents de maneira contiguos , o que vai limitar o deslocamento da cabeça de leitura.

2. Quando possivél coloque as tabelas em dbspaces separados.

3. Verifique constantemente como os extents estão distribuidos no dbspace , para isso utilize o comando oncheck -pe , tabelas que estejam com extents muito intercalados não é ideal e requer uma grande atenção para não se tornar problema .

Como pode eliminar o problema de extents intercalados ?
1. Reorganizar as tabelas exportando dados e importando (isso requer recriar a tabela)
2. Criar ou alterar um índice de cluster.
3. Use o ALTER TABLE FRAGMENT


Em outras postagens neste BLOG vai existir mais conteudo sobre o assunto extent , fragmentação ..