Vous êtes sur la page 1sur 98

Performance Tuning

Copyright © 2010 Accenture All Rights Reserved.


Agenda

Copyright © 2010 Accenture All Rights Reserved.


Agenda

Acesso ao Banco de Dados

Lógica e Manipulação de Dados

Transações para Monitoramento

Copyright © 2010 Accenture All Rights Reserved.


Solicitações do Usuário

Camada de Apresentação

SAP GUI SAP GUI

Copyright © 2010 Accenture All Rights Reserved.


Solicitações do Usuário

Camada de Apresentação

Camada de Aplicação
Dispatcher
WP WP WP
DIALOG BATCH DIALOG

Copyright © 2010 Accenture All Rights Reserved.


Solicitações do Usuário

Camada de Apresentação

Camada de Aplicação
Dispatcher
Buffer
de WP WP WP
Tabela
DIALOG BATCH DIALOG

Buffer

Banco de Dados
Copyright © 2010 Accenture All Rights Reserved.
Tempo de Resposta

Camada de Apresentação

Camada de Aplicação
Dispatcher
120
MB Buffer
de 0.1 WP WP WP
Tabela ms DIALOG BATCH DIALOG

1ms
Buffer
500 10
MB ms

Banco de Dados
Copyright © 2010 Accenture All Rights Reserved.
Agenda

Arquitetura SAP

Lógica e Manipulação de Dados

Transações para Monitoramento

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Como é feito o acesso ao banco de dados?


• O R/3 recebe uma instrução de acesso ao Banco de
Dados proveniente de um programa ABAP, convertendo-a
em seguida para a instrução equivalente que possa ser
interpretada pelo Sistema Gerenciador de Banco de
Dados.

• Essas instruções podem ser analisadas através do


utilitário SQL TRACE (transação ST05).

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

• Para cada instrução SQL, o otimizador do banco de dados


determina a estratégia de acesso aos dados. Este acesso
pode ser realizado através da utilização de índices (index
access) ou não (full table scan).

• Tal estratégia de acesso pode ser determinada com


base em:
• Condições especificadas na clausula WHERE da instrução SQL;
• Índices das tabelas que participam da Querie de acesso;
• Seletividade dos campos que compõem os índices das tabelas;
• Tamanho de cada tabela que participa da instrução SQL.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

• Após ativar uma tabela, um índice é criado (Oracle, SQL,


Informix, etc) contendo todos os campos chave. Este índice
é único e denominado Chave Primária.

• Podem também ser definidos outros índices, chamados de


índices secundários.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados
• O modelo abaixo exemplifica o modo como as informações estão
estruturadas fisicamente no banco e como são indexadas.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

• É aconselhável que os índices não contenham muitos


campos, já que se contiverem número restrito de campos
seletivos, aumentam a capacidade de reutilização e
reduzem chance do otimizador do banco de dados optar por
caminho de acesso não adequado.

• A seguir veremos alguns exemplos de estratégias de acesso


que o otimizador do banco de dados “escolhe” afim ter
acesso aos dados.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

• Index Unique Scan


• O índice escolhido é único. (Chave Primária ou Índice Secundário Único) e
completamente especificado. Apenas um ou nenhum registro da tabela é
retornado. Este tipo de acesso é muito eficiente, já que no máximo 4 blocos de
dados são necessário para acesso à tabela.

• Index Range Scan


• O índice selecionado pode ou não ser único. Neste caso uma faixa índice é
selecionada e os registros da tabela referentes a esta faixa avaliados. Não
necessariamente a estratégia de INDEX RANGE SCAN é mais eficiente que a FULL
TABLE SCAN, já que o número de registros que é retornado pela consulta define
qual técnica é mais eficiente. O número de registros retornados pode variar de 0
(zero) a todos os registros da tabela.

• Full Table Scan


• A tabela inteira é lida seqüencialmente. Cada bloco da tabela é lido somente uma
vez. Nenhum índice é utilizado.

Veja a seguir o exemplo do acesso ao banco.

Copyright © 20010Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Nenhum índice é usado durante o


“FULL TABLE SCAN”.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados
Outras estratégias de acesso ao BD são:

• Concatenation
• Um índice é utilizado mais de uma vez. Várias áreas do índice são lidas e checadas.
Para assegurar que a aplicação não irá receber registros duplicados, os resultados
são concatenados para eliminar duplicidades. O nº de registros retornados pode
variar de 0 (zero) a todos os registros da tabela.

• Nested Loop
• Mais de uma tabela é acessada (por exemplo, views).

• Sort Merge Join


• Os registros que correspondem a clausula WHERE de cada tabela especificada no
Join são selecionados.
• As tabelas resultantes que participam do JOIN são ordenadas de acordo com a
condição de JOIN.
• Os registros das tabelas mesclados.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Nested Loop
Uma view é um objeto lógico, porém
Views/Joins seus registros não são gravados
fisicamente no Banco de Dados.

Os dados são lidos da própria tabela


durante sua execução, otimizando a
performance no acesso aos dados e
reduzindo o número de registros lidos.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Sort Merge Join

Exemplo de Consulta No exemplo ao lado temos nas duas tabelas


condições que utilizam campos seletivos.
SELECT
VBAK~VBELN Inicialmente registros da tabela VBAK são

avaliados utilizando-se o atributo OBJNR
INTO …
FROM com pesquisa. Em seguida registros da
VBAK
INNER JOIN VBAP ON tabela VBAP também são avaliados segundo
VBAP~VBELN = VBAK~VBELN critério definido para esta tabela na clausula
WHERE
VBAK~OBJNR = ‘0000777’ AND WHERE. Os resultados de cada acesso são
VBAP~CUOBJ = ‘12345’
ordenados pelo atributo VBELN e mesclados
logo após.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Regras para criação de índices:


• Use apenas campos seletivos.
• Use o menor número de campos possível.

• Use os campos mais seletivos no início.


• Crie o menor número de índices possível por tabela.
• Não altere índices Standards criados pela SAP.

• Sempre insira o campo MANDT.

Para análise da seletividade do índice, podemos utilizar a


transação DB05 a seguir.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Neste exemplo temos 212


diferentes combinações
para todos os campos.
Compare esse número com
o total de number of rows.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Se o número de valores
distintos para os campos não
aumentarem com o passar do
tempo é sinal que esses
campos não são seletivos.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Nesse exemplo, 128


combinações de todos os
campos deverão retornar de 1
a 10 registros.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados
• Utilizando a DB20, também podemos validar se a tabela está “"bufferizada"” e se o
tamanho da tabela é adequado para esta estratégia.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Armazenamento de Tabelas em Buffer


• A estratégia de “bufferização” auxilia no tempo de resposta dos acessos
ao Banco de Dados. Como foi demonstrado na definição de camadas do
SAP, o tempo para acessar um registro no Buffer de Tabela é de 0.1 ms
por registro, e para buscar no Banco de Dados, é de 10 ms por registro.

• Quando armazenas em Buffer?


• Tabelas pequenas (em torno de 1MB);
• Tabelas acessadas muito mais para leitura do que para escrita, porque
podemos ter problemas de sincronização (O tempo de sincronização é
controlado por parâmetros definidos pela equipe de Basis);
• Tabelas de controle (parametrização);
• Tabelas Mestre Pequenas.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

• Tipos de Buferização
• Completo: no primeiro acesso à tabela, todo o seu conteúdo é
armazenado no buffer;

• Genérico: é especificado um número ‘n’ de campos chaves


desejados e assim que um acesso é efetuado, todos os
registros que contém chave igual aos ‘n’ campos chaves do
acesso são armazenados no buffer;

• Parcial: Somente os registros lidos são armazenados no buffer.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados
No exemplo abaixo, o tipo de “bufferização” é Genérico de campo chave.
Como o primeiro campo chave é o mandante, no primeiro acesso a tabela
T001, todos os registros do mandante atual serão enviados para o buffer
de tabela.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

• Como armazenar uma tabela em Buffer?


• Dictionary maintenance (SE11 -> technical settings) ou,
• Technical settings for a table (transaction SE13).

• Quando o Buffer é ignorado?


• Select ... bypassing buffer;
• Select ... from <database views>;
• Select ... distinct;
• Select ... count, sum, avg, min, max;
• Select ... order by (campos que não são chaves);
• Cláusula where que contém o comando IS NULL;
• SQL nativo (EXEC SQL ... ENDEXEC).
• Cláusula WHERE por campos por índice secundário

• Verificando se o tipo de “bufferização” está correto


