MANUAL PRÁTICO DE PERFORMANCE

Tamanho: px
Começar a partir da página:

Download "MANUAL PRÁTICO DE PERFORMANCE"

Transcrição

1 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 comando mágico que acrescentado a um programa vai torna-lo muito mais rápido. Na maioria das vezes, uma melhoria na forma de funcionamento do programa, tornandoo mais inteligente e menos repetitivo possibilita uma melhoria substancial de performance. Entretanto, mesmo os programas corretamente escritos podem se beneficiar de alguns recursos que o PROGRESS disponibiliza para torna-los mais ágeis. São esses recursos que serão analisados a seguir. VARIÁVEIS A menos que a aplicação não permita, utilize sempre variáveis NO-UNDO, pois elas não utilizam controle de transações, evitando escritas no arquivo LBI local, o que melhora a performance. Procure também evitar as variáveis LIKE, a menos que essas variáveis sejam utilizadas para exibição de informações na tela. Para variáveis internas, utilize a declaração AS, sem FORMAT nem LABEL. DEF VAR c-it-codigo AS CHAR NO-UNDO. Evite também as variáveis SHARED, a não ser que a aplicação exija. Se as chamadas a programas externos forem substituídas por PROCEDURES internas, a utilização de variáveis SHARED/NEW SHARED torna-se desnecessária. Essa técnica será mostrada com mais detalhes mais à frente. Quando forem utilizadas variáveis do tipo EXTENT, inicialize seu conteúdo com apenas um comando ASSIGN, ao invés de utilizar um loop, o que é muito mais lento. Certo: DEF VAR c-it-codigo AS CHAR extent 10 NO-UNDO. ASSIGN c-it-codigo = "A". DEF VAR c-it-codigo AS CHAR extent 10 NO-UNDO. DEF VAR i-cont AS integer NO-UNDO. DO i-cont = 1 TO 10: ASSIGN c-it-codigo[i-cont] = "A". ASSIGN Sempre utilize o comando ASSIGN para carregar valores para variáveis/campos. Procure agrupar o máximo de variáveis possíveis em um mesmo ASSIGN.

2 Certo: ASSIGN c-it-codigo = "item-1" i-op-codigo = 10 c-cod-roteiro = "rot-1". c-it-codigo = "item-1". i-op-codigo = 10. c-cod-roteiro = "rot-1". BUFFER-COPY Este é um comando novo, introduzido na versão 8 do PROGRESS, que possibilita uma boa melhoria de performance, quando bem utilizado. Ele realiza a cópia de valores entre dois BUFFERS de registro, podendo trabalhar inclusive com TEMP-TABLES. Abaixo temos um exemplo típico da utilização do BUFFER-COPY: DEF TEMP-TABLE tt-item NO-UNDO LIKE item USE-INDEX codigo. FOR EACH item CREATE tt-item. BUFFER-COPY item TO tt-item. O exemplo acima copia todos os campos da tabela item para uma TEMP-TABLE. Além de executar mais rapidamente, a possibilidade de erros de digitação é muito menor. Basta lembrar que a tabela item possui mais de 200 campos. Um detalhe que vale a pena mencionar, é que os campos da TEMP-TABLE precisam estar definidos exatamente com o mesmo nome dos campos da tabela, pois o BUFFER-COPY não realiza substituição de campos por similaridade. Por exemplo, o campo NR-ORD-PROD e NR-ORD-PRODU vão surtir o mesmo efeito em um comando ASSIGN, mas irão falhar em um comando BUFFER-COPY. Este comando também permite a utilização das cláusulas USING e EXCEPT, permitindo informar quais os campos que deverão ser copiados. Para maiores detalhes, é conveniente consultar o help. FIELDS A cláusula FIELDS, também conhecida por FIELD-LIST, permite ao programador definir quais os campos de determinada tabela um comando de busca irá trazer através da rede para a máquina cliente. Este recurso foi introduzido pelo PROGRESS 8 para melhorar a performance em sistemas cliente/servidor. Através dele é possível reduzir bastante o tráfego de rede e consequentemente a velocidade dos programas. A cláusula FIELDS pode ser utilizada com os comandos FOR (FOR EACH, FOR FIRST, FOR LAST) e nas definições de QUERYS.

3 FOR FIRST/LAST Os comandos FOR FIRST e FOR LAST podem substituir os comandos FIND FIRST e FIND LAST respectivamente. A grande vantagem do comando FOR é possibilitar a utilização da cláusula FIELDS, que permite definir quais os campos que serão enviados pela rede do servidor para o cliente. A utilização destes comandos deve ser feita com alguns cuidados: - Caso a tabela a ser lida possua poucos campos e todos ou quase todos os campos serão utilizados após o comando FOR, não é vantajoso utiliza-lo; - Os campos que não forem incluídos na cláusula FIELDS não estarão disponíveis para uso pelo programa, entretanto o PROGRESS NÃO emitirá mensagens de erro em tempo de compilação. Apenas serão emitidas mensagens de erro durante a execução do programa; - A utilização do FOR com a cláusula FIELDS é vantajosa apenas em ambiente Cliente/Servidor, onde os registros transitam pela rede. Em ambientes HOST BASED (como o Magnus I), não apresentam nenhuma vantagem. - Embora o comando permita, NUNCA deve ser utilizada a cláusula BY, pois nem o FOR FIRST e nem o FOR LAST realizam a ordenação antes de retornar o registro. A cláusula BY pode ser utilizada apenas com FOR EACH. - Utilize FOR FIRST/FOR LAST apenas para leituras NO-LOCK. Para a leitura de registros que serão atualizados, é mais conveniente a utilização do FIND EXCLUSIVE-LOCK. A sintaxe mais comum para os comandos FOR FIRST/FOR LAST é a seguinte: FOR FIRST item FIELDS (it-codigo perm-saldo-neg pm-ja-calc) WHERE item.it-codigo = c-it-codigo FOR EACH O comando FOR EACH também permite a utilização da cláusula FIELDS, o que agiliza bastante a execução deste comando. O exemplo abaixo é cerca de 3 vezes mais rápido com a cláusula FIELDS: FOR EACH item FIELDS (it-codigo) Certo: Procure aninhar o máximo de leituras possíveis no mesmo comando. FOR EACH item FIELDS (it-codigo) NO-LOCK, FIRST estrutura FIELDS (it-codigo) WHERE estrutura.it-codigo = item.it-codigo DISP estrutura.it-codigo. FOR EACH item FIELDS (it-codigo) FIND estrutura WHERE estrutura.it-codigo = item.it-codigo NO-LOCK NO-ERROR. IF avail estrutura THEN DISP estrutura.it-codigo. Lembre-se que a cláusula FIELDS e a cláusula NO-LOCK devem ser informadas para cada componente do FOR EACH.

