Текущее время: Пн, июл 21 2025, 04:56

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: О производительности - loop / select / cursor
СообщениеДобавлено: Пн, апр 13 2009, 09:39 
Начинающий
Начинающий

Зарегистрирован:
Пн, апр 13 2009, 09:24
Сообщения: 22
Всем привет.
Есть таблица БД ztab:
---------------------------------------
MANDT MANDT
KEY_FLD NUMC 10 - ключ
F01 CHAR 20
...
F30 CHAR 20
---------------------------------------
число полей данных - 30
число строк - 100000

есть программа:

Code:
TABLES ztab.
DATA itab TYPE TABLE OF ztab WITH HEADER LINE.

DATA: t TYPE i,
      t1 TYPE i,
      t2 TYPE i.

DATA   c1 TYPE cursor.


GET RUN TIME FIELD t1.
SELECT * INTO TABLE itab FROM ztab.
LOOP AT itab.
  CLEAR itab-f01.
ENDLOOP.
GET RUN TIME FIELD t2.
t = t2 - t1.
WRITE: / '1. time - ', t.

GET RUN TIME FIELD t1.
SELECT *  FROM ztab.
  CLEAR ztab-f01.
ENDSELECT.
GET RUN TIME FIELD t2.
t = t2 - t1.
WRITE: / '2. time - ', t.

GET RUN TIME FIELD t1.
OPEN CURSOR c1 FOR SELECT * FROM ztab.
DO.
  FETCH NEXT CURSOR c1 INTO ztab.
  IF sy-subrc <> 0.
    CLOSE CURSOR c1. EXIT.
  ENDIF.
  CLEAR ztab-f01.
ENDDO.
GET RUN TIME FIELD t2.
t = t2 - t1.
WRITE: / '3. time - ', t.


Результат:

    1. time - 6 520 282
    2. time - 6 532 171
    3. time - 6 555 713

Вопрос - результат примерно одинаковый,
какими принципами надо руководствоваться при выборе типов подобных циклов,
что дает применение курсоров?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: О производительности - loop / select / cursor
СообщениеДобавлено: Пн, апр 13 2009, 10:00 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Принцип простой: не сравнивать сферических коней в вакууме ;)
В вашем случае вполне ожидаемый результат.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: О производительности - loop / select / cursor
СообщениеДобавлено: Пн, апр 13 2009, 10:06 
Начинающий
Начинающий

Зарегистрирован:
Пн, апр 13 2009, 09:24
Сообщения: 22
Хорошо, и при каких условиях разница в производительности станет заметной?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: О производительности - loop / select / cursor
СообщениеДобавлено: Пн, апр 13 2009, 10:08 
Начинающий
Начинающий

Зарегистрирован:
Пн, апр 13 2009, 09:24
Сообщения: 22
Пробоал и select с join, результаты в основном те же.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: О производительности - loop / select / cursor
СообщениеДобавлено: Пн, апр 13 2009, 10:16 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
- добавьте какой-нибудь where
- засекайте по одному варианту, отключив другие
- запускайте с интервалом в час
- укажите package size


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: О производительности - loop / select / cursor
СообщениеДобавлено: Пн, апр 13 2009, 10:24 
Начинающий
Начинающий

Зарегистрирован:
Пн, апр 13 2009, 09:24
Сообщения: 22
История вопроса в том, что при выполнении довольно сложного SELECT-a не хватало памяти на сервере приложений,
отчет вылетал в дамп.
Пробовали все - и package size и курсоры, базис выделил максимально возможное кол-во памяти,
в итоге SELECT разбили на несколько последовательных подзапросов, чем все и решили.
Я так и не понял, что дает применение package size и курсоров.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: О производительности - loop / select / cursor
СообщениеДобавлено: Пн, апр 13 2009, 10:25 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Для информации - PACKAGE SIZE
Рыбак рыбака, как говорится...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О производительности - loop / select / cursor
СообщениеДобавлено: Пн, апр 13 2009, 10:40 
Начинающий
Начинающий

Зарегистрирован:
Пн, апр 13 2009, 09:24
Сообщения: 22
Представлялось, что выборки типа SELECT PACKAGE SIZE и FETCH
передают блоки данных от сервера БД на сервер приложений,
а по экспериментам - первый же SELECT или OPEN CURSOR - сразу гонят всю таблицу на сервер приложений.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: О производительности - loop / select / cursor
СообщениеДобавлено: Пн, апр 13 2009, 12:03 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
with hold, по ссылке выше посомтри посты mike1


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: О производительности - loop / select / cursor
СообщениеДобавлено: Вт, апр 14 2009, 01:39 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
tester написал(а):
первый же SELECT или OPEN CURSOR - сразу гонят всю таблицу на сервер приложений.

Думаю что это не так, где то вы ошиблись

_________________
Изображение Попытка не пытка


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О производительности - loop / select / cursor
СообщениеДобавлено: Вт, апр 14 2009, 08:18 
Начинающий
Начинающий

Зарегистрирован:
Пн, апр 13 2009, 09:24
Сообщения: 22
Это видно даже по времени выполнения первого SELECT-а в
цикле типа
Code:
SELECT * FROM ztab PACKAGE SIZE 10.
...
ENDSELECT.

Время выполнения первого оператора SELECT совпадает с временем конструкции
Code:
SELECT * FROM ztab INTO TABLE itab.


Такая же ситуация и с OPEN CURSOR.

Получается, у серверов БД и приложений свои представления о минимальном размере выборки.
Наверное, эффект от применения этих операторов скажется на очень больших объемах.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: О производительности - loop / select / cursor
СообщениеДобавлено: Вт, апр 14 2009, 09:40 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
tester написал(а):
первый же SELECT или OPEN CURSOR - сразу гонят всю таблицу на сервер приложений.

У таблицы ZTAB в технических параметрах не включена буферизация?

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О производительности - loop / select / cursor
СообщениеДобавлено: Вт, апр 14 2009, 10:33 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
tester, почему вы упорно продолжаете считать что ваши конкретные примеры и в частности время их выполнения о чем-то свидетельствуют? Это в корне неверно.
Вы не привели никаких данных о том, на какой версии, каком железе, каких каналах и т.д. запускаете свой код.
И сейчас хотите чтобы вам дали конкретный ответ по неполным данным.

Вам уже привели ссылку с достаточной информацией по курсорам и зачем оно надо.


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

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


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

Сейчас этот форум просматривают: Google [Bot]


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

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