• Transação ST02 -> Details Analysis Menu -> Call Statistics (tables)

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados
Análise de Estatística (Transação DB20)

Podemos verificar se a estatística da tabela


está atualizada através da transação DB20,
ou então pelo SQL Trace (Transação ST05),
como mostra o exemplo.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Os problemas de performance podem ser separados em


duas partes:

• Acesso ao Banco de Dados

• Lógica e Manipulação de Dados

Copyright © 2010Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Quando trata-se de um problema de acesso ao BD,


podemos ter como conseqüência:

O Banco de Dados torna-se ocupado


lendo muitos blocos de dados.

Elevado consumo de CPU no servidor de


Banco de Dados.
Work Process são bloqueados pelo
report.
Gerando um tempo de espera para
novos processos.
Muitos blocos são deslocados para o
buffer do Banco de Dados.

Comandos SQL não otimizados


reduzem a performance de
todo o sistema R/3.

Copyright © 2010Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Os vilões de performance no acesso ao Banco


de Dados são:
1. Select …. Endselect ao invés de comandos que recuperem
do banco de dados todos os registros de uma única vez.

2. Select * ao invés de select somente com as colunas


necessárias ao processamento.

3. Selects dentro de Loop.

4. Selects genéricos, onde a cláusula where não foi fortemente


especificada visando restringir a seleção.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

5. Não utilização de chave ou índices.

6. Select em tabelas com alto número de registros e que utiliza


a cláusula where baseada na tela de seleção onde o
preenchimento não é obrigatório.

7. Falha na definição funcional.

8. Acesso não otimizado às grandes tabelas do sistema: BKPF,


BSEG, EKKO, EKPO, VBAK, VBAB, MKPF, MSEG,
J_1BNFDOC, J_1BNFLIN.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Seguem algumas sugestões para otimização dos


acessos ao BD:
Uso eficiente do índice na condição WHERE
PERFORMANCE RUIM PERFORMANCE MELHOR
SELECT bukrs belnr gjahr SELECT bukrs belnr gjahr
FROM bkpf FROM bkpf
INTO TABLE t_bkpf INTO TABLE t_bkpf
WHERE belnr = ‘0000000100’. WHERE bukrs = ‘0001’
AND belnr = ‘0000000100’.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Restrição de colunas
EVITE USAR SELECT * EVITE USAR INTO
CORRESPONDING FIELDS OF
TABLE
SELECT * FROM vbak SELECT ...
INTO TABLE t_vbak FROM resb
WHERE vbeln IN s_vbeln INTO TABLE t_resb
WHERE matnr in s_matnr
AND Kzear IS INITIAL.

UTILIZE INTO TABLE


SELECT vbeln erdat kunnr
FROM VBAK
INTO TABLE t_vbak
WHERE vbeln BETWEEN v_low
AND v_high.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Restrição de registros
PERFORMANCE RUIM PERFORMANCE MELHOR
SELECT ... SELECT ...
FROM resb FROM resb
INTO TABLE t_resb INTO TABLE t_resb
WHERE matnr in s_matnr. WHERE matnr in s_matnr
AND Kzear IS INITIAL.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Operadores Críticos (NOT e <> )


PERFORMANCE RUIM PERFORMANCE MELHOR
SELECT vbeln erdat kunnr SELECT vbeln erdat kunnr
FROM vbak FROM vbak
INTO TABLE t_vbak INTO TABLE t_vbak
WHERE kunnr IN s_kunnr WHERE kunnr IN s_kunnr
AND NOT auart IN (‘TA’,’KL,’SO’). AND auart IN
(‘BV’,’WV,’ZWK1’,’WK1’,’MV’,’01’,’SM’)

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Operadores Críticos (BETWEEN, LIKE, > e <)


PERFORMANCE RUIM PERFORMANCE MELHOR
SELECT * FROM vbap SELECT * FROM vbap
INTO TABLE t_vbap INTO TABLE t_vbap
WHERE VBELN BETWEEN ‘0000005001’ WHERE VBELN IN (‘0000005001’,
and ‘0000005005’. ‘0000005002’, ‘0000005003’,
‘0000005004’, ‘0000005005’)

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Operador Crítico (OR)