4 Quando for realizar a atualização de registros, dentro de um FOR EACH, onde apenas alguns registros serão atualizados, procure realizar um FOR EACH com a cláusula NO-LOCK e um FIND EXCLUSIVE-LOCK apenas para os registros que serão atualizados. FOR EACH item FIELDS (it-codigo pm-ja-calc) IF item.pm-ja-calc THEN DO: FIND b-item WHERE ROWID (b-item) = ROWID (item) EXCLUSIVE-LOCK: ASSIGN b-item.log-1 = yes. DISP item.it-codigo. Lembre-se de utilizar um BUFFER do registro para realizar a atualização, senão o PROGRESS vai emitir uma mensagem de erro. FIND CURRENT O comando FIND CURRENT pode ser utilizado para realizar a atualização de um registro já tenha sido lido com um FOR FIRST. FOR FIRST item FIELDS (it-codigo) IF fn-altera-item (item.it-codigo) THEN DO: FIND current item EXCLUSIVE-LOCK. ASSIGN item.log-1 = yes. TEMP-TABLES As TEMP-TABLES, se utilizadas corretamente, possibilitam grande auxílio na melhora de performance dos programas em PROGRESS. Procure defini-las como NO-UNDO, a menos que seja realmente necessário manter o controle sobre as alterações realizadas dentro das transações. A utilização da cláusula NO- UNDO, além de torna-la mais rápida, ocupa menos espaço em disco na estação do cliente. Procure ser o mais mesquinho possível na criação de índices, pois eles tornam a inclusão de registros mais lenta. Por outro lado, na grande maioria das vezes, é excelente definir um índice primário e único baseado nos FINDS que forem executados no programa. Não utilize os comandos FOR FIRST, FOR LAST e CAN-FIND para TEMP-TABLES, pois eles não irão proporcionar nenhum ganho de performance, afinal todas as informações da TEMP-TABLE estão armazenadas localmente e não irão transitar pela rede. Da mesma forma, não é necessário utilizar as cláusulas NO-LOCK, SHARE-LOCK ou EXCLUSIVE-LOCK, pois não existe lock de registros para TEMP-TABLES. O PROGRESS simplesmente vai ignorar essas cláusulas. Sempre que uma TEMP-TABLE for passada como parâmetro, esqueça seu ROWID, pois ele será alterado. Os FINDS com ROWID são os mais rápidos, mas se a TEMP-TABLE for passada como parâmetro será necessário utilizar o índice primário da TEMP-TABLE para posiciona-la. Procure evitar a criação de TEMP-TABLES LIKE, pois apesar de precisar de menos trabalho para defini-las, elas copiam todas as definições da tabela original, inclusive os índices. Apenas utilize TEMP-TABLES LIKE se realmente precisar de todos ou de quase todos os campos da tabela original. Se FOR realmente necessária a criação de uma TEMP-TABLE LIKE, utilize a cláusula USE-INDEX, o que fará com que apenas o índice informado seja trazido da tabela original para a TEMP-TABLE.

5 DEF TEMP-TABLE tt-item NO-UNDO LIKE item USE-INDEX codigo. Procure evitar a utilização de TEMP-TABLES SHARED e NUNCA utilize TEMP-TABLES GLOBAL SHARED. USE-INDEX Procure não utilizar a cláusula USE-INDEX com FIND, FOR EACH e outros comandos de busca de registros, a menos que você realmente queira forçar a utilização de um índice. Em 99% dos casos, o PROGRESS irá selecionar o melhor índice para satisfazer a consulta com a melhor performance possível. Além disso, caso o índice seja modificado, seu programa poderá não mais estar aproveitando ao máximo o índice selecionado, se forem incluídos/modificados ou eliminados campos que faziam parte do índice originalmente. ROWID As buscas utilizando o ROWID são as mais eficientes. Sempre que possível, procure utilizar o ROWID da tabela para realizar uma busca. Se o programa permitir, armazene o ROWID utilizado em uma TEMP-TABLE para utilização posterior, caso os mesmos registros sejam acessados várias vezes durante a execução do mesmo. RUN O comando RUN permite a execução de PROCEDURES internas, programas externos e chamadas para DLL s criadas através de outras linguagens. O objetivo deste tópico é analisar as chamadas para programas externos. Todo programa externo (.P ou.w) reside em disco, não sendo carregado para a memória no momento da execução do programa pai. Eles serão apenas trazidos para a memória quando da execução do comando RUN. Dependendo do tamanho do programa a ser chamado, de onde ele está localizado (em um servidor de arquivos da rede, por exemplo) e da velocidade do meio de armazenamento/transporte utilizado, esse tempo pode ser bastante longo. O PROGRESS dispõe de alguns parâmetros de inicialização da seção (por exemplo o q) que diminuem o tempo necessário para a execução de uma chamada externa. Entretanto, mesmo com um ambiente otimizado, as chamadas externas devem ser evitadas ao máximo. Um dos mais promissores substitutos das chamadas para programas externos são as PROCEDURES internas (PI s), que serão tratadas a seguir. Além disso, dependendo da situação, uma boa solução pode ser a utilização de INCLUDES ou a execução de uma chamada em modo persistente, que também serão tratadas a seguir. Como comparativo de performance, seguem abaixo dois exemplos de código. O primeiro utiliza uma chamada para programa externo e o outro utiliza uma PROCEDURE interna. Exemplo 01: /* A1.P */ DEF NEW SHARED TEMP-TABLE tt-item NO-UNDO LIKE item USE-INDEX codigo. FOR EACH item RUN B1.p (BUFFER item). /* B1.P */

6 DEF SHARED TEMP-TABLE tt-item NO-UNDO LIKE item USE-INDEX codigo. DEF param BUFFER b-item FOR item. CREATE tt-item. BUFFER-COPY b-item TO tt-item. Exemplo 02: DEF TEMP-TABLE tt-item NO-UNDO LIKE item USE-INDEX codigo. FOR EACH item RUN pi-grava (BUFFER item). PROCEDURE pi-grava. DEF param BUFFER b-item FOR item. CREATE tt-item. BUFFER-COPY b-item TO tt-item. end PROCEDURE O primeiro exemplo é executado em 29 segundos e o outro em 23 segundos. Vale lembrar que o sub-programa B1.P é bem pequeno. Em condições reais, quanto maior o subprograma, maior será a diferença de performance. PROCEDURES As PROCEDURES internas são uma das mais eficazes armas para melhoria de performance. Além de serem chamadas mais rapidamente, possuem uma série de outras vantagens: - Podem receber um nome mais explicativo com relação à função que realizam. Por exemplo, o nome PI-CRIA-RESERVAS-ORDEM é bem mais esclarecedor do que CPP/CP0302b.p. - Como elas estão no corpo do programa, todos os BUFFERS e variáveis que forem declaradas no programa principal poderão ser acessadas pela PI, não precisando receber parâmetros e nem variáveis SHARED. - Permite a definição de variáveis e BUFFERS locais, o que as torna perfeitas para execuções recursivas. - Apesar de estarem no corpo do programa, cada PROCEDURE é carregada em seu próprio segmento executável, o que permite que cada uma delas tenha até 64KBYtes de tamanho, como qualquer programa externo. Uma técnica que torna a programação com PROCEDURES extremamente fácil e estruturada, é utilizada em algumas API s do módulo de Produção do EMS 2.0, como a API de criação de ordens de produção (CPAPI301) e de reporte repetitivo (CPAPI009). Essa técnica consiste em definir o código das PROCEDURES em INCLUDES e depois incorporar essas INCLUDES ao corpo principal do programa, o que acaba tornando-o bem pequeno e permite uma grande estruturação no código. INCLUDES As INCLUDES podem ser utilizadas para substituir as chamadas para programas externos e também para PROCEDURES internas, com algumas restrições. Como o código

