Escolar Documentos
Profissional Documentos
Cultura Documentos
Programa de Performance
Programa de Performance
REPORT teste_internal_table.
TYPES:
" Tipo de dado que será armazenado
BEGIN OF ty_object,
pgmid TYPE pgmid,
object TYPE trobjtype,
obj_name TYPE sobj_name,
END OF ty_object,
BEGIN OF ty_idx_object,
index TYPE syindex,
object TYPE ty_object,
END OF ty_idx_object,
BEGIN OF ty_tempo,
" Quantidade total de registros nas tabelas a serem testadas: STANDARD, HASHED
e SORTED
tblcnt TYPE i,
" Quantidade total de READ TABLE que será executado nas tabelas
rdtcnt TYPE i,
standard TYPE p DECIMALS 5,
std_bin TYPE p DECIMALS 5,
std_idx TYPE p DECIMALS 5,
sorted TYPE p DECIMALS 5,
hashed TYPE p DECIMALS 5,
END OF ty_tempo,
START-OF-SELECTION.
" Uma tabela de cada tipo com uma quantidade de P_TBLCNT registros usadas para
testar desempenho do comando READ.
DATA: lt_standard TYPE ty_object_standard,
lt_hashed TYPE ty_object_hashed,
lt_sorted TYPE ty_object_sorted.
ENDLOOP.
*******************
*&---------------------------------------------------------------------*
*& Form F_PREENCHE_TABELAS
*&---------------------------------------------------------------------*
FORM f_preenche_tabelas USING uv_tblcnt TYPE i
uv_rdtcnt TYPE i
CHANGING ct_standard TYPE ty_object_standard
ct_hashed TYPE ty_object_hashed
ct_sorted TYPE ty_object_sorted
ct_objects_to_read TYPE ty_idx_object_tab.
"Criando objeto LO_RND que será usado para obter números aleatórios.
lo_rnd = cl_abap_random=>create( ).
SELECT pgmid
object
obj_name
UP TO uv_tblcnt ROWS
INTO TABLE ct_standard
FROM tadir
ORDER BY obj_name. "Deixando a tabela desordenada de propósito.
ct_hashed = ct_standard.
ct_sorted = ct_standard.
"Procura UV_RDTCNT registros aleatórios e adiciona em nossa tabela que será base
para o LOOP principal.
DO uv_rdtcnt TIMES.
lv_num = lo_rnd->intinrange( low = 1 high = uv_tblcnt ).
READ TABLE ct_standard INDEX lv_num INTO ls_object.
IF sy-subrc IS INITIAL.
ls_idx_object-index = lv_num.
ls_idx_object-object = ls_object.
APPEND ls_idx_object TO ct_objects_to_read.
ENDIF.
ENDDO.
ENDFORM. " F_PREENCHE_TABELAS
*&---------------------------------------------------------------------*
*& Form F_TESTE_TABELA_STANDARD
*&---------------------------------------------------------------------*
FORM f_teste_tabela_standard USING value(ut_objects_to_read) TYPE ty_idx_object_tab
value(ut_standard) TYPE
ty_object_standard
CHANGING cs_tempo TYPE ty_tempo.
ENDLOOP.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form F_TESTE_TABELA_STANDARD_INDEX
*&---------------------------------------------------------------------*
FORM f_teste_tabela_standard_index USING value(ut_objects_to_read) TYPE
ty_idx_object_tab
value(ut_standard) TYPE
ty_object_standard
CHANGING cs_tempo TYPE ty_tempo.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form F_TESTE_TABELA_STANDARD_SORTED
*&---------------------------------------------------------------------*
FORM f_teste_tabela_standard_sorted USING value(ut_objects_to_read) TYPE
ty_idx_object_tab
value(ut_sorted) TYPE
ty_object_sorted
CHANGING cs_tempo TYPE ty_tempo.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form F_TESTE_TABELA_STANDARD_HASHED
*&---------------------------------------------------------------------*
FORM f_teste_tabela_standard_hashed USING value(ut_objects_to_read) TYPE
ty_idx_object_tab
value(ut_hashed) TYPE
ty_object_hashed
CHANGING cs_tempo TYPE ty_tempo.
*&---------------------------------------------------------------------*
*& Form F_CONFIGURA_CENARIOS
*&---------------------------------------------------------------------*
FORM f_configura_cenarios CHANGING ct_tempos TYPE ty_tempo_tab.
DATA ls_tempo TYPE ty_tempo.
ls_tempo-tblcnt = 1000.
ls_tempo-rdtcnt = 1.
DO 3 TIMES.
ls_tempo-rdtcnt = ls_tempo-rdtcnt * 10.
APPEND ls_tempo TO ct_tempos.
ENDDO.
ls_tempo-tblcnt = 10000.
ls_tempo-rdtcnt = 1.
DO 4 TIMES.
ls_tempo-rdtcnt = ls_tempo-rdtcnt * 10.
APPEND ls_tempo TO ct_tempos.
ENDDO.
ls_tempo-tblcnt = 100000.
ls_tempo-rdtcnt = 1.
DO 5 TIMES.
ls_tempo-rdtcnt = ls_tempo-rdtcnt * 10.
APPEND ls_tempo TO ct_tempos.
ENDDO.
* ls_tempo-tblcnt = 1000000.
* ls_tempo-rdtcnt = 1.
*
* DO 6 TIMES.
* ls_tempo-rdtcnt = ls_tempo-rdtcnt * 10.
* APPEND ls_tempo TO ct_tempos.
* ENDDO.
*&---------------------------------------------------------------------*
*& Form F_EXIBE_RESULTADOS
*&---------------------------------------------------------------------*
FORM f_exibe_resultados USING ut_tempos TYPE ty_tempo_tab.
ls_field-tabname = 'UT_TEMPOS'.
ls_field-reptext_ddic = 'Standard'.
ls_field-fieldname = 'STANDARD'.
APPEND ls_field TO lt_fieldcat.
ls_field-reptext_ddic = 'Sorted'.
ls_field-fieldname = 'SORTED'.
APPEND ls_field TO lt_fieldcat.
ls_field-reptext_ddic = 'Hashed'.
ls_field-fieldname = 'HASHED'.
APPEND ls_field TO lt_fieldcat.
ENDFORM.