PERFORMANCE RUIM PERFORMANCE MELHOR
SELECT vbeln erdat kunnr SELECT vbeln erdat kunnr
FROM vbak FROM vbak
INTO TABLE t_vbak INTO TABLE t_vbak
WHERE vbeln LIKE ‘000000511%’ WHERE vbeln LIKE ‘000000511%’
OR vbeln LIKE ‘000000512%’ OR vbeln LIKE ‘000000512%’
OR vbeln LIKE ‘000000513%’ OR vbeln LIKE ‘000000513%’
OR vbeln LIKE ‘000000514%’ OR vbeln LIKE ‘000000514%’.
OR vbeln LIKE ‘000000515%’
OR vbeln LIKE ‘000000516%’ SELECT vbeln erdat kunnr
OR vbeln LIKE ‘000000517%’ FROM vbak
OR vbeln LIKE ‘000000518%’. APPENDING TABLE t_vbak
WHERE vbeln LIKE ‘000000515%’
OR vbeln LIKE ‘000000516%’
FULL TABLE SCAN OR vbeln LIKE ‘000000517%’
OR vbeln LIKE ‘000000518%’.

INDEX RANGE SCAN

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Exercício:
Melhorar a performance do relatório de ordens de
venda.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

SORT no Banco de Dados ou em programas ABAP ?


PERFORMANCE RUIM PERFORMANCE MELHOR

SELECT mandt vbeln erdat kunnr SELECT mandt vbeln erdat kunnr
FROM vbak FROM vbak
INTO TABLE t_vbak INTO TABLE t_vbak
WHERE vbeln IN s_vbeln WHERE vbeln IN s_vbeln
ORDER BY erdat. ORDER BY PRIMARY KEY.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Update...Set
PERFORMANCE RUIM PERFORMANCE MELHOR

SELECT * UPDATE vbap


FROM vbap SET zmeng = zmeng + 5
INTO TABLE t_vbap WHERE vbeln IN s_vbeln.
WHERE vbeln IN s_vbeln.

LOOP AT t_vbap.
t_vbap-zmeng = t_vbap-zmeng + 5.
UPDATE vbap FROM t_vbap.
ENDLOOP.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Cursor Cashing
PERFORMANCE RUIM PERFORMANCE MELHOR

Select vbeln auart Select vbeln auart


into (vbak-vbeln, vbak-auart) into (vbak-vbeln, vbak-auart)
from vbak from vbak
where vbeln = xxx where vbeln = xxx
and auart = yyy. and auart = yyy.
Select vbeln auart Select vbeln auart I
into (vbak-vbeln, vbak-auart) nto (vbak-vbeln, vbak-auart)
from vbak from vbak
where auart = yyy where vbeln = xxx
and vbeln = xxx. and auart = yyy.

Cada um dos comandos realiza Apenas o primeiro comando realiza


Declare e Prepare Declare e Prepare

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Seguem mais algumas sugestões de acesso ao BD:

• SELECT... ENDSELECT

Ao selecionar dados nunca utilize SELECT ... ENDSELECT sem a cláusula UP


TO <N> ROWS ou PACKAGE SIZE.

• SELECT COUNT (*)


Se for apenas para validar se o registro existe, usar adicionalmente a
condição UP to 1 ROWS ou SINGLE.

• ORDEM DE SELEÇÃO
Selecionar os campos na mesma ordem que se encontram declarados no
banco de dados.

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados
• SELECT... FOR ALL ENTRIES
Sempre verificar se a tabela interna utilizada no FOR ALL
ENTRIES não está vazia, pois caso essa tabela não contenha
nenhum registro as cláusulas WHERE relacionada á tabela interna
indicada no FOR ALL ENTRIES é ignorada, e é realizado um
acesso Full Table Scan.

Registros duplicados na tabela interna de referência devem ser


eliminados, caso contrário acessos idênticos e desnecessários
serão realizados no banco de dados.

Sempre trazer para a sua tabela interna a chave completa da


tabela que está sendo selecionada, porque o FOR ALL ENTRIES
realiza um DISTINCT ou seja, ele elimina registro idênticos da
tabela interna de saída.
Copyright © 2010 Accenture All Rights Reserved.
Acesso ao Banco de
Dados
SUB-QUERY
Quando realizamos um acesso com INNER JOIN e a segunda tabela é
utilizada apenas para restringir os registros, podemos utilizar a
claúsula AND EXISTS que realiza uma validação no BD mais rápida.
Não deve ser utilizado com o comando FOR ALL ENTRIES.