7 contido nas INCLUDES é incorporado ao programa, elas permitem a execução do programa em velocidade máxima, sem perdas de performance por causa de chamadas para programas externos ou PROCEDURES. Entretanto, elas aumentam o tamanho do programa, muitas vezes superando o limite de 64KBYtes por segmento executável. Uma regra básica para as INCLUDES é que devem existir poucas chamadas repetidas para elas dentro dos programas e que devem preferencialmente ser utilizadas em locais extremamente críticos em relação à performance. PROGRAMAS PERSISTENTES Uma boa idéia da PROGRESS. Um programa sendo executado de forma persistente nada mais é que um programa externo, rodado através do comando RUN e que retorna um HANDLE para o programa chamador, permanecendo ativo na memória. Através desse HANDLE é possível a execução de qualquer PROCEDURE interna do programa, como se elas fizessem parte do código original do programa pai. Um exemplo bastante conhecido de programa persistente é o UT-ACOMP.P, que é chamado de forma persistente e depois permite a execução de várias PROCEDURES como a PI-ACOMPANHAR e PI-INICIALIZAR. Infelizmente, o recurso de execução persistente não é muito utilizado pelo EMS. Através dele seria possível uma maior separação da interface das regras de negócio, disponibilizando PROCEDURES dentro das API s para realização de validações, verificações de saldo e outras tarefas que são realizadas pelos programas com interface antes da efetiva chamada da API. Além disso, o PROGRESS permite a execução de programas persistentes em um servidor RPC, realizando AS chamadas das PROCEDURES diretamente ao servidor, de forma transparente para o programa, tornando a execução ainda mais rápida. A sintaxe mais comum para execuções persistentes é: RUN cpp/cpapi001.p PERSISTENT SET h-handle. CAN-FIND A função CAN-FIND retorna um valor lógico YES caso encontre o registro informado. O CAN-FIND deve sempre ser utilizado quando apenas é necessária a confirmação da existência ou não do registro, pois executa de forma mais rápida do que o FIND ou o FOR FIRST. Como a verificação da existência do registro é feita no servidor, não haverá nenhuma informação transitando pela rede a não ser um valor lógico YES ou NO, o que é bem mais rápido do que o envio de um ou mais campos da tabela como acontece com o FIND ou o FOR FIRST. SHARE-LOCK Evite utiliza-lo. Como o default do PROGRESS para os comandos FIND e FOR é SHARE-LOCK, deve-se sempre acrescentar AS cláusulas NO-LOCK ou EXCLUSIVE-LOCK quando for o caso. BUFFER Sempre que for necessária a utilização de um registro em uma PROCEDURE ou um sub-programa externo, utilize a passagem do BUFFER como parâmetro, em vez de passar o ROWID e realizar um FIND por esse ROWID.

8 Certo: /* A1.P */ FOR FIRST item FIELDS (it-codigo) RUN B1.P (BUFFER item). /* B1.P */ DEF param BUFFER b-item FOR item. DISP b-item.it-codigo. /* A1.P */ FOR FIRST item FIELDS (it-codigo) RUN B1.P (INPUT ROWID (item)). /* B1.P */ DEF INPUT param rw-item AS ROWID NO-UNDO. FIND item WHERE ROWID (item) = rw-item NO-LOCK. DISP item.it-codigo. Deve-se lembrar que se um registro é lido com NO-LOCK, ele permanecerá com o mesmo estado também no programa B1.P. O mesmo vale para a cláusula FIELDS, que mantém o efeito no sub-programa. No exemplo acima, apenas o campo it-codigo está disponível tanto no A1.P quanto no B1.P. Uma restrição à utilização de PARAM BUFFER é que não é possível passar o BUFFER para programas executados via RPC. WORK-FILES Os WORK-FILES ou WORK-TABLES possuem algumas vantagens de performance em relação às TEMP-TABLES, entretanto possuem várias deficiências que restringem o seu uso a apenas algumas situações. A principal deficiência é não permitir a utilização de índices e nem a realização de FIND para registros específicos, permitindo apenas a movimentação seqüencial, com FIND NEXT/PREV/FIRST/LAST embora permita o posicionamento de forma aleatória utilizando-se o ROWID. Como vantagem, destaca-se a velocidade na criação de registros, um pouco superior à das TEMP-TABLES. Como os WORK-FILES são armazenados exclusivamente em memória, não é possível a utilização dos mesmos para armazenamento de uma grande quantidade de registros. Outra desvantagem é não poderem ser passados como parâmetros. A utilização mais óbvia para os WORK-FILES seria em uma aplicação que iria criar registros de forma seqüencial, realizando depois a leitura dos mesmos também de forma seqüencial, na mesma ordem.

9 CASE Um comando extremamente interessante e também pouco utilizado. O CASE é mais rápido que uma série de comandos IF...THEN...ELSE aninhados e possibilita uma estruturação maior no programa. Certo: CASE n: WHEN 1 THEN RUN pi-proc-1. WHEN 2 THEN RUN pi-proc-2. OTHERWISE RUN pi-proc-3. END CASE. IF n = 1 THEN RUN pi-proc-1. ELSE IF n = 2 THEN RUN pi-proc-2 ELSE RUN pi-proc-3. IF...THEN...ELSE O comando IF, em algumas situações pode ser substituído pelo CASE. Em outras não. Uma forma de utilização que embora facilite bastante tem reflexos negativos na performance é a combinação dos comandos ASSIGN e IF (em determinadas situações). O exemplo abaixo ilustra bem isso: Certo: IF x = 1 THEN ASSIGN n = 0. ASSIGN n = IF x = 1 THEN 0 ELSE n. Além disso, deve-se evitar a utilização das constantes lógicas com o comando IF, conforme ilustrado abaixo: Certo: IF l-teste THEN RUN pi-teste. IF NOT l-teste THEN RUN pi-nao-teste. IF l-teste = yes THEN RUN pi-teste. IF l-teste = no THEN RUN pi-nao-teste.

10 Obs.: Nos comandos de busca (FIND, FOR) não deve ser utilizado o operador NOT, sob pena do PROGRESS realizar uma busca em toda a tabela. INDEXED-REPOSITION Essa opção, existente nas QUERYS e SMART-QUERYS do PROGRESS, torna a navegação muito mais rápida. Ela não pode ser utilizada se houverem JOINS na QUERY. TRIGGERS Existem muitas tabelas importantes do EMS que possuem TRIGGERS de WRITE, CREATE e DELETE. Uma das mais conhecidas é a tabela item que possui uma TRIGGER de WRITE bastante complexa. Esses programas são executados toda vez que o evento correspondente é executado em uma tabela. Por exemplo, a TRIGGER de WRITE do item é executada toda vez que alguma informação é alterada nessa tabela. Em muitos casos isso reduz bastante a performance. Dependendo da aplicação, os campos a serem modificados não tem qualquer interferência na lógica da TRIGGER, entretanto ela é executada assim mesmo. Uma melhoria de performance considerável pode ser conseguida desabilitando-se as TRIGGERS das tabelas que estão sendo atualizadas. Uma forma de fazer isso pode ser vista abaixo: ON WRITE OF item OVERRIDE DO:

