Você está na página 1de 3

1.

No-lock no for each


2. Me cansou so de olhar
3. Mais uma que fiquei cansado so de olhar
4. Responde as perguntas A e B com as opções abaixo:
A. Identificaria a melhor forma de usar índices com a compilação do programa e a
análise dos índices usados, o formato das pesquisas, os campos usados nas cláusulas
where e ordenação, se usasse temp-tables olharia o parâmetro -Bt (onde o ideal
seria usar um valor em torno de 20.000), faria essa técnica muitas vezes até obter
a melhor forma de usar índices nas pesquisas com muitos registros (pedido de venda,
nota fiscal, itens da nota fiscal, itens do pedido...)
B. Analisaria a melhor utilização dos campos através do Fields - já que todos os
campos estão trafegando se usarmos find ou for each sem fields e isso pode fazer o
banco de dados tralhar de forma excessiva e recursos como rede e memória serem
usados indevidamente - e confrontando as formas de lock usadas em cada pesquisa
(Find e For Each).
C. Analisaria se é possível trocar os finds usados por for firsts, caso esses finds
sejam somente consultas e não alterações.
D. Poderia também ativar o clientlog para verificar os programas e procedimentos
internos estão consumindo muito tempo de processamento e quais são os programas
envolvidos. Também verificaria o valor do parâmetro -Mm usado já que muitas
empresas usam valores da década de 1990. Também analisaria uso incorreto de funções
nas consultas, o que podem fazer que todos os registros dos bancos sejam enviados
do banco para a AVM para filtrar usando função que só existe na AVM.
E. Poderia também fazer o uso do Profiler, ferramenta não documentada da Progress.
F. Poderia também usar o utilitário Protrace durante a execução para analisar os
procedimentos em memória e se estes não estão presos e quais programas estamos
analisando no total.
G. Poderia também fazer o uso da função etime para verificar o tempo gasto com cada
instrução de pesquisa, mas usando o -B como 100, no mínimo possível para que o
Buffer Hits alto não atrapalhasse a análise.
H. Conversaria com o DBA para verificar se estão usando o parâmetro -B2 e quais
tabelas estão nessa área de memória, também verificaria o valor do -spin, do
consumo de disco, usaria o Top para ver o uso da memória e CPU, analisaria a
arquitetura do banco, de seus arquivos e da mídia usada para armazenamento (Discos,
Storage, SSD ou SSD com NVME) e extrairia um tabanalys da estrutura do banco para
verificar se há áreas que precisam de adição de arquivos por não terem mais blocos
disponíveis para gravação, também poderia verificar o tamanho do Before-image e de
quanto em quanto tempo esse é truncado. Faria a verificação se as tabelas do
aplicativo (ERP) estão em áreas do tipo 2 e se estiverem no Schema Area, sugeriria
a mudança dessas para novas áreas devidamente dimensionadas e analisadas.

/ acreditando que é minha tabela e esta obrigatoriamente teria um indice por nome -
name /

for each salesperson


fields( salesperson.id
salesperson.name
salesperson.age
salesperson.salary)
no-lock
use-index idx-name:

display
salesperson.id
salesperson.name
salesperson.age
salesperson.salary.

end.
/ consultando o Customer /

DEFINE VARIABLE cIndustryType AS CHARACTER no-undo initial "J,B".


DEFINE VARIABLE cCurrentInd AS CHARACTER NO-UNDO.
DEFINE VARIABLE icont AS INTEGER NO-UNDO.

do icont = 1 to num-entries(cIndustryType):

cCurrentInd = entry( icont, cIndustryType).

for each customer


fields( customer.id
customer.name
customer.city
customer.indtype)
no-lock
where customer.indtype = cCurrentInd:

display
customer.id
customer.name
customer.city
customer.indtype.

end.

end.

/ consultando Orders /

for each orders


fields( orders.id
orders.orderdate
orders.customerid
orders.salespersonid
orders.amount)
no-lock
use-index idx-orderid:

display
orders.id
orders.orderdate
orders.customerid
orders.salespersonid
orders.amount.

end.

/ retornar todo os vendedores que nao possuem pedido /

for each salesperson


fields( salesperson.id
salesperson.name)
no-lock:

if can-find(first order of salesperson) then


next.

display
salesperson.id
salesperson.name.

end.

/ retornar o valor total de vendas de cada vendedor /

for each salesperson


fields( salesperson.id
salesperson.name)
no-lock:

if can-find(first order of salesperson) then


next.

display
salesperson.id
salesperson.name.

for each order


no-lock
of salesperson:

accumulate orders.amount (total).


end.

display
accum total orders.amount label 'Orders amount' format '>>>,>>>,>>9.99'.

end.

A questão 6 eu deixo para voce fazer, cansei :D

Você também pode gostar