PERFORMANCE RUIM PERFORMANCE MELHOR

select vbeln
select vbap~vbeln matnr
matnr zmeng
zmeng
meins meins
kwmeng kwmeng
werks werks
from vbap from vbap
INNER JOIN vbak into TABLE t_ordens
on vbak~vbeln = vbap~vbeln where matnr in s_matnr
into TABLE t_ordens
where matnr in s_matnr and EXISTS ( SELECT * from vbak
and auart in s_auart. where vbeln = vbap~vbeln
and auart in s_auart )

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Exercício:

Criar um programa com 3 formas diferentes de


selecionar os itens das ordens de venda a partir
do tipo (VBAK-AUART) e código do material
(VBAP-MATNR) e faça uma medição de tempo
utilizando o comando GET TIME.
Exemplo:
1. Sub-querie
2. Select... Endselect
3. FOR ALL ENTRIES

Copyright © 2010 Accenture All Rights Reserved.


Acesso ao Banco de
Dados

Tipos de Tabela no Dicionário de Dados


• Existem 3 tipos diferentes de tabela no Dicionário de dados e cada uma
delas requer atenção na forma de acesso:

• Tabelas Transparentes
• Sua estrutura é a mesma, tanto no Banco de Dados quanto no
Dicionário de dados ABAP. É o tipo de tabela que normalmente
criamos e selecionamos.
• Tabelas Cluster
• Agrupa dados de diversas tabelas que contém dados funcionalmente
dependentes. Seu objetivo é manter os dados comprimidos no banco
de dados para melhor utilização da memória.
• Este tipo de tabela não pode ser utilizado em INNER JOIN, Seleções
nativas e não permite índice secundário.
• Sua seleção deve ser obrigatoriamente pela chave PRIMÁRIA. Ex:
BSEG e CDPOS.
Copyright © 2010 Accenture All Rights Reserved.
Acesso ao Banco de
Dados

• Tabelas Pooled
• Pequenas tabelas relacionadas a mesma área de negócios são
agrupadas em uma única tabela.
• Como exemplo, tempos as tabelas de preços que contém chaves
diferentes são agrupados em uma tabela pooled e as chaves são
agrupadas em um único campo chamado VARKEY. Tabela: A005 /
KAPOL.

Copyright © 2010 Accenture All Rights Reserved.


Agenda

Arquitetura SAP

Acesso ao Banco de Dados

Transações para Monitoramento

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados

Problemas de performance também podem ser ocasionados por


uma programação ineficiente para manipular os dados
selecionados.

A seguir veremos algumas dicas sobre os comandos e lógicas


mais eficientes para performance e uso efetivo da memória.

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados
Tabelas Internas

Saber fazer uso correto dos diferentes tipos de tabela interna


pode também otimizar a performance do programa.
No SAP trabalhamos com três diferentes tipos de tabelas
internas:

 STANDARD TABLE

 SORTED TABLE

 HASHED TABLE

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados
Na figura abaixo podemos ver a estrutura de uma tabela interna
e as características gerais e individuais de cada tipo:

 Tipo de Linha: Estrutura dos campos (Nome, tamanho e tipo)


 Seqüência de Chave: Critério pelo qual o sistema identifica as
linhas da tabela
 Unicidade: Atributo que determina se podemos ter campos
registros duplicados (NON-UNIQUE) ou se a chave será única (UNIQUE)
 Tipo de Tabela: Determina a maneira que os dados ficarão
armazenados e como eles poderão ser acessados

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados

 STANDARD TABLE: Permite acessar os dados por qualquer campo da tabela, a chave não precisa ser
previamente definida e os registros são armazenados na mesma seqüência que são inseridos.

 SORTED TABLE: A chave deve ser previamente definida e os campos serão ordenados a cada inserção
sempre em ordem ascendente

 HASHED TABLE: A chave da tabela é sempre único e o tempo de resposta para leitura é o mais rápido
porque utiliza o algoritmo HASH para ordenação dos registros

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados

Dicas:
Somente copiar os campos que realmente serão utilizados,
tanto em operações de leitura como alteração:

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados

