Extents de Tabelas - Informix
Devido a fragmentação das tabelas no banco informix gerar um impacto significativamente negativo no que tange a desempenho do banco e a aplicação, é necessário um constante monitoramento das tabelas e cuidados específicos, 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.
1 - (Physical Address) e o (Number of extents)
Descobrir o (Physical Address) e o (Number of extents) da tabela
[s105:informix]$/export/home/informix> oncheck -pt exportacao:exp_arquivo_importacao
TBLspace Report for exportacao:expdba.exp_arquivo_importacao
Physical Address 10:618294
Creation date 06/16/2009 13:58:11
TBLspace Flags 8000d02 Row Locking
TBLspace contains VARCHARS
TBLspace contains TBLspace BLOBs
TBLspace use 4 bit bit-maps
TBLspace is compressed
Maximum row size 105
Number of special columns 2
Number of keys 0
Number of extents 16
Current serial value 45206
Current SERIAL8 value 1
Current BIGSERIAL value 1
Current REFID value 1
Pagesize (k) 2
First extent size 50000
Next extent size 8000
Number of pages allocated 79000
Number of pages used 71176
Number of data pages 1045
Number of rows 45204
Partition partnum 10485950
Partition lockid 10485950
Os valores nesta tabela são;
Physical Address 10:618294
Number of extents 16
2 - Descobrindo o valor do frcnt
Obter o número de extensões adicionais;
[s105:informix]$/export/home/informix> oncheck -pP 10 618294
addr stamp chksum nslots flag type frptr frcnt next prev
10:618294 1363106934 627c 7 802 PARTN 344 1672 0 12
slot ptr len flg
1 24 104 0
2 128 52 0
3 180 16 0
4 196 0 0
5 196 136 0
7 332 12 0
slot 1:
0: be 0 a0 0 2 d 0 8 69 0 0 0 2 0 0 0 >. .....i.......
16: 10 0 0 8 33 dd 37 4a 96 b0 0 0 50 c3 0 0 ....3]7J.0..PC..
32: 40 1f 0 0 98 34 1 0 8 16 1 0 15 4 0 0 @....4..........
48: ff ff ff ff be 0 a0 0 94 b0 0 0 1 0 0 0 ....>. ..0......
64: 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 ................
80: 1 0 0 0 b1 3 0 0 80 e0 41 3 0 0 0 0 ....1....`A.....
96: 1 0 0 0 0 0 0 0 ................
slot 2:
0: 65 78 70 6f 72 74 61 63 61 6f 0 65 78 70 64 62 exportacao.expdb
16: 61 0 65 78 70 5f 61 72 71 75 69 76 6f 5f 69 6d a.exp_arquivo_im
32: 70 6f 72 74 61 63 61 6f 0 65 6e 5f 55 53 2e 38 portacao.en_US.8
48: 31 39 0 0 19..............
slot 3:
0: 10 0 0 0 20 0 1 5 31 0 ff ff 38 0 1 6 .... ...1...8...
slot 4:
slot 5:
0: 0 0 0 0 b4 ac d 0 50 c3 0 0 5e dc 23 0 ....4,..PC..^\#.
16: 44 c5 0 0 d2 df 23 0 38 c7 0 0 53 e9 23 0 DE..R_#.8G..Si#.
32: 2c c9 0 0 bd ed 23 0 20 cb 0 0 1 f2 23 0 ,I..=m#. K...r#.
48: 14 cd 0 0 b7 f5 23 0 8 cf 0 0 5 f9 23 0 .M..7u#..O...y#.
64: fc d0 0 0 82 fe 23 0 d8 d6 0 0 7a 7 24 0 |P...~#.XV..z.$.
80: cc d8 0 0 85 d 24 0 c0 da 0 0 8 14 24 0 LX....$.@Z....$.
96: a8 de 0 0 d2 1e 24 0 78 e6 0 0 df 2a 24 0 (^..R.$.xf.._*$.
112: 18 f6 0 0 29 cf 10 0 58 15 1 0 b7 10 11 0 .v..)O..X...7...
128: 98 34 1 0 0 0 0 0 .4..............
slot 7:
0: 12 26 0 0 41 17 0 0 1c 56 d0 59 .&..A....VPY....
O valor éfrcnt - 344
3 - Descobrindo o valor das Extensões Adicionais
Formula simples
Extensões_Adicionais = trunc (frcnt / 8)
= trunc (344 / 8)
= 43
4 - Descobrindo o valor do Numero Maximo de Extensões
A formula;
Maximo_Numero_de_Extensões = Extensões_Adicionais + Numero_de_Extensões
Calculando para esta tabela o valor de extensões disponiveis
43+16=59
Valor Maximo de Extensões para esta tabela é 59
Importante
Agora sabemos que se a tabela exp_arquivo_importacao no banco exportacao atingir o valor de 59 extents vai ocorrer o erro 166;
ATENÇÃO 59 não é um tamanho é sim uma quantidade de extents que a tabela vai suporta.
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 Importantes
1. É importante tentar 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
Script para checar os Extents das Tabelas
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. Para ajudar a controlar os extents das tabelas criei um script em shell para isso - Download
-------------------------------------------------------------------------------------------------
26/11/2013 ***** INFORMIX BASIC SERVICES ***** 22:17:16
-------------------------------------------------------------------------------------------------
Code Function
---- --------------------------------------------
1 Maiores Tabelas
2 Numero de Extents
3 Nome da Tabela
4 Extents/Banco de Dados
0 Sair deste Programa
---- -------------------------------------------
Digite um Codigo -
Maiores Tabelas e seus extents
-------------------------------------------------------------------------------------------------
26/11/2013 ***** INFORMIX BASIC SERVICES ***** 22:13:02
-------------------------------------------------------------------------------------------------
+----------------+------------------------------------+------------+------------+
| Database | Table Name/Index | Extents | Size |
+----------------+------------------------------------+------------+------------+
| aa01055 | nfe_item_nf | 32 | 65536 |
| nfeletronica | nfe_item_nf | 31 | 64985 |
| nfeletronica | nfe_item_nf_entrada | 28 | 39288 |
| sgf_desenv | sgf_int_arr_gerencial | 1 | 23143 |
| desenv | guia_transito | 22 | 20004 |
| cteletronico | cte_pessoa | 1 | 18432 |
| nfeletronica | nfe_eletronica | 32 | 14340 |
| cteletronico | 104_15 | 32 | 14336 |
| sgf_desenv | contribuinte | 1 | 12097 |
| aa01055 | pk_nfe_item_nf2 | 30 | 9216 |
| nfeletronica | pk_nfe_item_nf2 | 29 | 9175 |
| desenv | contribuinte | 23 | 9124 |
| sgf_desenv | sgf_dad_econ | 2 | 8650 |
| sgf_desenv | sgf_int_ent_interest_detalhe | 1 | 8216 |
| nfeletronica | pk_nfe_item_nf2_claudemar | 22 | 5568 |
| efronteiras | nf_dec_compra | 13 | 5120 |
| sgf_desenv | ix_sgf_int_arr_817 | 1 | 3605 |
| sgf_desenv | ix_sgf_int_arr_380 | 1 | 3099 |
| desenv | ixgui_ins_guia | 19 | 3080 |
| sgf_desenv | sgf_int_cartao_detalhe | 1 | 2843 |
| desenv | 168_491 | 18 | 2820 |
| sgf_desenv | notes_alim | 6 | 2459 |
| sgf_desenv | ix_sgf_int_arr_755 | 1 | 2246 |
| desenv | lote | 17 | 2040 |
| sgf_desenv | notes_alim_multa | 4 | 2014 |
| sgf_desenv | sgf_int_divergencias | 1 | 1913 |
| desenv | ixgui_dt_saida | 14 | 1800 |
| sgf_desenv | sgf_int_arr_desempenho | 1 | 1657 |
+----------------+------------------------------------+------------+------------+
Pressione qualquer tecla para continuar...
Números de Extents
-------------------------------------------------------------------------------------------------
26/11/2013 ***** INFORMIX BASIC SERVICES ***** 22:18:19
-------------------------------------------------------------------------------------------------
+----------------+------------------------------------+------------+------------+
| Database | Table Name/Index | Extents | Size |
+----------------+------------------------------------+------------+------------+
| cteletronico | 104_15 | 32 | 14336 |
| aa01055 | nfe_item_nf | 32 | 65536 |
| nfeletronica | nfe_eletronica | 32 | 14340 |
| nfeletronica | nfe_item_nf | 31 | 64985 |
| aa01055 | pk_nfe_item_nf2 | 30 | 9216 |
| nfeletronica | pk_nfe_item_nf2 | 29 | 9175 |
| nfeletronica | nfe_item_nf_entrada | 28 | 39288 |
| desenv | contribuinte | 23 | 9124 |
| nfeletronica | pk_nfe_item_nf2_claudemar | 22 | 5568 |
| desenv | guia_transito | 22 | 20004 |
| desenv | ixgui_ins_guia | 19 | 3080 |
| desenv | 168_491 | 18 | 2820 |
| desenv | lote | 17 | 2040 |
| nfeletronica | 108_55 | 16 | 1408 |
| desenv | bal_vei_aferido | 14 | 1528 |
| nfeletronica | ix_nfe_chave_old | 14 | 1152 |
| desenv | ixgui_dt_saida | 14 | 1800 |
| desenv | ix_lot_ins | 14 | 1280 |
| desenv | ixgui_doc_mot_r | 13 | 1544 |
| efronteiras | nf_dec_compra | 13 | 5120 |
| sysadmin | mon_table_profile | 12 | 1428 |
| desenv | ixcon_nome_fan | 12 | 1256 |
| desenv | ixcon_nome | 11 | 1024 |
| nfeletronica | ix_nfe_cons1 | 11 | 768 |
| desenv | 112_51 | 11 | 892 |
| aa01055 | ix_itn_cod_fop | 10 | 640 |
| sysadmin | sysprocbody | 10 | 896 |
+----------------+------------------------------------+------------+------------+
Pressione qualquer tecla para continuar...
Extents de uma tabela especifica;
-------------------------------------------------------------------------------------------------
26/11/2013 ***** INFORMIX BASIC SERVICES ***** 22:20:15
-------------------------------------------------------------------------------------------------
Digite o NOME DA TABELA : nfe_item_nf
Resultado;
-------------------------------------------------------------------------------------------------
26/11/2013 ***** INFORMIX BASIC SERVICES ***** 22:19:26
-------------------------------------------------------------------------------------------------
+----------------+------------------------------------+------------+------------+
| Database | Table Name/Index | Extents | Size |
+----------------+------------------------------------+------------+------------+
| aa01055 | nfe_item_nf | 32 | 65536 |
| nfeletronica | nfe_item_nf | 31 | 64985 |
+----------------+------------------------------------+------------+------------+
Pressione qualquer tecla para continuar...
Extents de tabelas por banco
-------------------------------------------------------------------------------------------------
26/11/2013 ***** INFORMIX BASIC SERVICES ***** 22:20:45
-------------------------------------------------------------------------------------------------
+------------------+
| BANCOS DE DADOS |
+------------------+
| sysmaster |
| sysutils |
| sysuser |
| sysadmin |
| local |
| teste |
| teste2 |
| aa01055 |
| cteletronico |
| efronteiras |
| exp_desenv |
| fronteiras |
| syspgm4gl |
| desenv |
| onpload |
| aafai240 |
| sgf_desenv |
| nfeletronica |
+------------------+
Digite o NOME DO BANCO : desenv
Resultado
-------------------------------------------------------------------------------------------------
26/11/2013 ***** INFORMIX BASIC SERVICES ***** 22:21:56
-------------------------------------------------------------------------------------------------
============== ================================== ========== ==========
Database Table Name/Index Extents Size
============== ================================== ========== ==========
desenv contribuinte 23 9124
desenv guia_transito 22 20004
desenv ixgui_ins_guia 19 3080
desenv 168_491 18 2820
desenv lote 17 2040
desenv ixgui_dt_saida 14 1800
desenv bal_vei_aferido 14 1528
desenv ix_lot_ins 14 1280
desenv ixgui_doc_mot_r 13 1544
desenv ixcon_nome_fan 12 1256
desenv ixcon_nome 11 1024
desenv 112_51 11 892
desenv ixvei_placa 10 1160
desenv 284_1248 10 880
desenv bal_dt 9 640
desenv 319_1481 9 752
desenv ixvei_cavalo 9 1032
desenv ixcgc_cpf 9 768
desenv ixgui_dt_entrada 8 904
desenv 168_2473 8 904
desenv 168_2616 8 904
desenv ixmalote 7 384
desenv ix_cons_1 7 776
desenv 509_2642 7 256
desenv 168_2459 7 808
desenv 168_2617 7 776
desenv ixgui_cgc_trans 7 776
desenv 112_2472 6 256
Pressione qualquer tecla para continuar...
Importante Destacar
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 .. (Referencia)
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
0 comentários:
Enviar um comentário