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

Часовой пояс: 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 часа


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

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


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

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