Exercício:
Criar um relatório cuja tela de seleção contenha:
CLASSE DO OBJETO (CDHDR-OBJECTCLASS) – RANGE OBRIGATÓRIO
DATA DA ATUALIZAÇÃO (CDHDR-UDATE) – RANGE OPCIONAL

Na saída, teremos as seguintes colunas:


Nome da tabela (CDPOS-TABNAME), Descrição da tabela (DD02T-DDTEXT), Nome do
campo (CDPOS-FNAME), Descrição do campo (DD03T-DDTEXT ou DD04T-DDTEXT), Valor
antigo (CDPOS-VALUE_OLD) e Valor novo (CDPOS-VALUE_NEW).

OBS: Se a descrição do campo não existir na tabela de textos DD03T. Precisamos


buscar o nome do elemento de dados na tabela DD03L e, na seqüência, buscar o
texto para o elemento de dados na DD04T.
Utilizar tabela interna do TIPO SORTED.

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados

Utilizar FIELD-SYMBOL para fazer referência direta à posição de


memória ao invés de copiar os valores:

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados

• Comando SORT

Não utilizar comando SORT dentro de LOOP, caso seja necessário


manter a tabela sempre ordenada verificar a oportunidade de criá-
la como SORTED TABLE.

• Utilização de Paralelismo em Processos Críticos

Alguns processos críticos mesmo otimizados costumam não


atender a demanda necessária, para esses casos é aconselhável
que sua execução seja feita em paralela, reduzindo assim o tempo
total do processamento.

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados

• Valores Globais em Extensões do Standard


(User-Exits, Fórmulas...):
Antes de codificar um SELECT em uma extensão do standard,
verificar se o valor desejado já se encontra na memória (parâmetro
passado pelo módulo de função da user-exit, da BADI ou em
alguma variável global). Por exemplo, nas users-exits de SD
muitos dos valores já estão em variáveis e tabelas internas globais
como XVBAP, XVBAK, etc.

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados

• Lógica de “Buferização”.

Muitas fórmulas ou user-exits são chamadas muitas vezes durante


a execução de uma transação ou de um Job. Para evitar que as
seleções executadas nestas user-exits se repitam "n" vezes
acessando a mesma chave, é recomendado que se utilize o
seguinte método:

Se for tabela standard verifique se existe uma função como


KNA1_SINGLE_READ.

Se não há função standard, é recomendado criar uma nova função


nos mesmos moldes das standard.

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados
Podemos fazer melhorias de performance na lógica de
codificação que resultam em ganhos significativos de
performance, como por exemplo:

• Utilizar Pesquisa Binária (READ e LOOP)


• Utilizar os tipos corretos de variáveis para cada
operação

• Utilizar FIELD-SYMBOLS especificando o tipo

• Substituir seqüência de IF por CASE

• Substituir DO por WHILE

Veja algumas outras sugestões de programação a seguir.

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados
Exercício:

Criar um relatório de vendas de materiais. A tela de seleção terá


como filtro o campo Material (Select-Options) e na saída, deverá
exibir o tipo de documento de vendas (VBAK-AUART),
documento de vendas (VBAK-VBELN), item (VBAP-POSNR),
material (VBAP-MATNR), descrição do material (MAKT-MAKTX) e
quantidades (VBAP-ZMENG e KWMENG).

Utilize FOR ALL ENTRIES, LOOP BINÁRIO e para buscar a


descrição, utilize a função MAKT_SINGLE_READ .

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados

Pesquisa Seqüencial X Pesquisa Binária

Performance Ruim Performance Melhor

•A tabela TAB contém 1000 registros •A tabela TAB contém 1000 registros
com 100 bytes em cada. com 100 bytes em cada.
•O retorno do SY-SUBRC é = 4. •O retorno do SY-SUBRC é = 4.
READ TABLE TAB WITH KEY K = 'X'. READ TABLE TAB WITH KEY K = 'X'
BINARY SEARCH.

Microsec.: 10.604 Microsec.: 206

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados

Cálculos
Não usar campos do tipo numéricos para execução de cálculos.

Performance Ruim Performance Melhor

Type N Type P

DATA: DATA:
N1(15) TYPE N VALUE P1 TYPE P VALUE
'123456789012345', '123456789012345',
N2(15) TYPE N VALUE P2 TYPE P VALUE
'543210987654321', '543210987654321',
N3(15) TYPE N. P3 TYPE P.