11 Este código irá criar uma TRIGGER vazia que sobrepõe a execução da TRIGGER original, evitando que esta seja executada. Obs.: Tenha cuidado na hora de desabilitar as TRIGGERS. Verifique se realmente isso vai prover um ganho significativo de performance e se você não estará desativando regras de negócio importantes para o produto. ÍNDICES A correta utilização dos índices das tabelas é uma das formas mais eficientes de melhoria de performance. Existem várias regras para um bom aproveitamento dos índices. Vamos analisar todas elas: - Quando realizar a busca de um registro utilizando um índice composto de vários campos, sempre procure utilizar EQUALITY MATCHES, ou seja, condições com o sinal de igual ( = ), na mesma seqüência em que são definidos no índice. Ex.: Índice código, da tabela oper-ord, do banco MGIND: nr-ord-prod, it-codigo, cod-roteiro, op-codigo. Procure sempre utilizar o máximo possível de EQUALITY MATCHES, a partir do primeiro componente do índice: Adequado: FOR EACH oper-ord WHERE oper-ord.nr-ord-prod = i-nr-ord-prod Melhor: FOR EACH oper-ord WHERE oper-ord.nr-ord-prod = i-nr-ord-prod AND oper-ord.it-codigo = c-it-codigo Rápido: FOR EACH oper-ord WHERE oper-ord.nr-ord-prod = i-nr-ord-prod AND oper-ord.it-codigo = c-it-codigo AND oper-ord.cod-roteiro = c-cod-roteiro Muito Rápido: FOR EACH oper-ord WHERE oper-ord.nr-ord-prod = i-nr-ord-prod AND oper-ord.it-codigo = c-it-codigo AND oper-ord.cod-roteiro = c-cod-roteiro AND oper-ord.op-codigo = i-op-codigo Evite:

12 FOR EACH oper-ord WHERE oper-ord.nr-ord-prod = i-nr-ord-prod AND oper-ord.cod-roteiro = c-cod-roteiro AND oper-ord.op-codigo = i-op-codigo No exemplo acima, o PROGRESS apenas utiliza o primeiro componente do índice, não podendo utilizar os demais por causa da quebra de seqüência nos campos do índice. Esse exemplo é especialmente lento, podendo ser inclusive mais lento do que o exemplo abaixo: FOR EACH oper-ord WHERE oper-ord.nr-ord-prod = i-nr-ord-prod IF oper-ord.cod-roteiro <> c-cod-roteiro or oper-ord.op-codigo <> i-op-codigo THEN NEXT. NUNCA realize uma busca sem utilizar pelo menos o primeiro campo de um índice qualquer da tabela, mesmo que os demais campos não correspondam aos campos do índice. No exemplo acima, nunca deveria ser realizado um FOR EACH na tabela oper-ord sem a utilização do campo nr-ord-prod, a não ser que exista outro índice que permita esse tipo de busca. - INEQUALITY MATCHES ( <> ) devem ser evitados ao máximo, sob pena de obrigarem a varredura seqüencial de toda a tabela. Se for realmente necessária a utilização do operador lógico <>, utilize-o em um campo que não corresponda ao primeiro componente do índice utilizado. No nosso exemplo da tabela oper-ord, ele poderia ser aplicado para qualquer campo menos o nr-ord-prod, sendo que quanto mais abaixo na estrutura do índice, melhor. Ou seja, a utilização do operador lógico <> no campo op-codigo impacta muito menos na performance do que a utilização no campo it-codigo. - RANGE MATCHES ( <, >, <=, >=, BEGINS ) seguem a mesma recomendação dada para o operador lógico <>. Deve-se evitar utiliza-los nos primeiros componentes do índice, e NUNCA aplica-los ao primeiro campo do índice, mesmo que para os demais campos sejam utilizados EQUALITY MATCHES. - EVITE a utilização da função MATCHES, que não faz aproveitamento dos índices - A ordem dos campos na cláusula WHERE não importa, desde que a seqüência de componentes do índice seja mantida. FOR EACH oper-ord WHERE oper-ord.nr-ord-prod = i-nr-ord-prod AND oper-ord.it-codigo = c-it-codigo Equivale a: FOR EACH oper-ord WHERE oper-ord.it-codigo = c-it-codico AND oper-ord.nr-ord-prod = i-nr-ord-prod - Se for necessário utilizar a cláusula BY em um FOR EACH, procure sempre informar um campo que seja o primeiro componente de um índice.

13 - NUNCA utilize um IF...THEN...ELSE em uma cláusula WHERE, sob pena de obrigar o PROGRESS a realizar uma busca seqüencial na tabela. Utilize variáveis auxiliares para receber um valor conforme a condição e realize a busca com essas variáveis. - Procure evitar ao máximo a utilização do operador lógico OR em uma cláusula WHERE. Regras para seleção de índices: Se múltiplos índices não podem ser selecionados, o PROGRESS segue as seguintes regras para escolher um índice: 1) Um índice não é utilizado (ou necessário) se for fornecido um ROWID. 2) Se a opção USE-INDEX é especificada, o PROGRESS utiliza o índice informado. 3) Se a opção CONTAINS é usada, ele seleciona o WORD-INDEX. 4) Se um índice é único e todos os componentes desse índice são comparados utilizando-se EQUALITY MATCHES ( = ) e o outro índice é não-único, o PROGRESS escolhe o índice único. 5) O índice com maior número de EQUALITY MATCHES ( = ). 6) O índice com uma comparação BEGINS (porque BEGINS é considerada como 2 RANGE MATCHES) 7) O índice com maior número de RANGE MATCHES 8) O índice com o critério de ordenação (BY). Isso acontece apenas se a cláusula WHERE não prover informações suficientes para a seleção de outro índice. 9) Pelo nome do índice, em ordem alfabética. 10) O índice primário. DICAS DE PERFORMANCE - NUNCA utilize as INCLUDES de tradução (ut-liter, ut-table, ut-field) dentro de loops. Sempre que for necessária a utilização de literais dentro de um loop ou de um FOR EACH, utilize variáveis para conter as literais e realize o ASSIGN dentro do loop com essas variáveis. Certo: {utp/ut-liter.i Literal} ASSIGN c-liter = return-value. FOR EACH item CREATE tt-item. BUFFER-COPY item TO tt-item ASSIGN tt-item.msg = c-liter. FOR EACH item CREATE tt-item. {utp/ut-liter.i Literal} BUFFER-COPY item TO tt-item ASSIGN tt-item.msg = return-value. Isso degrada a performance porque dentro da INCLUDE ut-liter (e da ut-field e ut-table também), existe uma chamada para um programa externo, que como já vimos, acaba degradando a performance.

