Текущее время: Ср, июл 23 2025, 02:18

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


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

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


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

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