Текущее время: Пт, июл 25 2025, 14:05

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Создание параллельных процессов выборки данных
СообщениеДобавлено: Вт, май 08 2007, 14:44 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, май 24 2006, 09:33
Сообщения: 154
Откуда: Москва
есть необходимость выполнения нескольких запросов
хотелось бы эти выборки распараллелить и по окончании выполнения всех выборок использовать накопленную инфлормацию, для того чтобы не выполнять последовательную выборку данных
подскажите как возможно это реализовать.
заранее благодарен.

_________________
Best regards
Dolbnev Alexandr


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 15:00 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Вс, окт 08 2006, 22:57
Сообщения: 81
Пол: Мужской
a mojno poto4nee sformulirowat?

eto BW ili R/3?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 15:18 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, май 24 2006, 09:33
Сообщения: 154
Откуда: Москва
r3

надо выполнить 6 запросов тяжелые по 3 минуты
хочу их одновременно запустить чтобы потратилось на выборку не 18 минут а 6
вот и все.

_________________
Best regards
Dolbnev Alexandr


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 15:26 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
CALL FUNCTION func ...STARTING NEW TASK task name.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 15:30 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, май 24 2006, 09:33
Сообщения: 154
Откуда: Москва
а почему CALL FUNCTION IN BACKGROUND TASK

не пойдет ?

_________________
Best regards
Dolbnev Alexandr


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 15:31 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Потому что синхронно


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 15:33 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, май 24 2006, 09:33
Сообщения: 154
Откуда: Москва
в функцию пихать селект
а через перформ вытягивать в программу ?

_________________
Best regards
Dolbnev Alexandr


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 15:34 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, май 24 2006, 09:33
Сообщения: 154
Откуда: Москва
но если я укажу сепарейт таск я сам видел создается диалоговая хрень она выполняет мой запрос

главное узнать когда выполнится бекграунд и вытащить данные

_________________
Best regards
Dolbnev Alexandr


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 15:41 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Вот чтобы не узнавать есть:
CALL FUNCTION func ...STARTING NEW TASK task name.


Additions:

4. ... PERFORMING form ON END OF TASK

В ФМ выносишь селект.
Вызываешьего столько раз, сколько надо.
На каждый вызов создаешь переменную типа char(1) value space.
Создаешь на каждый вызов по форме. В форме ставишь соответсвующую переменную в 'x' и проверяешь, все ли остальные заиксованы. Если да - значит все таски завершены и можно продолжать.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 15:43 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, май 24 2006, 09:33
Сообщения: 154
Откуда: Москва
пробую так и делать. смотрю что получается

_________________
Best regards
Dolbnev Alexandr


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 15:56 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, май 24 2006, 09:33
Сообщения: 154
Откуда: Москва
WAIT UNTIL p1 is INITIAL.

пропускает дальше он не ждет пока выполнится функция затем перформ

_________________
Best regards
Dolbnev Alexandr


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 16:07 
Модератор
Модератор
Аватара пользователя

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 16:57 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, авг 04 2006, 20:56
Сообщения: 1006
Откуда: 37 МИКРОРАЙОН
Пол: Мужской
Будте проще мужчины :D

Code:
Определяем количество выборок из базы данных  :D

obj_cnt = LINES( it_fm_param ).
    proc_cnt = obj_cnt DIV free_task + 1.
    CLEAR: gs_cnt1, started_task1.

НУ И ПОХНАЛИ :D

    WHILE indx2 <= obj_cnt.
      indx1 = indx2 + 1.
      indx2 = indx2 + proc_cnt.
      REFRESH lt_fm_param.
      INSERT LINES OF it_fm_param FROM indx1 TO indx2 INTO TABLE  lt_fm_param.

      WRITE sy-index TO taskname LEFT-JUSTIFIED.
      CONCATENATE 'PLAN_DF' taskname INTO taskname.

      CALL FUNCTION 'Z_F_CO_PLAN_DF_ELEM'
        STARTING NEW TASK taskname
        DESTINATION IN GROUP DEFAULT
        PERFORMING get_data ON END OF TASK
        EXPORTING
         i_keart   = 'N'     
         i_kkzst   = ' '     
         i_curtp   = wa_curtp
        TABLES
          t_param   = lt_fm_param
          t_el_hv   = it_el_hv
          t_elehkns = it_elehkns
          t_ckmlkev = it_ckmlkev
*          t_outdata = it_plan_df_elem
        EXCEPTIONS
          int_err   = 1
          OTHERS    = 3.

      IF sy-subrc = 0.
        ADD 1 TO started_task1.
      ELSE.
        MESSAGE e203(zmco).
      ENDIF.

      IF free_task <= started_task1 OR indx2 >= obj_cnt.
        WAIT UNTIL gs_cnt1 >= started_task1.
        CLEAR: gs_cnt1, started_task1.
      ENDIF.
    ENDWHILE.

а в форме типа такого 

FORM get_data USING taskname.
  RECEIVE RESULTS FROM FUNCTION 'Z_F_CO_PLAN_DF_ELEM'
                            TABLES
                                  t_outdata = lt_plan_df_elem
                            EXCEPTIONS
                                  int_err   = 1
                                  OTHERS    = 2.
  APPEND LINES OF lt_plan_df_elem TO it_plan_df_elem.
  ADD 1 TO gs_cnt.
ENDFORM.                    "get_data

ВОТ!!!! :D


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 15 2007, 15:00 
Специалист
Специалист

Зарегистрирован:
Вс, мар 13 2005, 13:59
Сообщения: 201
Откуда: Moscau
Пономарев Артем написал:
Вот чтобы не узнавать есть:
CALL FUNCTION func ...STARTING NEW TASK task name.

И потом медленная мучительна смерть от базисников! Ибо занять 6 диалоговых процесов на сервере .... (в продуктиве у нас 8 диалоговых на >150 человек ). А если 2 и > человека запустит ....
UPD: Более того где-то читал давно, что если нету свободных диалоговых процесов - он криво себя ведет - просто вылетает, ничего не говоря.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 15 2007, 16:09 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пн, янв 24 2005, 16:22
Сообщения: 749
Пол: Мужской
Boger написал(а):
И потом медленная мучительна смерть от базисников!

Это ещё хороший вариант, так как начальство может убить быстрее, если им назовут виновного.



Lexx_nv написал(а):
надо выполнить 6 запросов тяжелые по 3 минуты
хочу их одновременно запустить чтобы потратилось на выборку не 18 минут а 6

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

Во-вторых, если не хотите, чтобы пользователи ждали - разбейте на два отчёта. Пусть первый наполнит Z-таблицы в фоновом режиме, а второй лишь выдаст результаты.

_________________
Счастье есть!


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу 1, 2, 3  След.

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


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

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


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

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