14 - Procure tornar o programa mais inteligente. Por exemplo, em um programa que realiza várias atualizações repetidas na tabela saldo-estoq, é interessante armazenar o ROWID utilizado da primeira vez e depois realizar a busca do saldo utilizando-se desse ROWID. - Caso realmente não seja possível a melhoria da performance do programa para os níveis desejados pelo usuário, procure dar-lhe algum feed-back, ou seja, um retorno do que está acontecendo durante o processo. Essa dica não aumenta realmente a performance do programa, mas faz com que o tempo passe mais rápido para o usuário: é muito mais agradável para ele esperar dois minutos de processamento e acompanhar o que está sendo feito do que ficar dois longos minutos olhando para a ampulheta do windows. - Procure utilizar o máximo de condições possíveis no WHERE, mesmo que essas condições não façam parte do índice, desde que preferencialmente sejam EQUALITY-MATCHES, ou seja, utilizem o operador lógico =, evitando o uso do NEXT. Certo: FOR EACH ord-prod WHERE ord-prod.nr-ord-prod >= i-ord-ini AND ord-prod.nr-ord-prod <= i-ord-fim AND ord-prod.valorizada = no DISP ord-prod.nr-ord-prod. FOR EACH ord-prod WHERE ord-prod.nr-ord-prod >= i-ord-ini AND ord-prod.nr-ord-prod <= i-ord-fim IF ord-prod.valorizada THEN NEXT. DISP ord-prod.nr-ord-prod. - NUNCA utilize funções na cláusula WHERE nos campos da tabela sendo procurada. Utilize as funções sempre nos valores a serem localizados. Certo: FOR EACH movto-estoq WHERE movto-estoq.dt-trans = DATE (c-data) FOR EACH movto-estoq WHERE STRING (movto-estoq.dt-trans) = c-data O segundo FOR EACH será executado de forma muito mais demorada, pois o PROGRESS não pode saber o resultado da função sem antes testa-la com todos os registros. Ou seja, o PROGRESS irá realizar uma busca seqüencial em toda a tabela.

15 - Não utilize RAW-TRANSFER para passagem de parâmetros. O comando RAW-TRANSFER é útil apenas quando for necessária a compactação de todo um registro de uma tabela ou TEMP-TABLE em um campo RAW. Em aplicações normais, deve-se utilizar a passagem de parâmetros e TEMP-TABLES tradicional. - Existem situações, com SMART-QUERYS muito complexas, em que os programas do EMS apresentam uma navegação extremamente lenta. Nesses casos, pode ser possível a quebra da QUERY original em duas ou mais QUERYS menores, com um link de RECORD entre elas. Esse tipo de solução não pode ser utilizada sempre, dependendo de cada caso, mas pode auxiliar bastante na performance, pois diminui o número de JOINS na QUERY e pode permitir a utilização do parâmetro INDEXED-REPOSITION. - Quando um BROWSE tiver uma QUERY com várias condições OR ou tiver condições que não utilizam índices, pode ser interessante transforma-lo em FREEFORM e utilizar um IF ou um CASE para determinar qual o OPEN QUERY que será utilizado. Esse código é colocado na TRIGGER de OPEN-QUERY IF l-nao-iniciadas AND l-liberadas AND l-alocadas AND l-separadas AND l-requisitadas AND l-iniciadas AND l-finalizadas AND l-terminadas THEN OPEN QUERY {&SELF-NAME} FOR EACH tt-niveis NO-LOCK, ~ EACH ord-manut WHERE ord-manut.cd-tag = tt-niveis.cd-tag-pai NO-LOCK BY ord-manut.dt-manut. ELSE OPEN QUERY {&SELF-NAME} FOR EACH tt-niveis NO-LOCK, ~ EACH ord-manut WHERE ord-manut.cd-tag = tt-niveis.cd-tag-pai AND (( ord-manut.estado = 1 AND l-nao-iniciadas ) or ( ord-manut.estado = 2 AND l-liberadas ) or ( ord-manut.estado = 3 AND l-alocadas ) or ( ord-manut.estado = 4 AND l-separadas ) or ( ord-manut.estado = 5 AND l-requisitadas ) or ( ord-manut.estado = 6 AND l-iniciadas ) or ( ord-manut.estado = 7 AND l-finalizadas ) or ( ord-manut.estado = 8 AND l-terminadas ) ) NO-LOCK BY ord-manut.dt-manut. - Lembre-se que um programa deve ser rápido também no cliente, e não apenas durante o desenvolvimento. Muitas vezes, a forma de utilização ou a carga de trabalho a que o programa é submetido no cliente influencia bastante na performance do mesmo. Um fator que costuma ter grande importância em relação à performance é o travamento (lock) de registros. Muitas vezes um programa é bem rápido quando executado em ambiente de desenvolvimento, mas torna-se bastante lento no cliente, por causa do travamento de registros, quando existem dois ou mais usuários operando o mesmo programa simultaneamente. Procure travar os registros para atualização durante o menor tempo possível. Procure também evitar que o programa pare devido a um registro travado, quando ele tem a possibilidade de processar outros registros. Deve-se entretanto, tomar alguns cuidados ao realizar a implementação acima, evitando a ocorrência de dead-locks. Um bom exemplo de código inteligente, que evita ao máximo o

16 travamento de registros e a ocorrência de dead-locks é a API de geração de movimento de estoque CEP/CEAPI001.P, que incorpora, inclusive, o conceito de time-out para execução em RPC, evitando que um registro fique travado permanentemente.

Boas Práticas de Programação

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

Leia mais

Dicas de Performance. Objetivo

Dicas de Performance. Objetivo 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

Leia mais

Progress DCA Desenvolvendo Aplicações Caracter Parte 3

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

Leia mais

Desenvolvimento de Programas utilizando DDK2000 ThinTemplates + DBOs. Sandro Kellermann de Carvalho Desenvolvedor Progress Acton

Desenvolvimento de Programas utilizando DDK2000 ThinTemplates + DBOs. Sandro Kellermann de Carvalho Desenvolvedor Progress Acton Desenvolvimento de Programas utilizando DDK2000 ThinTemplates + DBOs Sandro Kellermann de Carvalho Desenvolvedor Progress Acton O que é DDK2000? DDK2000 Datasul Development Kit; Conjunto de Templates padrões

Leia mais

MATA60 BANCO DE DADOS Aula 10- Indexação. Prof. Daniela Barreiro Claro

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

Leia mais

Variáveis primitivas e Controle de fluxo

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/

Leia mais

Linguagem Pascal. Prof. Sérgio Rodrigues. É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa;

Linguagem Pascal. Prof. Sérgio Rodrigues. É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa; Linguagem Pascal Prof. Sérgio Rodrigues Introdução Algoritmo É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa; Programa é a formalização de um algoritmo

Leia mais

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. 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

Leia mais

Curso de Técnicas de Desenvolvimento Utilizando o UIB

Curso de Técnicas de Desenvolvimento Utilizando o UIB Curso de Técnicas de Desenvolvimento Utilizando o UIB Objetivos definir padrões de desenvolvimento para programas de interface gatilhos de dicionário procedures internas widgets... diminuir tempo no desenvolvimento

Leia mais

AULA 2: INTRODUÇÃO A PYTHON. Luís Feliphe Silva Costa

AULA 2: INTRODUÇÃO A PYTHON. Luís Feliphe Silva Costa AULA 2: INTRODUÇÃO A PYTHON Luís Feliphe Silva Costa Sumário Variáveis simples Entrada e Saída de dados Operadores Estruturas Condicionais Estruturas de repetição Funções Tratamento de erros Variáveis

Leia mais

7 Comandos e Estruturas de Controle