N3 = N1 + N2. P3 = P1 + P2.

Microsec.: 82 Microsec.: 62

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados

Copiando Tabelas Internas

Performance Ruim Performance Melhor

•A tabela TAB contém 100 registros •A tabela TAB contém 100 registros
com 100 bytes em cada. com 100 bytes em cada.
REFRESH TAB_DEST. •TAB_DEST[] = TAB_SRC[].
LOOP AT TAB_SRC INTO TAB_DEST.
APPEND TAB_DEST.
ENDLOOP.

Microsec.: 8.554 Microsec.: 2.446

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados

Loops Encadeados

Performance Ruim Performance Melhor

•Tabela TAB1 contém 100 registros, cada um •Tabela TAB1 contém 100 registros, cada um
com 100 bytes cada. com 100 bytes cada.
•Tabela TAB2 contém 10 * 100 = 1000 Tabela TAB2 contém 10 * 100 = 1000
registros cada um com 100 bytes cada. registros cada um com 100 bytes cada.
LOOP AT TAB1. I2 = 1.
LOOP AT TAB2 WHERE K = TAB1-K. LOOP AT TAB1.
" ... LOOP AT TAB2 FROM I2.
ENDLOOP. IF TAB2-K <> TAB1-K.
ENDLOOP. I2 = SY-TABIX.
EXIT.
ENDIF.
" ...
ENDLOOP.
ENDLOOP.
Microsec.: 3.026.439 Microsec.: 76.059

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados

Field-Symbol
Sempre especificar um Tipo para definir um FIELD-SYMBOL.

Performance Ruim Performance Melhor

FIELD-SYMBOLS: <F>. FIELD-SYMBOLS: <I> TYPE I.

ASSIGN I1 TO <F>. ASSIGN I1 TO <I>.

I2 = <F>. I2 = <I>.
I3 = <F>. I3 = <I>.

Microsec.: 109 Microsec.: 57

Copyright © 2010 Accenture All Rights Reserved.


Lógica e Manipulação de
Dados

If X Case

Performance Ruim Performance Melhor

IF CASE
IF C1A = 'A'. WRITE '1'. CASE C1A.
ELSEIF C1A = 'B'. WRITE '2'. WHEN 'A'. WRITE '1'.
ELSEIF C1A = 'C'. WRITE '3'. WHEN 'B'. WRITE '2'.
ELSEIF C1A = 'D'. WRITE '4'. WHEN 'C'. WRITE '3'.
ELSEIF C1A = 'E'. WRITE '5'. WHEN 'D'. WRITE '4'.
ELSEIF C1A = 'F'. WRITE '6'. WHEN 'E'. WRITE '5'.
ELSEIF C1A = 'G'. WRITE '7'. WHEN 'F'. WRITE '6'.
ELSEIF C1A = 'H'. WRITE '8'. WHEN 'G'. WRITE '7'.
ENDIF. WHEN 'H'. WRITE '8'.
ENDCASE.
Microsec.: 88 Microsec.: 66

Copyright © 2010 Accenture All Rights Reserved.


Agenda

Arquitetura SAP

Acesso ao Banco de Dados

Lógica e Manipulação de Dados

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
• SM50 – Work Process Overview
Durante a execução de uma transação (ou programa), podemos analisar
quais tabelas estão sendo acessadas, se o acesso é seqüencial ou direto, e
até se é uma transação que está sobrecarregando o servidor.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
• SM51 – Mudar de Servidor
Através dessa transação é possível selecionar qual servidor será analisado,
após a seleção a transação SM50 é executada.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
• SM66 – SystemWide Work Process Overview
Possui as mesmas características e utilidades da transação SM50, porém
exibe informações de todos servidores enquanto a SM50 exibe apenas de
um único servidor.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
• DB02 – Database Performance – Tabelas e Índices
Nesta transação é possível verificar entre outras coisas o tamanho físico das
tabelas, de seus índices e também seu histórico de crescimento.

Selecione a opção
Insira o nome da “Detailed
tabela que deseja analysis”para
pesquisar. verificar o tamanho
físico da tabela.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 DB02 – Database Perfomance – Tabelas e Índices

Selecionando essa opção Nessa Coluna podemos


podemos verificar também o visualizar o tamanho
tamanho dos seus índices. físico somente da tabela.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 DB02 – Database Perfomance – Tabelas e Índices

