Dicas de Performance. Objetivo
|
|
|
- Bernadete Fartaria Branco
- 8 Há anos
- Visualizações:
Transcrição
1 Dicas de Performance Objetivo Este documento tem como objetivo informar algumas dicas rápidas de performance que podem ser aplicadas no dia-a-dia. As regras são simples e seus efeitos, isoladamente, podem não apresentar grandes resultados, entretanto, seguindo a uma maior quantidade de regras, a melhoria de performance é considerável. Muito dos problemas envolvem uso de comandos que causam impactos, enquanto outros problemas são causados por má utilização de comandos existentes, isto é, usar um comando que se substituído por outro melhora performance, podendo também diminuir consumo de memória. Um fator importante a ressaltar, é que a má performance pode ser resultado de um comando mal aplicado, bem como pelo consumo elevado de memória. Itens que serão abordados neste documento: Utilização do comando IF repetidamente. Utilização de blocos para agrupar comandos. Utilização do comando CASE. Utilização do comando IF para o uso do método LOAD-MOUSE-POINTER. Testes de variáveis lógicas. Utilização do comando CAN-FIND. Redução de transações. LOCK de registros Escopo de registros Não utilizar WORKFILES Utilização de TEMP-TABLE do tipo global. Utilização do parâmetro NO-UNDO em definição de variáveis e TEMP-TABLES. Limpeza de registros nas TEMP-TABLES Regras para utilização de índice Truques para economizar BANDWIDTH Quanto menos acesso melhor Use o comando ASSIGN
2 Utilização do comando IF repetidamente O comando IF é um dos piores no ponto de vista de performance, entretanto, sua utilização é inevitável. Porém, é possível, em alguns pontos, fazer um melhor uso deste comando. Caso não seja possível substituir o comando IF por outro comando (CASE por exemplo), por motivos de lógica de programação, o uso adequado já auxilia na performance. A substituição dos comandos IF S colocados um após o outro por uma encadeação do comando pode melhorar de maneira considerável a performance, isto é: Exemplo de código a ser melhorado : IF <condição 1> THEN DO: IF <condição 2> THEN DO: IF <condição 3> THEN DO: IF <condição 4> THEN DO: IF <condição 5> THEN DO: Exemplo de código performático : IF <condição 1> THEN DO: IF <condição 2> THEN DO: IF <condição 3> THEN DO: IF <condição 4> THEN DO: IF <condição 5> THEN DO: Desta maneira, as condições 2,3,4 e 5 só serão executadas caso necessário, enquanto que no primeiro caso, todas as condições são executadas. É bom levar em consideração que este exemplo depende, logicamente, da necessidade do programa. Se for possível fazer a troca deste IF por um comando CASE, a performance pode ser melhorada. 2
3 Utilização de blocos para agrupar comandos A utilização de blocos para agrupar comandos, pode: aumentar desnecessariamente o arquivo compilado (RCODE) acarreta um aumento de gravações no LBI (local before image), quando os comandos que estão nele são atualizações de registros (gera sub-transação) ou de variáveis SEM a cláusula no-undo (controle de sub-transação) Exemplo de Código a ser melhorado : IF <condição> THEN DO: ASSIGN VAR1 = <valor 1> VAR2 = <valor 2> VAR3 = <valor 3>. DO: ASSIGN VAR1 = <valor 4> VAR2 = <valor 5> VAR3 = <valor 6>. Exemplo de Código performático : IF <condição> THEN ASSIGN VAR1 = <valor 1> VAR2 = <valor 2> VAR3 = <valor 3>. ASSIGN VAR1 = <valor 4> VAR2 = <valor 5> VAR3 = <valor 6>. É importante ressaltar que neste caso, existe apenas um comando após o THEN e/ou, ou seja, é desnecessária a utilização da estrutura DO... Entretanto, é necessário tomar cuidado em caso de chamada de INCLUDE numa estrutura IF...THEN. Como não é possível saber o que há dentro da INCLUDE, por precaução, é aconselhável utilizar o bloco. Exemplo: IF <condição> THEN DO: {INCLUDE} DO: {INCLUDE2} Utilização do comando CASE Como já foi dito, a utilização do comando IF encadeado pode melhorar a performance em relação a utilização de comandos IF repetidos, mas, ainda podem causar um impacto na performance de um programa. Caso seja possível, é aconselhável utilizar o comando CASE no lugar dos comandos IF existentes. 3
4 Trocar: IF <condição 1> THEN DO: IF <condição 2> THEN DO: IF <condição 3> THEN DO: Por: CASE c-campo: WHEN teste THEN Comando... WHEN aluno THEN Comando... WHEN compr THEN Comando... OTHERWISE Comando END CASE. Utilização do comando IF para o uso do método LOAD-MOUSE-POINTER Após alguns testes, foi percebido que a linha de comando: IF CAMPO:LOAD-MOUSE-POINTER("<DIRETÓRIO\ARQUIVO>") IN FRAME {&FRAME-NAME} THEN. Pode ser substituída por: CAMPO:LOAD-MOUSE-POINTER("<DIRETÓRIO\ARQUIVO>") IN FRAME {&FRAME-NAME}. Aparentemente o ganho com esta troca pode parecer pequeno, mas levando em consideração que muitos programas utilizam várias vezes esta técnica, a somatória destes pequenos ganhos pode vir a ser considerável. Teste de variáveis lógicas As comparações realizadas com variáveis lógicas em comandos, como por exemplo, as condições em um comando IF, são mais rápidas se não utilizam o sinal de igualdade para expressar a condição desejada. Exemplos: Exemplo de código a ser melhorado : IF <variável ou campo lógico> = YES THEN DO: Comandos... Exemplo de código performático : IF <variável ou campo lógico> THEN DO: Comandos... 4
5 Utilização do comando CAN-FIND A utilização do comando CAN-FIND retorna TRUE ou FALSE quando utilizado, isto é, existe apenas a verificação se o registro existe ou não. O registro pesquisado não fica habilitado para nenhuma operação, nem mesmo para leitura. Ao contrário do comando FIND que pode tornar o registro habilitado até mesmo para escrita. Porém, o principal ganho para a melhoria da performance, é que o comando CAN-FIND retorna apenas um valor lógico, enquanto que o comando FIND busca todo o registro, isto é, aumenta o tráfego de rede fazendo I/O e aplicando controle de LOCK sobre o registro, desnecessariamente. A principal funcionalidade do comando CAN-FIND é a necessidade de saber se um registro existe ou não, como por exemplo, em um cadastro. Ao verificar se a chave informada já existe, não é necessário trazer todo o registro, somente a informação de sua existência. Exemplo: Exemplo de Código a ser melhorado : FOR EACH <supertabela> no-lock: FIND <tabela> WHERE <tabela>.<campo-chave> = <VALOR> no-lock. IF NOT AVAILABLE <tabela> THEN DO: CREATE <tabela>. ASSIGN <tabela>.<campo-chave> <tabela>.<demais-campos>. Exemplo de Código performático : FOR EACH <supertabela> no-lock: IF NOT CAN-FIND(<tabela> WHERE <tabela>.<campo-chave> = <VALOR>) THEN DO: CREATE <tabela>. ASSIGN <tabela>.<campo-chave>. Redução de transações Esse é o item mais importante na questão performance. A redução de transações significa mais memória livre e menos registros bloqueados. 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: 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(<block header> TRANSACTION:... ). Regras para verificação de transações analisando o código fonte: As transações são geradas em tempo de compilação, é comum analisar-se o código e achar que determinado código não está gerando travamento de registro porque a rotina não passa por ali, o que NÃO é verdadeiro. O Progress cria transações para o primeiro bloco acima de uma comando FIND... EXCLUSIVE-LOCK, ou ASSIGN/UPDATE com controle de erro (ON ENDKEY, ON ERROR) 5
6 Exemplos: Uma grande transação:... /* Início do programa Não acessa o banco de dados */ DO <var1> = 1 TO 1000: CREATE <tabela>. ASSIGN <tabela>.<campo> = <VALOR>.... /* Finalização do programa Não acessa o banco de dados */ Para este exemplo como não existe bloco superior com controle a transação deste programa fica no escopo do programa e bloqueia 1000 registros. Uma pequena transação:... /* Início do programa Não acessa o banco de dados */ DO <var1> = 1 TO 1000: DO TRANSACTION: CREATE <tabela>. ASSIGN <tabela>.<campo> = <VALOR>.... /* Finalização do programa Não acessa o banco de dados */ A transação deste programa é menor, pois fica no escopo da transação (DO TRANSACTION:... ) e bloqueia apenas 1 registro. Para isto é consumido menos memória e menos controle de.bi do que no exemplo anterior. Problema comum:... /* Início do programa Não acessa o banco de dados */ IF <condição> THEN DO: FIND <tabela> EXCLUSIVE-LOCK. UPDATE <tabela>. FOR EACH <tabela_2> EXCLUSIVE-LOCK: ASSIGN <tabela_2>.<campo> = <VALOR>.... /* Finalização do programa Não acessa o banco de dados */ No exemplo acima TODOS os registros da <tabela_2> ficarão travados devido ao fato do comando FIND...EXCLUSIVE-LOCK gerar uma transação forçando o programa a ser uma transação. Forma de corrigir:... /* Início do programa Não acessa o banco de dados */ IF <condição> THEN DO TRANSACTION: FIND <tabela> EXCLUSIVE-LOCK. UPDATE <tabela>. FOR EACH <tabela_2> EXCLUSIVE-LOCK: ASSIGN <tabela_2>.<campo> = <VALOR>.... /* Finalização do programa Não acessa o banco de dados */ 6
7 Ao diminuir-se o tamanho da transação para o FIND...EXCLUSIVE-LOCK o programa deixa de ser transação e apenas o registro que estiver em memória dentro do FOR EACH estará travado (1 por vez). 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: REPEAT <VAR> = 1 TO 100: ASSIGN <variável> = <VALOR>. DISPLAY... Foi criado desnecessariamente transações, ocupando então memória. Correção: DO <VAR> = 1 TO 100: ASSIGN <variável> = <VALOR>. DISPLAY... Não foi criado nenhuma transação, consumindo menos memória. Para saber exatamente quais as transações em um programa pode-se utilizar a opção LISTING na compilação do código e verificar em quais linhas e blocos o progress esta reconhecendo como transação Ex.: compile /cpp/programa.p listing c:/temp/trans.txt O Progress irá gerar um arquivo trans.txt com o código do programa e seus includes incorporados e após isto colocará a análise de quais blocos são ou não transação. Ex. de arquivo gerado pelo compile listing com transação na procedure (programa mau escrito) {} Line Blk DEF VAR l-testa AS LOG NO-UNDO IF l-testa THEN DO: 4 1 FIND FIRST ITEM EXCLUSIVE-LOCK. 5 1 UPDATE ITEM.it-codigo = ITEM.it-codigo FOR EACH man_docto EXCLUSIVE-LOCK: 9 1 ASSIGN man_docto.cdn_fabrica = man_docto.cdn_fabrica. 10 File Name Line Blk. Type Tran Blk. Label c:\temp\teste.p 0 Procedure Yes Buffers: mgind.item c:\temp\teste.p 3 Do No c:\temp\teste.p 8 For Yes Buffers: grdind.man_docto O programador deve tomar cuidado para não criar transações dentro de outra, pois a subtransação NÃO será liberada até que a transação seja concluída. Neste caso o programador receberá a mensagem abaixo na compilação ** WARNING--TRANSACTION keyword given within actual transaction level. 7
8 LOCK de registros O Progress possui 3 controles de LOCK (trava de registro), são eles. NO-LOCK. SHARE-LOCK. EXCLUSIVE-LOCK NO-LOCK Obtém o registro somente para leitura dos dados, utilizar sempre em relatórios para não esperar pelos registros que estão sendo atualizados ou criados. SHARE-LOCK Obtém o registro para leitura e impossibilita outros usuários de aplicar leitura como EXCLUSIVE-LOCK, quase nunca utilizado EXCLUSIVE-LOCK Obtêm o registro para alteração do mesmo, outros usuários não podem atualizar o mesmo registro até que este seja liberado Quando usuário tenta acessar um registro com exclusive-lock e que está sendo atualizado por outro usuário, este espera até que o registro seja liberado. Para não esperar até que outro usuário libere o registro o usuário pode trabalhar apenas com os registros NÃO travados ignorando os que estão sendo atualizados por outros usuários. Exemplo de acesso apenas a registros não travados : FOR EACH <tabela> NO-WAIT EXCLUSIVE-LOCK: UPDATE <tabela>.<campo> = teste. END: Ou FIND FIRST <tabela> NO-WAIT EXCLUSIVE-LOCK. IF AVAILABLE <tabela> THEN UPDATE <tabela>.<campo> = teste. Escopo de registros O escopo do registro é o tempo em que o registro está disponível no programa ou entre programas. O escopo do registro pode ser FORTE ou FRACO O escopo FRACO, é comumente utilizado, onde o programa deixa para o Progress o controle da disponibilidade do registro no programa Exemplo de escopo FRACO: <pedaço do código> DO TRANSACTION: FIND FIRST <tabela> EXCLUSIVE-LOCK. UPDATE <tabela>.<campo> = teste. DISPLAY <tabela>.<campo>. <pedaço do código> No exemplo acima o Progress mantém o registro disponível após o final da transação. 8
9 Exemplo de escopo FORTE: <pedaço do código> DO TRANSACTION for <tabela>: FIND FIRST <tabela> EXCLUSIVE-LOCK. UPDATE <tabela>.<campo> = teste. DISPLAY <tabela>.<campo>. <pedaço do código> No exemplo acima o Progress NÂO mantém o registro disponível após o final da transação e irá ocasionar um erro de compilação para este código Qual a utilização do escopo FORTE? R.: Para forçar o Progress a manter o registro disponível em memória Exemplo de escopo FRACO: FOR EACH <tabela>: IF <condição> THEN DO: FIND FIRST <tabela1> NO-LOCK. IF NOT AVAILABLE <tabela> THEN DISPLAY <tabela1>.<campo> Exemplo de escopo FORTE: DO FOR <tabela2>: FOR EACH <tabela>: IF <condição> THEN DO: FIND FIRST <tabela1> NO-LOCK. IF NOT AVAILABLE <tabela> THEN DISPLAY <tabela1>.<campo> No exemplo acima foi solicitado ao Progress que o escopo do registro ficasse disponível para o teste de available. Não utilizar WORKFILES Não é aconselhável o uso de WORKFILES devendo ser trocados pelas TEMP-TABLES. Os WORKFILES são provenientes das versões anteriores de Progress e utilizam o limite imposto pelos parâmetros s l, no caso do programa necessitar utilizar mais memória que o préalocado, o programa será interrompido com uma mensagem informando que você deve aumentar os parâmetros. O uso de TEMP-TABLES elimina estes problemas por utilizar a quantidade necessária para a alocação de registros na TEMP-TABLE, quando a quantidade ultrapassa os valores informados pelos parâmetros a TEMP-TABLE começa então a utilizar no lugar da memória o HD como área de armazenamento. 9
10 Utilização de TEMP-TABLE do tipo global Não é aconselhável a utilização de TEMP-TABLE definida como uma variável global. O consumo de memória causado por uma TEMP-TABLE pode ser muito grande, dependendo ainda, da quantidade de campos e registros. Esta variável será eliminada da memória somente ao fechar a sessão PROGRESS. Neste caso, a performance do produto é afetada como um todo e não só de um programa apenas. É possível, em muitos casos, substituir uma TEMP-TABLE global por uma TEMP-TABLE compartilhada (NEW SHARED e SHARED) ou por passagem de parâmetros. Quando possível, limpar as temp-tables após o uso, visando minimizar a utilização de memória pelo programa. Utilização do NO-UNDO em definição de variáveis e TEMP-TABLES Variáveis declaradas como NO-UNDO, não necessitam ser controladas pelo PROGRESS, isto é, quando não é utilizado o parâmetro NO-UNDO, o arquivo *.LBI (local before image este arquivo está no cliente) necessita controlar os valores armazenados pela variável. Isto aumenta I/O diminuindo a performance. Normalmente, as variáveis não precisam ser controladas caso haja problemas com o sistema, sendo assim, não é necessário ficar armazenando seus valores. Limpeza de registros nas TEMP-TABLES Uma das rotinas mais utilizadas nos programas que utilizam TEMP-TABLES é a eliminação dos dados contidos na TEMP-TABLE para geração de uma nova massa de dados. Na versão 9 do Progress, foi implementado um novo comando (EMPTY TEMP-TABLE) que torna a execução das rotinas de eliminação de TEMP-TABLES mais performática. Essa eliminação, quando for de TODOS os registros da TEMP-TABLE pode ser usada utilizando a seguinte combinação de comandos. Exemplo de Código performático : &IF integer(entry(1,proversion,".")) >= 9 &THEN empty temp-table <temp-table>. & for each <temp-table>: delete <temp-table>. end. &ENDIF Regras para utilização de índice O Progress possui algumas regras para escolher o melhor índice a ser utilizado numa consulta Este assunto é complexo, porêm vamos tentar passar os passos básicos efetuados pelo progress para a escolha do índice e o que o programador pode fazer para forçar o uso de um índice (correto) na programação. 10
11 Para forçar o progress à utilizar o índice desejado o programador pode incluir a cláusula USE-INDEX no acesso ao registro Forçando o uso do índice: for each <temp-table> USE-INDEX <nomedoindice> WHERE <condição>: delete <temp-table>. end. Como o Progress escolhe o índice automaticamente: utiliza o primeiro índice (por ordem alfabética) que satisfaz todos os campos da consulta utiliza o índice que satisfaz mais campos da consulta utiliza o índice primário para algum campo igual o da consulta varre a tabela (full scan) Exemplo de índices numa tabela primario (primario) campo A combinado campo A campo B campo C campo D sumarizado campo A campo B Verificando o uso do índice: FOR EACH <tabela> WHERE <tabela>.<campoa> = 1 and <tabela>.<campob> = 2 no-lock: O código acima utiliza o índice combinado, onde o correto para melhor performance seria o índice sumarizado. Sempre que houverem mais de um índice que satisfaça a condição para o acesso do registro deve-se forçar o uso do índice com menor número de campos. Para verificar qual o índice utilizado pelo Progress, pode-se usar a cláusula xref (Cross Reference) no momento da compilação. Ex.: compile /cpp/programa.p xref c:/temp/xref.txt Programa exemplo: DEF VAR l-testa AS LOG NO-UNDO. IF l-testa THEN DO TRANSACTION: FIND FIRST ITEM WHERE ITEM.it-codigo = "TESTE" EXCLUSIVE-LOCK. UPDATE ITEM.it-codigo = ITEM.it-codigo. FOR EACH man_docto WHERE man_docto.cdn_fabrica = 7501 EXCLUSIVE-LOCK BY man_docto.cdn_docto: ASSIGN man_docto.cdn_fabrica = man_docto.cdn_fabrica. 11
12 Segue abaixo o arquivo xref para o programa exemplo c:\temp\teste.p c:\temp\teste.p 1 COMPILE c:\temp\teste.p c:\temp\teste.p c:\temp\teste.p 1 CPINTERNAL ISO c:\temp\teste.p c:\temp\teste.p 1 CPSTREAM ibm850 c:\temp\teste.p c:\temp\teste.p 1 STRING "l-testa" 7 NONE UNTRANSLATABLE c:\temp\teste.p c:\temp\teste.p 4 STRING "item" 4 NONE UNTRANSLATABLE c:\temp\teste.p c:\temp\teste.p 4 STRING "Item" 4 NONE TRANSLATABLE c:\temp\teste.p c:\temp\teste.p 4 ACCESS mgind.item it-codigo c:\temp\teste.p c:\temp\teste.p 4 STRING "TESTE" 5 NONE TRANSLATABLE c:\temp\teste.p c:\temp\teste.p 4 SEARCH mgind.item codigo c:\temp\teste.p c:\temp\teste.p 6 ACCESS mgind.item it-codigo c:\temp\teste.p c:\temp\teste.p 6 ACCESS mgind.item it-codigo c:\temp\teste.p c:\temp\teste.p 6 UPDATE mgind.item it-codigo c:\temp\teste.p c:\temp\teste.p 9 STRING "man_docto" 9 NONE UNTRANSLATABLE c:\temp\teste.p c:\temp\teste.p 9 STRING "Documento" 9 NONE TRANSLATABLE c:\temp\teste.p c:\temp\teste.p 9 ACCESS grdind.man_docto cdn_fabrica c:\temp\teste.p c:\temp\teste.p 9 SEARCH grdind.man_docto num_programa WHOLE-INDEX c:\temp\teste.p c:\temp\teste.p 9 SORT-ACCESS grdind.man_docto cdn_docto c:\temp\teste.p c:\temp\teste.p 11 ACCESS grdind.man_docto cdn_fabrica c:\temp\teste.p c:\temp\teste.p 11 ACCESS grdind.man_docto cdn_fabrica c:\temp\teste.p c:\temp\teste.p 11 UPDATE grdind.man_docto cdn_fabrica c:\temp\teste.p c:\temp\teste.p 12 STRING "codigo" 6 NONE UNTRANSLATABLE c:\temp\teste.p c:\temp\teste.p 12 STRING "num_programa" 12 NONE UNTRANSLATABLE ACCESS access <nomedobanco>.<tabela> <nome_do_campo_referenciado> SORT-ACCESS sort-access <nomedobanco>.<tabela> <nome_do_campo_que_nao_esta_no_indice> indica que aqui pode estar acontecendo um problema performance SEARCH search <nomedobanco>.<tabela> <nome_do_índice_que_o_prog_utilizou> WHOLE-INDEX índice que o progress gerou para satisfazer a consulta STRING string <string> <tamanho_da_string> UPDATE update <nomedobanco>.<tabela> <nome_do_campo_atualizado> Truques para economizar BANDWIDTH Um dos grandes problemas de performance é a transferência de quantidades maciças de dados entre o servidor de banco de dados e o cliente que roda a aplicação. Para economizar fluxo de rede (BANDWIDTH) é interessante sempre que possível para tabelas que possuam muitos campos (Ex. item), seja utilizado a cláusula FIELDS Exemplo de Código a ser melhorado : FIND FIRST <supertabela> no-lock. DISPLAY <supertabela>.<campo5>. FOR EACH <supertabela> no-lock: ASSIGN <variável> = <supertabela>.<campo1>. Exemplo de Código performático : FOR FIRST <supertabela> FIELDS (<campo5>) no-lock: DISPLAY <supertabela>.<campo5>. 12
13 FOR EACH <supertabela> FIELDS (<campo1>) no-lock: ASSIGN <variável> = <supertabela>.<campo1>. Lembrando que numa rede ETHERNET trafega 1 (um) pacote por vez, a economia gerada pelo uso contínuo desse artifício é enorme, o que diminui o número de colisões de pacotes. Quanto menos acesso melhor Um dos problemas mais encontrados nos códigos é o acesso redundante à grandes tabelas o que degrada a performance e aumenta o consumo de recursos do servidor de banco de dados. Exemplo de Código a ser melhorado : FOR EACH <tabela>: /* possui registros */ FIND <tabela_2> WHERE <tabela_2>.<campo> = <tabela>.campo NO-LOCK. DISPLAY <tabela>.<campo> <tabela_2>.<campo>. Exemplo de Código performático : FOR EACH <tabela> BREAK BY <tabela>.<campo>: /* possui registros */ IF FIRST-OF(<tabela>.<campo>) THEN DO: FIND <tabela_2> WHERE <tabela_2>.<campo> = <tabela>.campo NO-LOCK. ASSIGN <variável> = <tabela2>.<campo>. /* uso faz com que não seja preciso alterar o layout da frame */ DISPLAY <tabela>.<campo> <tabela_2>.<campo> O código acima foi alterado para economizar acessos à segunda tabela e por conseqüência aumentar a performance do programa. Use o comando ASSIGN Otimize a carga de valores em variáveis com o comando ASSIGN, pois além de ser mais rápido, o R-CODE do programa fica menor, alocando menos memória na execução do programa. Exemplo de Código a ser melhorado : w-campo1 = texto. /* Repare o ponto final aqui */ w-campo2 = w-empresa. /* Repare o ponto final aqui */ w-tipo = A. /* Repare o ponto final aqui */ Exemplo de Código performático : ASSIGN w-campo1 = texto w-campo2 = w-empresa w-tipo = A. /* Repare o ponto final aqui */ 13
Boas Práticas de Programação
Boas Práticas de Programação Tópicos que veremos Práticas de programação Performance Práticas de programação Veremos: SHARE-LOCK e LOCKS de Registros TRANSAÇÕES LOCK de registro O PROGRESS suporta três
Progress DCA Desenvolvendo Aplicações Caracter Parte 3
Progress DCA Desenvolvendo Aplicações Caracter Parte 3 Tecnologia 1 Agenda Parte 1 Introdução ao Progress Movimentação dos Dados Manipulando os Dados Blocos Localizando Registros Variáveis Processamento
Progress DCA Desenvolvendo Aplicações Caracter Parte 1
Progress DCA Desenvolvendo Aplicações Caracter Parte 1 Tecnologia 1 Agenda Parte 1 Introdução ao Progress Movimentação dos Dados Manipulando os Dados Blocos Localizando Registros Variáveis Processamento
Sincronização e Comunicação entre Processos
Sincronização e Comunicação entre Processos Monitores/Semáforos Semáforos Mecanismos de sincronização nãoestruturados; Exige do desenvolvedor bastante cuidado, pois qualquer engano pode levar a problemas.
Diferenças na Programação com Dataserver Oracle
Diferenças na Programação com Dataserver Introdução Existem diferenças entre DB e DB : O Desenvolvedor deve ter estas diferenças em mente quando está construindo seus programas. É preciso saber para quais
PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 09a- Acessando os dados através JDBC
Aula 09a- Acessando os dados através JDBC Conteúdo Programático desta aula Compreender os comando existentes para acesso e manipulação de dados nos Bancos de dados Apresentar os dados obtidos no banco
MANUAL PRÁTICO DE PERFORMANCE
MANUAL PRÁTICO DE PERFORMANCE By Jorge Luis Bachtold INTRODUÇÃO A melhoria de performance, tanto em PROGRESS quanto em qualquer outra linguagem envolve normalmente uma série de fatores. Não existe nenhum
INTRODUÇÃO À TECNOLOGIA DA INFORMAÇÃO ACESSO, ATRIBUTOS E OPERAÇÕES COM ARQUIVOS PROFESSOR CARLOS MUNIZ
INTRODUÇÃO À TECNOLOGIA DA OPERAÇÕES COM ARQUIVOS PROFESSOR CARLOS MUNIZ INTRODUÇÃO O Sistema de Arquivos é o modo como as informações são armazenadas nos dispositivos físicos de armazenamento, exemplo
Fundamentos de Sistemas Operacionais
Fundamentos de Sistemas Operacionais Aula 6: Monitores, Troca de Mensagens e Deadlock Diego Passos Última Aulas Mecanismos de Exclusão Mútua Operações atômicas. Protocolos de controle de acesso. Spin-locks.
Aula 03. Evandro Deliberal
Aula 03 Evandro Deliberal [email protected] https://www.linkedin.com/in/evandrodeliberal Concorrência Método Sincronização Problemas: Perda de consistência Acesso a dados inconsistentes Perda de atualizações
( ) ( ) Auto Avaliação F ( ) M ( ) D ( ) Seqüência: Sistemas Operacionais - UCSAL Professor : Marco Antônio C. Câmara Exercícios - Dia 20/04/2011
Aluno(a) : A avaliação terá a duração de uma hora, portanto, seja objetivo nas respostas e procure não perder tempo. A prova deverá ser realizada sem rasuras e com caneta azul ou preta. Eventuais questões
Sistemas - Kz_Config Manual do Usuário. Manual do usuário XPAcesso
Manual do usuário XPAcesso 1 1. Botões padrão Todas as telas de cadastro seguem o mesmo padrão de botões: Incluir Ativa opção para inclusão de novos registros no cadastro Alterar Prepara o registro para
Instalação... 1 Configuração... 1 UPC de validação campo a campo... 2 Configurando o monitoramento de cada campo... 3 Criação das UPCs...
TUTORIAL DE INSTALAÇÃO, CONFIGURAÇÃO E USO DO SISTEMA CAMPO A CAMPO Sumário Instalação... 1 Configuração... 1 UPC de validação campo a campo... 2 Configurando o monitoramento de cada campo... 3 Criação
MANUAL PARA APLICAR NOTAS
MANUAL PARA APLICAR NOTAS Criar os Grupos de Autorização na transação SE54 Em tabela/visão informar ZYCE Marcar Grupos de Autorização Clicar em Criar/modificar Como Criar um Grupo de Autorização Informar:
Lock. Administração de Banco de Dados
Lock Administração de Banco de Dados 1 Tópicos o Lock o Tipos de Lock o Recursos que podem ser bloqueados o Dica de Lock sobre uma Tabela o Dica de Lock em uma Sessão o Compatibilidade entre Locks 2 Lock
Guia de Atualização PRODUTO DATASUL
Guia de Atualização PRODUTO DATASUL Unificação de Conceitos Fase 1 1. Processo de Unificação de Conceitos ALERTA: Além desse documento, consulte o guia de atualização para Datasul 11.5.3. Nele está disponível
Bematech Live Nota Fiscal Eletrônica 3ª Geração
SUMÁRIO DESCRIÇÃO GERAL... 2 PARAMETRIZAÇÕES... 3 Unidade de Negócio... 3 Documento Fiscal Referenciado Operação Fiscal... 4 FUNCIONALIDADE... 5 Documento Fiscal Referenciado - Lançamento de Documento
Capítulo 8. Estruturas de Controle no Nível de Sentença
Capítulo 8 Estruturas de Controle no Nível de Sentença Níveis de fluxo de controle Computações são realizadas por meio da avaliação de expressões e da atribuição dos valores a variáveis Para tornar a computação
Banco de Dados I 6 Transações e Controle de Concorrência
Banco de Dados I 6 Transações e Controle de Concorrência Grinaldo Lopes de Oliveira (grinaldo( [email protected]) Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas * Material com créditos
Fundamentos Programação
Fundamentos Programação A programação de computadores não é difícil. Realmente só requer algo como: Aprender alguns conceitos gerais Ser cuidadoso, organizado e lógico Praticar até aprender a dominar a
Documentação Atualizações Onix Gestão Empresarial e Nfce
Documentação Atualizações Onix Gestão Empresarial e Nfce Versão 1.2.131.02 10/12/2018 01. Chamado 36092 Quando instalado um sistema e for configurado os parâmetros da NFCe, ao salvar o mesmo aparece um
INFORMATIVO MASTERSAF DFE VERSÃO
MASTERSAF DFE VERSÃO 3.26.2 SUMÁRIO Novas funcionalidades / Melhorias... 1 Emissor de Nota Fiscal de Serviço Eletrônica NFS-e... 1 Municípios liberados na versão 3.26.2:... 1 Emissor de Nota Fiscal Eletrônica
Cordilheira Sistema Contábil 2.85a Conciliação Contábil
LIBERAÇÃO DE ATUALIZAÇÃO CORDILHEIRA VERSÃO 2 (Orientamos aos clientes que utilizam banco de dados SQL, para efetuarem a atualização preferencialmente após o encerramento das atividades do dia, acessando
Sistemas Opera r cionais Gerência de Memória
Sistemas Operacionais Gerência de Memória Gerência de Memória Idealmente, o que todo programador deseja é dispor de uma memória que seja grande rápida não volátil Hierarquia de memórias pequena quantidade
BDII SQL TRANSAÇÃO Revisão 2
exatasfepi.com.br BDII SQL TRANSAÇÃO Revisão 2 André Luís Duarte Honra a teu pai e a tua mãe (que é o primeiro mandamento com promessa), para que te vá bem, e sejas de longa vida sobre a terra.(ef 6:2,3)
Implementando PWM por soft - um método simples. Por Renie S. Marquet reniemarquet.sites.com.br - versão
Implementando PWM por soft - um método simples. Por Renie S. Marquet reniemarquet.sites.com.br - versão 25.02.2005 O PWM (Pulse Width Modulation Modulação por largura de pulso) consiste em controlar o
Processo de Balanço de Estoque (Inventário de Estoque)
Processo de Balanço de Estoque (Inventário de Estoque) Introdução O Inventário de Estoque (Balanço) é uma atividade realizada em determinados períodos de tempo, em que todos os itens do estoque são contados,
Administração de Banco de Dados
Administração de Banco de Dados Aula 6 Prof. Marcos Alexandruk Aula 6 Estruturas lógicas do Oracle: Tabelas tabelas relacionais tabelas temporárias tabelas organizadas por índices tabelas de objetos tabelas
EXEMPLO DE FLASHBACK VERSIONS QUERY E FLASHBACK TRANSACTION QUERY
EXEMPLO DE FLASHBACK VERSIONS QUERY E FLASHBACK TRANSACTION QUERY A funcionalidade do recurso Flashback Query disponível desde a versão Oracle 9i e abordada também nos artigos de Maio/2007 e Maio/2008,
Controle de Transação
Curso: Ciência da Computação Disciplina: Banco de Dados Campus Lages Controle de Transação Prof. Edjandir C. Costa [email protected] Agenda Conceitos de transação e sistema Propriedades desejáveis
Sub Rotinas. Estrutura de Dados. Prof. Kleber Rezende
Sub Rotinas Estrutura de Dados Prof. Kleber Rezende Considerações Iniciais Uma dos métodos mais comuns e amplamente utilizados em programação de computadores é o Top-Down. Nesta abordagem um problema é
Tratamento de Exceções. LPG II Java. Tratamento de Exceções. Conceito de Exceções. Exemplo
Tratamento de Exceções LPG II Java Tratamento de Exceções Introdução Princípios do tratamento de exceções em Java Cláusula try Cláusula catch Cláusula finally Hierarquia de exceções em Java Considerações
Programando em SQL. Triggers, Stored Procedures e funções. Profa. Késsia Marchi
Programando em SQL Triggers, Stored Procedures e funções Objetivo Descrever as funcionalidades de triggers, store procedures e funções; Apresentar vantagens e benefícios; Criação e Gerenciamento de Store
IDES E PROGRAMAÇÃO. Prof. Dr. Cláudio Fabiano Motta Toledo PAE: Maurício A Dias
1 IDES E PROGRAMAÇÃO Prof. Dr. Cláudio Fabiano Motta Toledo PAE: Maurício A Dias {claudio,macdias}@icmc.usp.br 2 Agenda Conceitos Instalação e Configuração Compilação e Execução de Código IDEs Exemplo
Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. Banco de Dados Processamento e Otimização de Consultas
Processamento e Otimização de Consultas Banco de Dados Motivação Consulta pode ter sua resposta computada por uma variedade de métodos (geralmente) Usuário (programador) sugere uma estratégia para achar
Variáveis primitivas e Controle de fluxo
Variáveis primitivas e Controle de fluxo Material baseado na apostila FJ-11: Java e Orientação a Objetos do curso Caelum, Ensino e Inovação, disponível para download em http://www.caelum.com.br/apostilas/
Fundamentos de Sistemas Operacionais
Fundamentos de Sistemas Operacionais Aula 19: Memória Virtual: Introdução Diego Passos Última Aula Paginação Método de gerenciamento de memória mais usado hoje. Espaço de endereçamento de um processo é
Stored Procedures e Triggers
e Triggers Professor: Ricardo Luis dos Santos IFSUL 2015 Agenda Rotinas Armazenadas Stored Procedures Exemplos Triggers Exemplos Exercícios 2 Rotinas Armazendas Rotinas Armazenadas são um conjunto de comandos
Sistemas de Informação. Sistemas Operacionais
Sistemas de Informação Sistemas Operacionais SISTEMA DE ARQUIVOS SUMÁRIO 7. SISTEMA DE ARQUIVOS: 7.1 Introdução; 7.2 s; 7.3 Diretórios; 7.4 Gerência de Espaço Livre em Disco; 7.5 Gerência de Alocação de
ThinTemplates Parte 2
ThinTemplates Parte 2 Tecnologia 1 Agenda Parte 1 Conceitos Características ThinMaintenance ThinMasterDetail Parte 2 ThinMaintenanceNoNavigation Parte 3 ThinWindow ThinReport 2 Agenda ThinFormation Parte
MATA60 BANCO DE DADOS Aula 10- Indexação. Prof. Daniela Barreiro Claro
MATA60 BANCO DE DADOS Aula 10- Indexação Prof. Daniela Barreiro Claro Indexação Indexação em SQL; Vantagens e Custo dos Índices; Indexação no PostgreSQL; FORMAS - UFBA 2 de X; X=23 Indexação Sintaxe: create
f. Exemplo: verificar condição de aprovação de alunos
Tecnologia em Análise e Desenvolvimento de Sistemas Disciplina: B1SGB - Sistemas Gerenciadores de Banco de Dados Memória de aula Semana 17 1) Expressões CASE a. Tem a mesma finalidade que nas linguagens
SGBD. Funções Básicas de um SGBD
SG Definição Sistema cujo objetivo principal é gerenciar o acesso e a correta manutenção dos dados armazenados em um banco dados. Funções básicas Métodos acesso Integrida Semântica Segurança Concorrência
( ) Sistemas de Computação - Unifacs Professor : Marco Antônio C. Câmara - Lista de Exercícios II - Dia 18/10/2009
1ª Questão : Sobre o conceito de sistema operacional, escreva ao lado a soma dos números dos itens que considera corretos: (01) O conceito da máquina de níveis define o hardware como o nível mais baixo,
A instância Oracle é composta de :
Conceitos básicos da arquitetura do Oracle Uma instância Oracle consiste na System Global Area (SGA) e um conjunto de processos de segundo plano (background processes). Quando uma instância é iniciada,
Manual Técnico. Instalação e Configuração do Reporting Services
201 6 Manual Técnico Instalação e Configuração do Reporting Services Me ta T e c no l o g i a em So f t wa r e Lt da. Com a instalação do módulo de Reporting services poderemos disponibilizar relatórios,
Paginação e Segmentação. Memória Principal
Paginação e Segmentação Memória Principal Paginação Memória Principal Paginação A paginação é um recurso gerenciado por Hardware; Ela divide a memória física em várias partes de tamanho igual, chamados
Android e Bancos de Dados
(Usando o SQLite) Programação de Dispositivos Móveis Mauro Lopes Carvalho Silva Professor EBTT DAI Departamento de Informática Campus Monte Castelo Instituto Federal de Educação Ciência e Tecnologia do
Introdução. O BOCA Online Contest Administrator é um sistema de correção online de códigos utilizado em competições de programação de computadores.
Aula BOCA Introdução O BOCA Online Contest Administrator é um sistema de correção online de códigos utilizado em competições de programação de computadores. A correção é feita através de casos de teste:
Liberação Especial GPS
GPS 12.1.10-1 Sumário 1.1 Liberações... 4 1.1.1 Prestador x Atuação x Especialidade... 4 1.1.2 Habilitar os campos de ano e trimestre na guia de seleção... 4 1.1.3 Validar alterações em beneficiários conforme
SQL Pacotes. Profa. Dra. Cristina Dutra de Aguiar Ciferri. Laboratório de Bases de Dados Pacotes
SQL Pacotes Laboratório de Bases de Dados Características Pacotes objetos do banco de dados são equivalentes a bibliotecas Armazenam procedimentos funções definições de cursores declarações de variáveis
NOVIDADES/MELHORIAS ERP SOLUTION. Versão
VERSÃO 008.018 NOVID AD ES E MELHORIAS E112A9 Jessica Pinheiro 16/05/2016 2/18 NOVIDADES/MELHORIAS ERP SOLUTION Versão 008.018 1. Configuração de situação cadastral padrão para novos clientes.... 3 2.
Tabelas. Banco de Dados I MySQL
FACULDADE ANGLO AMERICANO FOZ DO IGUAÇU Curso de Ciência da Computação 5º Período Disciplina: Banco de Dados I Prof. Erinaldo Sanches Nascimento Tabelas Banco de Dados I MySQL Linguagem de Definição de
1) Mostrando uma mensagem. 10 exemplos de macros essenciais no Excel. Este conteúdo faz parte da série: Excel VBA Ver 6 posts dessa série
Este conteúdo faz parte da série: Excel VBA Ver 6 posts dessa série Para aproveitar toda a potencia que o Excel possui, é indispensável a utilização de macros. Macro poder ser definida como uma serie de
Instituto Federal de Educação, Ciência e Tecnologia de São Paulo - IFSP
Instituto Federal de Educação, Ciência e Tecnologia de São Paulo - IFSP Campus de Caraguatatuba Tecnólogo em Análise e Desenvolvimento de Sistemas 1 0 Semestre de 2013 BD I Prof. Lineu Mialaret Aula 25:
GBC043 - Sistemas de Banco de Dados Lab8 : Transações no PostgreSql
GBC043 - Sistemas de Banco de Dados Lab8 : Transações no PostgreSql Ilmério Reis da Silva [email protected] www.facom.ufu.br/~ilmerio/sbd UFU/FACOM/BCC Transações Ver conjunto de slides na opção Transações
Sistemas de Informação. Sistemas Operacionais
Sistemas de Informação Sistemas Operacionais PROCESSOS E THREADS PARTE I SUMÁRIO 2. PROCESSO: 2.1 Introdução; 2.2 Estrutura do Processo; 2.3 Estados do Processo; 2.4 Mudanças de Estado do Processo; 2.5
#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C
#include Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C ANTES DO C ERA A LINGUAGEM B B foi essencialmente uma simplificação da linguagem BCPL. B só tinha um tipo de dado, que
Inventário Rotativo (Coletor de Dados)
Inventário Rotativo (Coletor de Dados) Inventario Rotativo com coletor Conceito O conceito do inventário rotativo no WinThor, é atualizar as quantidades do estoque no sistema por filiais (estoque lógico)
LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.
LINGUAGEM C: FUNÇÕES Prof. André Backes FUNÇÃO Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. printf(): função que escreve na tela scanf(): função que lê o teclado
OFIC1400 Requisição de Peças para Serviços. OFIC Requisição de Peças para Serviços 1 / 10
OFIC1400 Requisição de Peças para Serviços 1 / 10 Este programa permite requisitar peças para uma determinada O.S. Como critério de filtro estarão disponíveis a seguintes opções Requisição, Estorno e Consulta
Comando de Seleção em Java
Universidade Federal do ABC (UFABC) Disciplina: Processamento da Informação (BC-0505) Assunto: Comando de Seleção Comando de Seleção em Java Conteúdo 1. Introdução... 1 2. Comando de seleção... 2 3. Comandos
Manual de Versão Sistema Condomínio21
Manual de Versão Sistema Condomínio21 Belo Horizonte, 2016. Group Software. Todos os direitos reservados. Sumário 1. Parâmetro para determinar a inicialização automática do Condomínio21 Relatórios... 3
Linguagem C Princípios Básicos (parte 1)
Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos
Integração Backoffice Datasul 11 x Protheus/SIGAGFE
Integração Backoffice Datasul 11 x Protheus/SIGAGFE Maio/2014 Simulação do Frete no Cálculo de Embarques do Datasul e Repasse de Fretes e Gravação da Simulação no SIGAGFE Sumário Sumário... 1 1. Contexto
GUIA DO MÓDULO OFICINA
Fernanda Klein Both 26/08/2013 1/11 GUIA DO MÓDULO OFICINA Sumário 1. Comandos do ERP Solution... 3 2. Cadastro de Parâmetros (2001)... 3 3. Cadastro de Veículos de Clientes (2003)... 3 4. Cadastro de
Semana 2 Estruturas de Condição, Seleção e Repetição. Prof. Tiago Jesus de Souza
Atualização Técnica e Pedagógica de Professores no componente de Lógica de Programação com C# (console) Semana 2 Estruturas de Condição, Seleção e Repetição Prof. Tiago Jesus de Souza Introdução Nesta
Estrutura de Dados. Aula 07 Alocação Dinâmica
Estrutura de Dados Aula 07 Alocação Dinâmica 2 ALOCAÇÃO DINÂMICA Existem três modos de reservar espaço de memória para o armazenamento de informações: 1ª - através do uso de variáveis globais (e estáticas).
2017 Gvdasa Inteligência Educacional Cobrança Registrada
2017 Gvdasa Inteligência Educacional Cobrança Registrada - 2017 1 AVISO O conteúdo deste documento é de propriedade intelectual exclusiva da GVDASA e está sujeito a alterações sem aviso prévio. Nenhuma
Prof. Josenildo Silva
BD II (SI 587) Gatilhos (Triggers) Prof. Josenildo Silva [email protected] Motivação Algumas rotinas precisam ser executadas antes ou depois de um determinado evento no banco de dados Motivação Regras
Procedimentos para Atualização Sisloc
Procedimentos para Atualização Sisloc Sumário: 1. Informações Gerais... 3 2. Atualização de versão no servidor... 3 Passo a passo... 3 3. Atualização de Versão nas Demais Máquinas... 9 Passo a passo...
Escrito por Adriano Neres Rodrigues Qua, 30 de Dezembro de :00 - Última atualização Qua, 30 de Dezembro de :01
Introdução Geralmente as aplicações que nós desenvolvimentos possui vários formulários. Geralmente estes formulários são criados dinamicamente pela sua aplicação em tempo de execução através de código
26/04/2017 Triggers no SQL Server: teoria e prática aplicada em uma situação real
www.devmedia.com.br [versão para impressão] Link original: http://www.devmedia.com.br/articles/viewcomp.asp?comp=28194 Triggers no SQL Server: teoria e prática aplicada em uma situaçã o real Veja neste
AUTOLAC VERSÃO FINALIZAÇÃO: 27 JUL PUBLICAÇÃO: 31 JUL. 2017
VERSÃO 6.8.0 FINALIZAÇÃO: 27 JUL. 2017 PUBLICAÇÃO: 31 JUL. 2017 Prezado Cliente, Neste documento estão descritas todas as novidades da versão 6.8.0 do Autolac. Fique atento às últimas alterações do sistema.
Memória virtual. Sistemas de Computação
Memória virtual Fundamentos Memória virtual separação da memória lógica do usuário da memória física somente uma parte do programa precisa estar na memória para execução espaço de endereçamento lógico
A linguagem SQL
SQL 2008.1 A linguagem SQL SQL - Structured Query Language. Foi definida nos laboratórios de pesquisa da IBM em San Jose, California, em 1974. Teve seus fundamentos no modelo relacional Sua primeira versão
CAP. VI ANÁLISE SEMÂNTICA
CAP. VI ANÁLISE SEMÂNTICA VI.1 Introdução Semântica SIGNIFICADO, SENTIDO LÓGICO, COERÊNCIA,... Diferença entre SINTAXE e SEMÂNTICA Sintaxe : descreve as estruturas de uma linguagem; Semântica : descreve