7 Comandos e Estruturas de Controle Lógica para a Programação - 1º semestre AULA 03 Prof. André Moraes 7 Comandos e Estruturas de Controle Na criação de algoritmos é comum utilizar conceitos de bloco lógico, entrada e saída de dados, constantes,

Leia mais

Fundamentos de Sistemas Operacionais

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.

Leia mais

Python Listas e Strings. Listas 23/11/2016. Por que usar listas? Listas. Listas - Solução. Listas - Problema

Python Listas e Strings. Listas 23/11/2016. Por que usar listas? Listas. Listas - Solução. Listas - Problema Python Listas e Strings Prof. Paulo Henrique Ribeiro Gabriel (Com base no material do Prof. André Backes) Listas Por que usar listas? Listas As variáveis declaradas até agora são capazes de armazenar um

Leia mais

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 09a- Acessando os dados através JDBC

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

Leia mais

Linguagens de Programação Aula 11

Linguagens de Programação Aula 11 Linguagens de Programação Aula 11 Celso Olivete Júnior [email protected] Na aula passada Uma definição de subprograma descreve as ações representadas pelo subprograma Subprogramas podem ser funções

Leia mais

Capítulo 11 Sistemas de Arquivos

Capítulo 11 Sistemas de Arquivos Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo Sistemas de s Introdução O armazenamento e a recuperação de informações

Leia mais

Ambiente de desenvolvimento

Ambiente de desenvolvimento Linguagem C Ambiente de desenvolvimento Um programa em C passa por seis fases até a execução: 1) Edição 2) Pré-processamento 3) Compilação 4) Linking 5) Carregamento 6) Execução Etapa 1: Criação do programa

Leia mais

Métodos Computacionais

Métodos Computacionais Métodos Computacionais Objetivos da Disciplina e Introdução a Linguagem C Construções Básicas Objetivos da Disciplina Objetivo Geral Discutir técnicas de programação e estruturação de dados para o desenvolvimento

Leia mais

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

Classes o Objetos. Classes, objetos, métodos e variáveis de instância Classes o Objetos Um recurso comum de cada aplicativo feito até agora é que todas as instruções que realizavam tarefas localizavam-se no método main. Se você tornar parte de uma equipe de desenvolvimento

Leia mais

Memória. Memória Cache

Memória. Memória Cache Memória Memória Cache Revisão - Memória Principal Memória que armazena os dados e programas em linguagem de máquina em execução corrente Razoavelmente barata Tempo de acesso da ordem de nano-segundos a

Leia mais

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

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

Leia mais

Banco de Dados I Introdução SQL

Banco de Dados I Introdução SQL Banco de Dados I Introdução SQL Frederico Queiroga [email protected] https://sites.google.com/site/fredericoqueiroga/ Linguagem SQL Aspectos Gerais: Independência do fabricante: Está incorporada

Leia mais

Linguagem C Princípios Básicos (parte 1)

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

Leia mais

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language)

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language) AULA 8 8.1. OBJETIVO DA AULA Relembrar conceitos e recursos básicos apresentados nas aulas anteriores, dar continuidade nas codificações iniciadas e ainda não finalizadas, explorar acesso a banco de dados

Leia mais

Introdução. descrever os tipos de interfaces e linguagens oferecidas por um SGBD. mostrar o ambiente de programas dos SGBD s

Introdução. descrever os tipos de interfaces e linguagens oferecidas por um SGBD. mostrar o ambiente de programas dos SGBD s Introdução Contribuição do Capítulo 2: discutir modelos de dados definir conceitos de esquemas e instâncias descrever os tipos de interfaces e linguagens oferecidas por um SGBD mostrar o ambiente de programas

Leia mais

Acadêmica: Giselle Mafra Schlosser Orientador: Everaldo Artur Grahl

Acadêmica: Giselle Mafra Schlosser Orientador: Everaldo Artur Grahl AVALIAÇÃO DA QUALIDADE DO CÓDIGO FONTE ESCRITO EM PL/SQL Acadêmica: Giselle Mafra Schlosser Orientador: Everaldo Artur Grahl Roteiro Introdução Objetivos do trabalho Fundamentação teórica Desenvolvimento

Leia mais

Capítulo 5 Livro do Mário Monteiro Conceituação. Elementos de projeto de memória cache

Capítulo 5 Livro do Mário Monteiro Conceituação. Elementos de projeto de memória cache Capítulo 5 Livro do Mário Monteiro Conceituação Princípio da localidade Funcionamento da memória cache Elementos de projeto de memória cache Mapeamento de dados MP/cache Algoritmos de substituição de dados

Leia mais

A linguagem SQL

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

Leia mais

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: funções Prof. Renato Pimentel 1 Subprogramas Subprograma: programa que auxilia o programa principal na realização de uma determinada

Leia mais

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática Programação 1 Prof. Osório Aula 03 Pag.: 1 UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática PROGRAMAÇÃO I AULA 03 Disciplina: Linguagem

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Memória Cache Slide 1 Introdução Tamanho Função de Mapeamento Política de Escrita Tamanho da Linha Número de Memórias Cache Cache em Níveis Slide 2 Introdução

Leia mais

Programação: Vetores

Programação: Vetores Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia

Leia mais

Sincronização e Comunicação entre Processos

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.

Leia mais

Pascal. -Cabeçalho do programa. - label - const - type - var - procedure - function. - integer - real - byte - boolean - char - string

Pascal. -Cabeçalho do programa. - label - const - type - var - procedure - function. - integer - real - byte - boolean - char - string Pascal -Cabeçalho do programa Áreas do programa -Área de declarações -Corpo do programa - label - const - type - var - procedure - function - integer - real - byte - boolean - char - string Program

Leia mais

Construção de Aplicações de Acesso a Banco de Dados Parte II (Relação Mestre/Detalhe)