Aqui verificamos o
tamanho da tabela e
de seus índices.

Através dessa opção é


possível analisar seu
histórico de crescimento.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 DB02 – Database Perfomance – Tabelas e Índices

Aqui verificamos seu


histórico de crescimento.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 ST10 – Table Call Statistics
Através dessa transação podemos visualizar a quantida de Inserts, Updates
, Delete e Selects de uma determinada tabela. Podemos verificar também as
tabelas bufferizadas e sua qualidade.

Selecionamos o tipo de tabela


que será pesquisada.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 ST10 – Table Call Statistics

Verificamos aqui os
acessos e
atualizações feitos a
cada tabela.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 ST04 – Database Perfomance Analysis
 Nesta transação é possível analisar a performance do banco de dados por
completo. Verificar o ranking dos produtos com maior índice de buffer gets,
acesso a disco, etc. Verificar sempre comandos onde o número de buffer
gets é superior a 5% do total do número de reads e comandos onde o
número de disk read é superior a 2% do número total de physical reads..

Selecione a opção de
análise de performance.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 ST04 – Database Perfomance Analysis

Selecione essa opção


para verificar as
sessões em execução
no banco de dados.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 ST04 – Database Perfomance Analysis

Através do PID encontrado


na transação SM50,
podemos verificar os detalhes
do acesso ao banco de
dados. Efetuar duplo clique
na linha desejada.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 ST04 – Database Perfomance Analysis

Selecione a opção
“Explain” para visualizar
o comando SQL.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 ST04 – Database Perfomance Analysis

Selecione essa opção


para verificar o ranking
de acesso ao banco
de dados.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 ST04 – Database Perfomance Analysis

Podemos montar um
ranking por Buffer Gets,
Lets/Disco, Execuções, etc.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 SE30 - Runtime Analisys
 Nesta transação, podemos selecionar quais os objetos que serão
analisados: subrotinas, tabelas internas, acessos à BD e acesso à memória.
A execução, simula a transação (ou programa) em questão e no final, exibe
um relatório detalhado de todos os acessos realizados pelo programa.

Através dessa opção podemos


ter acesso a diversas sugestões
de otimização de performance.

Exibe o log de execução da


análise do programa
executado.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 ST03 – Workload Analysis
 Através dessa transação podemos analisar por período e servidor o tempo
de acesso a banco de dados e o tempo de consumo CPU de transações e
programas.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 ST03 – Workload Analysis

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 ST03 – Workload Analysis

Relação dos programas


com maior tempo de
resposta de CPU e Banco
de dados.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 ST05 – Trace Request
Nesta transação, temos a relação de todas as tabelas acessadas durante o
período em que o Trace permaneceu ligado, juntamente com o número de
registros lidos, os campos utilizados para pesquisa, qual índice secundário foi
utilizado, o número de prepare/fetch/open executados pelo banco de dados,
entre outras funcionalidades.

Ligar Trace.
Executar Programa.
Desligar Trace.
Executar Trace List.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 ST05 – Trace Request

Relação dos acessos


ao banco de dados.

Exibe o custo, método


utilizado para o acesso e
índice utilizado.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 ST05 – Trace Request

Custo estimado

Método utilizado para o


acesso.

Índice
utilizado

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 ST05 – Trace Request

Ao selecionar o índice
utilizado, podemos
verificar quando foi
gerada a última
estatística para a
tabela e também a
quantidade de
registros distintos por
campo.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 SQLR - SQL Trace Interpreter - Resumo Trace
Através do arquivo trace gerado pela transação ST05 é possível visualizar
os os 20 maiores gargalos de banco e não-banco.

Inserir as informações
referente à transação
ST05.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 SQLR - SQL Trace Interpreter - Resumo Trace

Selecionar a opção “Somatória”,


para visualizar os comando com
maior tempo de acesso ao
banco de dados.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 SQLR - SQL Trace Interpreter - Resumo Trace

Ranking com os
comandos com tempo
de resposta do banco
de dados.

Copyright © 2010 Accenture All Rights Reserved.


Transações para
Monitoramento
 SQLR - SQL Trace Interpreter - Resumo Trace

Ranking com os
comandos com tempo
de resposta do banco
de dados.

Copyright © 2010 Accenture All Rights Reserved.

Vous aimerez peut-être aussi