Compartilhando conhecimento com o mundo

Com tecnologia do Blogger.

Pesquisa

Download

Blogger Tricks

Blogger Themes

Visitas

Assuntos

11/20/2013

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