Заметки старого АБАПника 008. Производительность индексного доступа к стандартной таблице
Производительность индексного доступа к стандартной таблице.
Широко распространено представление о том, что время индексного доступа к стандартной таблице не зависит от размера этой внутренней таблицы. Проницательные АБАПеры усомнились в истинности этой гипотезы. Так что проверим.
* 008.Index Access to a Stnadard Table (1000 tests)
REPORT ZQK008.
selection-screen comment /1(80) t_worn.
selection-screen begin of line.
selection-screen comment 1(24) t_power.
parameters p_power type i default 8.
selection-screen end of line.
data
: gp_rpt type i value 1000 " test number
, begin of gs " hashed table line
, nnn type n length 12
, end of gs
, gt like standard table of gs with default key
, begin of gs_stat " statistics line
, no type int2
, cnt type int4
, rls type standard table of i " realisation table
, end of gs_stat
, gt_stat like standard table of gs_stat with key no
, gp_cnt type int4 " hashed table size
, gp_trg type i
, a type i, b type i, t type i
, list_header type string
.
field-symbols <gs> like gs.
start-of-selection.
do gp_rpt times. " 1000 tests
do p_power times. " Each test
gp_cnt = 2 ** sy-index.
gp_trg = gp_cnt - 1.
free gt.
do gp_cnt times.
add 1 to gs-nnn.
insert gs into table gt.
enddo.
read table gt assigning <gs> index gp_trg.
read table gt assigning <gs> index 1.
get run time field a.
read table gt assigning <gs> index gp_trg.
get run time field b.
t = b - a. " Result
perform result_collection.
enddo. " End of test
enddo. " End of 1000 tests
perform result_processing.
uline.
write " Legend
: / 'Count - Hashed table size = line count'
, / 'Avg - Average'
, / 'rMS - Root mean square '
, / 'for Gauss quartile = 0.6745 * rMS'
, / ' decile = 1.282 * rMS'
, / ' centile = 2.326 * rMS'
, / 'Quantiles here:'
, / 'Min - Minimal value = low millile (not represantive, 1000 tests)'
, / 'q01 - Low centile'
, / 'q10 - Low decile'
, / 'q25 - Low quartile'
, / 'Median - Median, as you have already guessed (p = 0.5)'
, / 'q75 - High quartile'
, / 'q90 - High decile'
, / 'q99 - High centile'
, / 'Max - Maximal value = high millile (not represantive, 1000 tests)'
, / 'Result of', gp_rpt color col_group, 'tests'
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти
Обсуждения 2
Комментарий от
Олег Точенюк
| 18 июня 2015, 00:01
Комментарий от
Виталий Глущенко
| 23 июня 2015, 22:50
Вот несколько стандартных вопросов, который возникают после прочтения:
1) Скажите, что в итоге вы доказали?
2) Не смущает, что при Count = 2 Med = 4, при Count = 4 Med = 3, т.е. Med(2) > Med(4) и похожая ситуация далее Count = 524 288 Med = 7, при Count = 1 048 576 Med = 6, т.е. Med(524 288) > Med(1 048 576)? Может ли подобная ситуация повториться на еще больших размерах таблицы?
3) Учитывались ли другие факторы влияющие на производительность программы и сервера приложений? Какие?
4) Как долго по времени продолжался тест? Достаточно ли этого времени для получения адекватных результатов?
5) Какие характеристики сервера приложений и насколько он был загружен в момент проведения теста.
Поймите меня правильно. Комментарий пишу не для того, чтобы показать какой я "молодец", что придумал эти вопросы, а вы "плохой", что их не учли. Пишу только для того, чтобы вы учли эти и возможно некоторые другие вопросы при написании и редактировании ваших статей на тему производительности.