Construção de Aplicações de Acesso a Banco de Dados Parte II (Relação Mestre/Detalhe) 79 Universidade Federal de Santa Maria Anexo II Construção de Aplicações de Acesso a Banco de Dados Parte II (Relação Mestre/Detalhe) O objetivo deste material é demonstrar possíveis códigos (enxutos e

Leia mais

Tipos Abstratos de Dados. Estrutura de Dados

Tipos Abstratos de Dados. Estrutura de Dados Tipos Abstratos de Dados Tipo Abstrato de Dados ou TAD Idéia principal: desvincular o tipo de dado (valores e operações) de sua implementação: O que o tipo faz e não como ele faz! Vantagens da desvinculação:

Leia mais

Lógica de Programação I. Gilson de Souza Carvalho

Lógica de Programação I. Gilson de Souza Carvalho Gilson de Souza Carvalho [email protected] 1. Estruturas básicas Apresentaremos um resumo com os comandos estudados para criação de algoritmos. Para utilizar estes comandos, usaremos uma sintaxe

Leia mais

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini /

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini   / Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini E-mail: [email protected] / [email protected] MATÉRIA: INTERFACE HOMEM COMPUTADOR (IHC) Aula N

Leia mais

Programação Aplicada a Redes de Computadores. Faculdade IESGO 2º Sem 2016

Programação Aplicada a Redes de Computadores. Faculdade IESGO 2º Sem 2016 Programação Aplicada a Redes de Computadores Faculdade IESGO 2º Sem 2016 O shell é o "prompt" da linha de comando do Unix e Linux, é o servo que recebe os comandos digitados pelo usuário e os executa.

Leia mais

BD II (SI 587) Procedimentos Armazenados

BD II (SI 587) Procedimentos Armazenados BD II (SI 587) Procedimentos Armazenados Josenildo Silva [email protected] MOTIVAÇÃO Contexto: Sistemas em 2 camadas Contexto: Sistemas em 3 camadas Problema 1: Alto volume de dados na rede Como reduzir

Leia mais

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: ponteiros e alocação dinâmica Prof. Renato Pimentel 1 Ponteiros 2 Prof. Renato Pimentel 1 Ponteiros: introdução Toda a informação

Leia mais

Estrutura de Dados. Cadeia de Caracteres. Roberto Araujo Ago/2013

Estrutura de Dados. Cadeia de Caracteres. Roberto Araujo Ago/2013 Estrutura de Dados Cadeia de Caracteres Roberto Araujo Ago/2013 Estrutura de Dados O que é uma estrutura de dados? É um arranjo pré-definido de um ou mais pedaços de dados Ex: Ex: Os carateres 'u', 'v',

Leia mais

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR SQL Structured Query Language, ou Linguagem de Consulta Estruturada, foi desenvolvida pela IBM nos anos 70 para demonstrar a viabilidade do modelo relacional para bancos de dados. No final dos anos 80

Leia mais

Tecnólogo em Análise e Desenvolvimento de Sistemas. Sistemas Operacionais (SOP A2)

Tecnólogo em Análise e Desenvolvimento de Sistemas. Sistemas Operacionais (SOP A2) Tecnólogo em Análise e Desenvolvimento de Sistemas Sistemas Operacionais (SOP A2) Conceitos de Hardware e Software Referências: Arquitetura de Sistemas Operacionais. F. B. Machado, L. P. Maia. Editora

Leia mais

A resposta apresentada em aula, no quadro, (em Chapin e/ou Português Estruturado) está correta?

A resposta apresentada em aula, no quadro, (em Chapin e/ou Português Estruturado) está correta? 23 Algoritmos com Repetição Nos exemplos e exercícios vistos até agora, sempre foi possível resolver os problemas com uma sequência de instruções que eram executadas apenas uma vez. Existem três estruturas

Leia mais

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador; 1 Microprocessador Um microprocessador é um circuito eletrônico capaz de realizar diversas tarefas conforme os comandos específicos. Para isso ele deve ler esses comandos da memória de programa (ROM) e

Leia mais

Subprogramação. Vanessa Braganholo

Subprogramação. Vanessa Braganholo Subprogramação Vanessa Braganholo [email protected] O que vimos até agora } Programas usam apenas sequência, repetição e decisão } Capacidade de resolver diversos problemas, mas difícil de resolver problemas

Leia mais

DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO BACHARELADO EM INFORMÁTICA SISTEMAS OPERACIONAIS I 2 0 SEM/05 Teste 1 Unidade I DURAÇÃO: 50 MINUTOS

DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO BACHARELADO EM INFORMÁTICA SISTEMAS OPERACIONAIS I 2 0 SEM/05 Teste 1 Unidade I DURAÇÃO: 50 MINUTOS DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO BACHARELADO EM INFORMÁTICA SISTEMAS OPERACIONAIS I 2 0 SEM/05 Teste 1 Unidade I DURAÇÃO: 50 MINUTOS Aluno: Escore: Assinale a resposta que considerar mais correta.

Leia mais

Neste tópico, você conhecerá a ferramenta Solution Packager, usada por parceiros e fornecedores de soluções de software para criar soluções prontas

Neste tópico, você conhecerá a ferramenta Solution Packager, usada por parceiros e fornecedores de soluções de software para criar soluções prontas Neste tópico, você conhecerá a ferramenta Solution Packager, usada por parceiros e fornecedores de soluções de software para criar soluções prontas para distribuir a outros parceiros. 1 Neste tópico, você

Leia mais

1 Da aula teórica ao Java

1 Da aula teórica ao Java Universidade Federal do ABC Bacharelado em Ciência da Computação Processamento da Informação - Prof. Fabrício Olivetti de França Guia de tradução entre Java e outras linguagens 1 Da aula teórica ao Java

Leia mais

Introdução à Linguagem C Variáveis e Expressões

Introdução à Linguagem C Variáveis e Expressões INF1005: Programação 1 Introdução à Linguagem C Variáveis e Expressões 08/03/10 (c) Paula Rodrigues 1 Tópicos Principais Programando em C Funções Variáveis Define Operadores e Expressões Entrada e Saída

Leia mais

Métodos Computacionais. Comandos Condicionais e de Repetição em C

Métodos Computacionais. Comandos Condicionais e de Repetição em C Métodos Computacionais Comandos Condicionais e de Repetição em C Tópicos da Aula Hoje vamos acrescentar comportamentos mais complexos a programas em C Comandos Condicionais if-else switch Comandos de Repetição

Leia mais

Gerência do Sistema de Arquivos. Adão de Melo Neto

Gerência do Sistema de Arquivos. Adão de Melo Neto Gerência do Sistema de Arquivos Adão de Melo Neto 1 Gerência do Sistema de Arquivos Organização de arquivos Operações de E/S Estrutura de diretórios Gerência de espaço livre Gerência de alocação de espaços

Leia mais

COBOL DB2- CICS. Prof. Maromo [Aula 6]

COBOL DB2- CICS. Prof. Maromo [Aula 6] COBOL DB2- CICS Prof. Maromo [Aula 6] Parágrafos Procedure Name Parágrafos Podemos organizar os comandos (procedimentos) declarados na Procedure Division em grupos, que dão maior clareza à leitura do programa.

Leia mais

MCG126 Programação de Computadores II

MCG126 Programação de Computadores II MCG126 Programação de Computadores II Turmas: A e B Professor: Isac Mendes Lacerda (Material original cedido gentilmente pela professora Janaína Gomide) 1 Bibliografia 2 Bibliografia Introdução à Programação

Leia mais

Métodos de Ordenação Parte I

Métodos de Ordenação Parte I Estrutura de Dados II Métodos de Ordenação Parte I Prof a Márcio Bueno [email protected] / [email protected] Material baseado nos materiais da Prof a Ana Eliza e Prof. Robson Lins Rearranjar

Leia mais

Introdução à Ciência da Computação

Introdução à Ciência da Computação Introdução à Ciência da Computação Variáveis Conceitos Básicos Variáveis x Constantes a = x + 5 a, x e 5 são variáveis ou constantes? Variáveis As variáveis são recipientes de valores É um espaço reservado

Leia mais

Legibilidade do código fonte

Legibilidade do código fonte Sumário Legibilidade do código fonte Exemplos Normas Instrução switch Sintaxe e Semântica Exemplo Tipos enumerados Exemplo Programação 2007/2008 DEEC-IST 1 Legibilidade do código fonte Exemplo: Considere

Leia mais

Compiladores. Gerência de Memória

Compiladores. Gerência de Memória Compiladores Gerência de Memória Cristiano Lehrer, M.Sc. Atividades do Compilador Arquivo de origem Arquivo de destino Análise Otimização Geração de Código Intermediário Geração de Código Final Síntese

Leia mais

