1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Redução de Transações

Discussão em 'Progress 4GL' iniciado por FernandaSantos, Janeiro 27, 2009.

  1. FernandaSantos

    FernandaSantos Membro Participativo

    A redução de transações significa mais memória livre, pois a quantidade de registros bloqueados é menor. Entretanto, para diminuir as transações, existe um aumento na complexidade da codificação dos programas.

    Será descrito a seguir algumas dicas para diminuir transações:

    1) Criar sub-transações:
    Para cada agrupamento de comandos que façam alteração de informações em um banco de dados, é criado uma transação no escopo do bloco atual que pode ser o programa como um todo ou um laço(DO TRANSACTION: ... END.).

    Exemplos:

    Uma grande transação:
    Código:
    ... /* Início do programa – Não acessa o banco de dados */
    
    DO: <var1> = 1 TO 1000:
    
      CREATE <tabela>.
    
      ASSIGN <tabela>.<campo> = <VALOR>.
    
    END.
    
    ... /* Finalização do programa – Não acessa o banco de dados */
    OBS: A transação deste programa fica no escopo da programa (DO: ... END.) e bloqueia 1000 registros. Para isto é consumida uma quantia de memória. É importante ressaltar que um simples comando DO não é suficiente para gerar uma transação. Caso só exista ele, como é o caso, o escopo da transação é o programa como um todo.

    Uma pequena transação:
    Código:
    ... /* Início do programa – Não acessa o banco de dados */
    
    DO <var1> = 1 TO 1000:
    
      DO TRANSACTION:
    
        CREATE <tabela>.
    
        ASSIGN <tabela>.<campo> = <VALOR>.
    
      END.
    
    END.
    
    ... /* Finalização do programa – Não acessa o banco de dados */
    OBS: A transação deste programa é menor, pois fica no escopo da sub-transação (DO TRANSACTION: ... END.) e bloqueia apenas 1 registro. Para isto é consumido menos memória do que no exemplo anterior.

    2) Utilizar o comando DO para laços (LOOP) simples ao invés do comando REPEAT:

    É considerado um laço simples, aquele que não tiver envolvimento com transações. O comando REPEAT cria por default uma transação:

    Transação desnecessária:
    Código:
    ... /* Início do programa */
    
    REPEAT <VAR> = 1 TO 100:
    
      ASSIGN <variável> = <VALOR>.
    
      DISPLAY ...
    
    END.
    
    ... /* Finalização do programa */ 
    OBS: Foi criado desnecessariamente transações, ocupando então memória.


    Correção:
    Código:
    ... /* Início do programa */
    
    DO <VAR> = 1 TO 100:
    
      ASSIGN <variável> = <VALOR>.
    
      DISPLAY ...
    
    END.
    
    ... /* Finalização do programa */ 
    OBS: Não foi criado nenhuma transação, consumindo menos memória. :D


    Abb,

    Fernanda
  2. rlfritz

    rlfritz Membro Ativo

    Valeu Fernanda! Gostei das dicas!

    Robert

Compartilhe esta Página