Académique Documents
Professionnel Documents
Culture Documents
Camada de Apresentação
Camada de Apresentação
Camada de Aplicação
Dispatcher
WP WP WP
DIALOG BATCH DIALOG
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
• 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).
Nested Loop
Uma view é um objeto lógico, porém
Views/Joins seus registros não são gravados
fisicamente no 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.
• Tipos de Buferização
• Completo: no primeiro acesso à tabela, todo o seu conteúdo é
armazenado no buffer;
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.
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.
Exercício:
Melhorar a performance do relatório de ordens de
venda.
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.
Update...Set
PERFORMANCE RUIM PERFORMANCE MELHOR
LOOP AT t_vbap.
t_vbap-zmeng = t_vbap-zmeng + 5.
UPDATE vbap FROM t_vbap.
ENDLOOP.
Cursor Cashing
PERFORMANCE RUIM PERFORMANCE MELHOR
• SELECT... ENDSELECT
• ORDEM DE SELEÇÃO
Selecionar os campos na mesma ordem que se encontram declarados no
banco de dados.
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 )
Exercício:
• 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.
Arquitetura SAP
STANDARD TABLE
SORTED TABLE
HASHED TABLE
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
Dicas:
Somente copiar os campos que realmente serão utilizados,
tanto em operações de leitura como alteração:
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
• Comando SORT
• Lógica de “Buferização”.
•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.
Cálculos
Não usar campos do tipo numéricos para execução de cálculos.
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
•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.
Loops Encadeados
•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
Field-Symbol
Sempre especificar um Tipo para definir um FIELD-SYMBOL.
I2 = <F>. I2 = <I>.
I3 = <F>. I3 = <I>.
If X Case
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
Arquitetura SAP
Selecione a opção
Insira o nome da “Detailed
tabela que deseja analysis”para
pesquisar. verificar o tamanho
físico da tabela.
Aqui verificamos o
tamanho da tabela e
de seus índices.
Verificamos aqui os
acessos e
atualizações feitos a
cada tabela.
Selecione a opção de
análise de performance.
Selecione a opção
“Explain” para visualizar
o comando SQL.
Podemos montar um
ranking por Buffer Gets,
Lets/Disco, Execuções, etc.
Ligar Trace.
Executar Programa.
Desligar Trace.
Executar Trace List.
Custo estimado
Índice
utilizado
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.
Inserir as informações
referente à transação
ST05.
Ranking com os
comandos com tempo
de resposta do banco
de dados.
Ranking com os
comandos com tempo
de resposta do banco
de dados.