Linguagem C Controle do Fluxo de Execução. Lógica de Programação

Linguagem C Controle do Fluxo de Execução. Lógica de Programação Linguagem C Controle do Fluxo de Execução Lógica de Programação Caro(a) aluno(a), Aqui começaremos a escrever os nossos primeiros programas em uma Linguagem de Programação. Divirta-se!!! Estrutura Seqüencial

Leia mais

Fundamentos de Programação. Linguagem C++ aula II - Variáveis e constantes. Prof.: Bruno Gomes

Fundamentos de Programação. Linguagem C++ aula II - Variáveis e constantes. Prof.: Bruno Gomes Fundamentos de Programação Linguagem C++ aula II - Variáveis e constantes Prof.: Bruno Gomes 1 Variáveis Representa uma porção da memória que pode ser utilizada pelo programa para armazenar informações

Leia mais

MEMÓRIA CACHE FELIPE G. TORRES

MEMÓRIA CACHE FELIPE G. TORRES MEMÓRIA CACHE FELIPE G. TORRES MEMÓRIA CACHE O uso da memória cache visa obter velocidade de memória próxima das memórias mais rápidas que existem e, ao mesmo tempo, disponibilizar uma memória de grande

Leia mais

Aula 3 Primeiros programas

Aula 3 Primeiros programas Aula 3 Primeiros programas FACOM-UFMS 2012 OBJETIVOS DA AULA Introdução ao CodeBlocks; Criação dos primeiros programas; Esta aula foi baseada nos capítulos 3 e 4 da apostila de Programação de Computadores

Leia mais

Estrutura do Sistema Operacional

Estrutura do Sistema Operacional Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Aula 04 Estrutura do Sistema Operacional 2 1 Estrutura do Sistema Operacional

Leia mais

Especificação do Trabalho Prático

Especificação do Trabalho Prático Especificação do Trabalho Prático O trabalho prático da disciplina consiste em desenvolver um programa utilizando a linguagem de programação C. A seguir, encontram-se a descrição do problema, a forma de

Leia mais

OTIMIZAÇÃO DE CONSULTAS - MYSQL. Prof. Antonio Almeida de Barros Junior

OTIMIZAÇÃO DE CONSULTAS - MYSQL. Prof. Antonio Almeida de Barros Junior OTIMIZAÇÃO DE CONSULTAS - MYSQL Prof. Antonio Almeida de Barros Junior Para a otimização de um SGBD precisamos identificar as consultas lentas que eventualmente são submetidas ao banco: Configurações do

Leia mais

CAP. VI ANÁLISE SEMÂNTICA

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

Leia mais

EXEMPLO DE FLASHBACK VERSIONS QUERY E FLASHBACK TRANSACTION QUERY

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,

Leia mais

BDII SQL TRANSAÇÃO Revisão 2

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)

Leia mais

Capítulo 10 Estruturas de controle de fluxo. Introdução ao MATLAB p.1/21

Capítulo 10 Estruturas de controle de fluxo. Introdução ao MATLAB p.1/21 Capítulo 10 Estruturas de controle de fluxo Introdução ao MATLAB p.1/21 Controle de fluxo O MATLAB, como toda linguagem de programação, possui estruturas que permitem o controle do fluxo de execução de

Leia mais

Compiladores Ambiente de Execução

Compiladores Ambiente de Execução Compiladores Ambiente de Execução Fabio Mascarenhas 2015.2 http://www.dcc.ufrj.br/~fabiom/comp O Back-end Até agora vimos as fases do front-end do compilador: Análise Léxica Análise Sintática Análise Semântica

Leia mais

Aula de hoje. Comandos. Comandos simples. Comandos. Comandos de controle. Bloco de comandos. SCC Introdução à Programação para Engenharias

Aula de hoje. Comandos. Comandos simples. Comandos. Comandos de controle. Bloco de comandos. SCC Introdução à Programação para Engenharias SCC 124 - Introdução à Programação para Engenharias Comandos Professor: André C. P. L. F. de Carvalho, ICMC-USP Pos-doutorando: Isvani Frias-Blanco Monitor: Henrique Bonini de Britto Menezes 1 Aula de

Leia mais

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. 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

Leia mais

Adsim - Manual Sistema Pi Fácil. ADSIM - Sistemas Integrados de Mídia, Copyright Página 1 de 21

Adsim - Manual Sistema Pi Fácil. ADSIM - Sistemas Integrados de Mídia, Copyright Página 1 de 21 ADSIM - Sistemas Integrados de Mídia, Copyright 2010-2014 Página 1 de 21 Sumário 1. Apresentação... 3 1.1. Objetivo do Documento... 3 2. Detalhes explicativos de um pedido de inserção (PI) no sistema Pi

Leia mais

Este conceito é bastante simples e será útil e conveniente nos itens seguintes, na definição das estruturas básicas de controle de execução.

Este conceito é bastante simples e será útil e conveniente nos itens seguintes, na definição das estruturas básicas de controle de execução. Capítulo 7 Controle de Fluxo de Execução Até o momento os algoritmos estudados utilizam apenas instruções primitivas de atribuição, e de entrada e saída de dados. Qualquer conjunto de dados fornecido a

Leia mais

Oracle Database 10g: Fundamentos de SQL e PL/SQL

Oracle Database 10g: Fundamentos de SQL e PL/SQL Oracle University Contact Us: 0-800-167225 Oracle Database 10g: Fundamentos de SQL e PL/SQL Duration: 5 Dias O que é que gostaria de aprender Conheça os fundamentos de SQL e PL/SQL usando o SQL Developer

Leia mais

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática Programação 1 Prof. Osório Aula 05 Pag.: 1 UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática PROGRAMAÇÃO I AULA 05 Disciplina: Linguagem

Leia mais

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. 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

Leia mais

INF1007: Programação 2. 0 Revisão. 06/08/2015 (c) Dept. de Informática - PUC-Rio 1

INF1007: Programação 2. 0 Revisão. 06/08/2015 (c) Dept. de Informática - PUC-Rio 1 INF1007: Programação 2 0 Revisão 06/08/2015 (c) Dept. de Informática - PUC-Rio 1 Tópicos Principais Variáveis e Constantes Operadores e Expressões Entrada e Saída Tomada de Decisão Construção com laços

Leia mais

Um algoritmo deve conter passos não ambíguos, executáveis e que sejam terminados quando seguidos.

Um algoritmo deve conter passos não ambíguos, executáveis e que sejam terminados quando seguidos. Programação Um programa é uma sequência de instruções de uma linguagem de programação (VB no nosso caso). Cada instrução representa uma qualquer acção que nós pretendemos ver executada. Programar consiste

Leia mais

Programação. MEAer e LEE. Manipulação de ficheiros de texto. Bertinho Andrade da Costa. Instituto Superior Técnico. 2010/2011 1º Semestre

Programação. MEAer e LEE. Manipulação de ficheiros de texto. Bertinho Andrade da Costa. Instituto Superior Técnico. 2010/2011 1º Semestre Programação MEAer e LEE Bertinho Andrade da Costa 2010/2011 1º Semestre Instituto Superior Técnico Manipulação de ficheiros de texto Programação 2010/2011 IST-DEEC Manipulação de Ficheiros 1 Sumário Ficheiros

Leia mais