Текущее время: Вт, июл 22 2025, 21:59

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Время выборки из таблички по первичному ключу.
СообщениеДобавлено: Чт, окт 04 2012, 08:43 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 08:40
Сообщения: 226
Здравствуйте.
Подскажите пожалуйста.
Есть табличка БД mvke(не буферизованная). Делаю 100000 отдельных select-ов из неё по первичному ключу и засекаю время выполнения.
Рассмотрел два случая:
1) если табличка mvke пустая то 100000 отдельных select-ов выполняются 21, 258 секунд
2) если в табличка mvke заполнена 1.5 милионов строк время выполения 21, 747 секунд.

Т.е время выполнения при пустой табличке и заполненной 1.5 миллионами строк почти не отличается( примерно 21 секунда) если делаем селект по первичному ключу.
Code:
data lvorm type lvorm.
data: time2 type i,
      time1 type i,
      time_diff type i.
get run time field time1.
do 100000 times.
  select single lvorm from mvke client specified into lvorm
    where mandt = sy-mandt and matnr = '000000000001991143' and vkorg = '0101' and vtweg = '01'.
enddo.
get run time field time2.
time_diff = time2 - time1.
write: / 'SELECT TIME:', time_diff.


Меня интерисует что будет с временем выполнения данной программки
если в табличке mvke будет несколько сотен миллиардов строк. Время выполнения тоже будет примерно 21 секунда? И есть ли какая-то формула по-которой можно вычислить время запроса в зависимости от числа записей в табличке БД(считывание происходит по первичному ключу)?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Время выборки из таблички по первичному ключу.
СообщениеДобавлено: Чт, окт 04 2012, 09:03 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Мнэээ. очень странный эксперимент. Таблица-то не буферизованная, ага... в сапе. А вот на уровне СУБД все равно есть кэширование. Так что, начиная с определенного момента, запрос просто читает данные из буфера СУБД, тем более что читаете-то вы все время одну и ту же строку. Ну и как мне кажется, наиболее инетерсным с точки зрения производительности должен быть случай, когда искомой записи в субд просто нет.

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Время выборки из таблички по первичному ключу.
СообщениеДобавлено: Чт, окт 04 2012, 09:13 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 08:40
Сообщения: 226
Кодер написал(а):
Мнэээ. очень странный эксперимент. Таблица-то не буферизованная, ага... в сапе. А вот на уровне СУБД все равно есть кэширование. Так что, начиная с определенного момента, запрос просто читает данные из буфера СУБД, тем более что читаете-то вы все время одну и ту же строку. Ну и как мне кажется, наиболее инетерсным с точки зрения производительности должен быть случай, когда искомой записи в субд просто нет.


А если в цикле do 100000 times ...endo читать всегда разные строчки и этих строчек не будет в табличке mvke никогда..то насколько быстрее будет выполняться такая программка при пустой табличке mvke и при заполненной несколькими миллионами строк?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Время выборки из таблички по первичному ключу.
СообщениеДобавлено: Чт, окт 04 2012, 09:50 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Чтение из заполненной таблицы будет происходить в общем случае медленнее. Но на чтение оказывает влияние большое количество разных факторов: наличие данных в кэше, загрузка сети, читаются ли данные по 1 записи или пачками, наличие и качество статистики, как данные разложены физически. Если СУБД оракл, то для примерной оценки используют cost из плана запроса в st05
В деталях данную тему можно разъяснить для себя прочитав вот эту книгу

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Время выборки из таблички по первичному ключу.
СообщениеДобавлено: Чт, окт 04 2012, 10:15 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
С точки зрения производительности поиск по ключу примерно то же самое что поиск в отсортированном массиве. Соответственно время работы = O( ln(N) ), где O - линейная функция, N - число элементов (строк). Или то же самое можно записать по другому: K*ln(N), где K - константа. Предполагается что прочие факторы (загрузка сети и т.д.) не зависят от N и включены в константу K


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Время выборки из таблички по первичному ключу.
СообщениеДобавлено: Чт, окт 04 2012, 11:27 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
ваш эксперимент просто показал, что 1 строка все равно буферизуется :D
попробуйте добавить bypassing buffer


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Время выборки из таблички по первичному ключу.
СообщениеДобавлено: Чт, окт 04 2012, 11:42 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 08:40
Сообщения: 226
trop написал(а):
ваш эксперимент просто показал, что 1 строка все равно буферизуется :D
попробуйте добавить bypassing buffer

да, да эксперимент провалился:D
Причем bypassing buffer тоже погоды не сделал.
Code:
do 100000 times.
  select single lvorm from mvke client specified into lvorm bypassing buffer
    where mandt = sy-mandt and matnr = '010000005001991143' and vkorg = '9999' and vtweg = '01'.
enddo.

Как в случае пустой таблицы mvke, так и в случае заполненной время осталось тем же, примерно 21 секунда. Похоже буферизация на уровне СУБД и при bypassing buffer осталась


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Время выборки из таблички по первичному ключу.
СообщениеДобавлено: Чт, окт 04 2012, 11:45 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, апр 18 2012, 14:20
Сообщения: 252
Откуда: РБ, г. Гомель
Пол: Мужской
Цитата:
... BYPASSING BUFFER
Effect
This addition causes the SELECT statement to avoid SAP buffering and to read directly from the database and not from the buffer on the application server

БД на BYPASSING BUFFER не проведешь

P. S.
а что случилось с классическими способами? сапера гонять, пинговать сеть, плевать на вентилятор в конце концов :shumlol:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Время выборки из таблички по первичному ключу.
СообщениеДобавлено: Чт, окт 04 2012, 13:29 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
skaa написал(а):
Как в случае пустой таблицы mvke, так и в случае заполненной время осталось тем же, примерно 21 секунда. Похоже буферизация на уровне СУБД и при bypassing buffer осталась

Для эксперимента номер материала в цикле лучше каждый раз изменять, например на 1. Наличие или отсутствие такого номера в таблице не должно играть особой роли.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Время выборки из таблички по первичному ключу.
СообщениеДобавлено: Чт, окт 04 2012, 14:08 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
2 zsap: как мне кажется, наличие искомой записи - как раз влияет. Приведенная вами оценка O - это грубо говоря оценка "сверху" (пруф, извините, что в вики). В лучшем случае, информация будет найдена по кратчайшему маршруту (в неком "среднем" случае, инфа будет так же найдена по оценке O(ln(N)), одно из свойств B-tree, которые и используются для построения индексов в популярных СУБД).

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Время выборки из таблички по первичному ключу.
СообщениеДобавлено: Чт, окт 04 2012, 14:18 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
zsap написал:
skaa написал(а):
Как в случае пустой таблицы mvke, так и в случае заполненной время осталось тем же, примерно 21 секунда. Похоже буферизация на уровне СУБД и при bypassing buffer осталась

Для эксперимента номер материала в цикле лучше каждый раз изменять, например на 1. Наличие или отсутствие такого номера в таблице не должно играть особой роли.
Тогда уж лучше не на 1, а использовать псевдослучайные числа :) потому что с высокой вероятностью следующий номер материала окажется в том же блоке данных, который уже закеширован на уровне БД

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB