Автор Тема: Оптимизация ABAP-а  (Прочитано 283470 раз)

0 Пользователей и 5 Гостей просматривают эту тему.

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #125 : Август 10, 2009, 02:21:07 pm »
Можно сказать что проблему решил, выборка валилась из-за очень больших объемов данных, данный счет у нас перерасчетный, и проводки по нему возникали по каждой позиции документа материала, определенного вида ......
Попробую сделать аналогичную выборку через faglflext

Спасибо за помощь и участие.
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Репутация: +7/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #126 : Август 10, 2009, 02:32:56 pm »
Большой объем данных никак не влияет на выбор индекса :)
Попробуй включить в запрос и group by поля augbl и augdt (в условии задавать для них пустые значения ("" для augbl и "00000000" для augdt)

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #127 : Август 10, 2009, 03:51:31 pm »
You are not allowed to view links. Register or Login
Большой объем данных никак не влияет на выбор индекса :)
Та ему не поможет... у него данных он же говорит по счету много, так что падать будет при любом раскладе для этого счета.

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #128 : Август 10, 2009, 04:50:03 pm »
Да вряд ли поможет  :(
..............................
Не помогло, но за советы все равно - Спасибо
« Последнее редактирование: Август 10, 2009, 04:54:58 pm от Паганель »
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Репутация: +7/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #129 : Август 10, 2009, 05:06:51 pm »
Цитата: Uukrul  link=topic=174.msg4669#msg4669 date=1249908691
Та ему не поможет... у него данных он же говорит по счету много, так что падать будет при любом раскладе для этого счета.
не факт :)

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #130 : Август 10, 2009, 05:17:19 pm »
You are not allowed to view links. Register or Login
не факт :)
Да у него дамп из-за памяти, а не времени выборки, так что факт  ::) или есть способ динамического сжатия выбираемой информации  на леут  ;D

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Репутация: +7/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #131 : Август 10, 2009, 05:43:11 pm »
Да ладно  ???
Код: You are not allowed to view links. Register or Login
SELECT SUM( dmbtr ) AS dmbtr bukrs zuonr shkzg hkont blart
  APPENDING CORRESPONDING FIELDS OF TABLE gt_bsis
    FROM bsis
  WHERE
      bukrs IN so_bukrs      AND
      hkont =  '0070300800'  AND
      zuonr IN sa_lifnr      AND
      blart = 'RV' AND
      budat IN so_budat AND
      shkzg = 'H'
      GROUP BY bukrs hkont zuonr  budat shkzg  blart.
Ширина выборки - 50 байт.
Это же сколько нужно записей выбрать, чтобы лимита памяти достичь :)

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #132 : Август 10, 2009, 05:52:51 pm »
You are not allowed to view links. Register or Login
Это же сколько нужно записей выбрать, чтобы лимита памяти достичь :)
Ну так кто ж его знает какая у него там машинка стоит и сколько памяти на процесс выделено... и что у него еще в памяти крутиться кроме этого запроса. Кстати у него ритейл, так что... количество документов там может быть ну очень большим.

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Репутация: +7/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #133 : Август 10, 2009, 06:21:09 pm »
Ну как... 2000000 счетов-фактур. Если в документах содержится по 1-й позиции требуемого бухгалтерского счета, то это ~100 МБ. Если даже по 10 - это ~1 ГБ.
Если на выделение памяти для процесса ограничение 500 МБ (ztta/roll_extension), то для приведенного примера нужно использовать конструкцию SELECT .. PACKAGE SIZE, которая позволяет выгружать данные во внутреннюю таблицу порциями.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #134 : Август 10, 2009, 08:01:13 pm »
You are not allowed to view links. Register or Login
Если на выделение памяти для процесса ограничение 500 МБ (ztta/roll_extension), то для приведенного примера нужно использовать конструкцию SELECT .. PACKAGE SIZE, которая позволяет выгружать данные во внутреннюю таблицу порциями.
Вот сейчас автора запроса придет и узнаем что у него там на процесс выделено...

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #135 : Август 10, 2009, 09:34:46 pm »
Ага, узнаете  :)...... про.....возился  :)  с данным запросом ..... не получится, ну очень много документиков, реально берем 200 магазинов (отдельные заводы), половина продаж это как раз нужные мне (консигнация), данный счет содержит проводки по перерасчетному счету для сохранения себестоимости реализованного товара, представь выторг крупных торговых сетей,  по алкоголю, и на каждую позицию товара (материала) создается проводка по нужному мне счету .....  :), лучше можно было придумать только "полная выборка bseg" меня админы потом медленно четвертуют  :)

PS (Uukrul): Отредактировано по просьбе Паганеля.
« Последнее редактирование: Август 10, 2009, 10:21:57 pm от Uukrul »
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #136 : Август 11, 2009, 08:58:11 am »
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

идеальное пояснение. простите за глупый вопрос, а для чего используется se30  и если можно что-то похожее в качестве пояснения.
спасибо

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #137 : Август 11, 2009, 09:15:30 am »
Ну с помощью se30 можно производить поиск "узких мест" в программе, т.е. тех которые выполняются слишком долго  :)
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а (SELECT * ENDSELECT.)
« Ответ #138 : Сентябрь 02, 2009, 04:18:22 pm »
You are not allowed to view links. Register or Login
Самый тормознутый способ выборки чего либо из таблиц это операция:
Код: You are not allowed to view links. Register or Login
SELECT * FROM mard.
ENDSELECT.
Однако исключать данный способ из применения не следует, так как он дает наименьшую нагрузку на сервер + минимальное использование памяти. Так что если таблица небольшая или выборка данных будет небольшой, то вполне можно обойтись и данной конструкцией, т.е. без операции SELECT * INTO TABLE и дальнейшим LOOP AT lt_tab. ENDLOOP.  Ну и как обычно смотрим трассировку запросов. Если эта конструкция является самой тормознутой в вашем приложении, то имеет смысл ее заменить, а иначе, нефиг заниматься оптимизацией так где и без нее все бегает  ;)

стоит задача оптимизации чужой программы.
она вся написана следующим образом:
Код: You are not allowed to view links. Register or Login
SELECT * FROM <таб1> WHERE <по какому-то индексу>.
 *пара экранов каких-то действий, включая  штук  5
   Select single *  from <таб2> where <ключ>
     *Из разных таблиц

И пару
        SELECT * FROM Z### WHERE  <field_key> = <значение>.
           * какие-то действия
        ENDSELECT. 
     * какие-то действия
   ENDSELECT.   

Как ее оптимизировать:
Например:
Код: You are not allowed to view links. Register or Login
  SELECT * FROM BSEG WHERE BUKRS = ZBUKRS
                           AND GJAHR = ZGJAHR
                           AND BELNR = itab-BELNR
                   AND ( ( SHKZG = '##' AND XNEGP = '##' ) OR
                       ( SHKZG = '@@' AND XNEGP = '@@' ) ).

        SELECT * FROM Z### WHERE  <field_key> = <значение>.
           * какие-то действия
        ENDSELECT. 
* какие-то действия
  ENDSELECT.   

Из светлых мыслей на эту тему замена select по bseg на:
Код: You are not allowed to view links. Register or Login
types: begin of t_bseg,
 только необходимые нам поля
      end of t_bseg.
data: i_bseg type standard table of t_bseg with header line.

clear i_bseg[].
      SELECT <только необходимые нам поля> FROM BSEG
              WHERE BUKRS = ZBUKRS
                AND GJAHR = ZGJAHR
                AND BELNR = itab-BELNR
                AND ( ( SHKZG = '##' AND XNEGP = '##' ) OR
                    ( SHKZG = '@@' AND XNEGP = '@@' ) ).
      loop at i_bseg.
        SELECT * FROM Z### WHERE  <field_key> = <значение>.
           * какие-то действия
        ENDSELECT. 
     * какие-то действия
      Endloop.

1. стоит ли заменять select endselect  на внутренние таблицы

2. при запуске подряд своего варианта и варианта программы, который бы до этого последний читает из буфера и результат замеров неверен. как сбрасывать буфер.


Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #139 : Сентябрь 02, 2009, 04:37:38 pm »
Существует 2 случая, когда использование конструкции SELECT/ENDSELECT оправдано:
1) Нехватка выделенной пользователю памяти, т.е. внутренняя таблица после выборки SELECT ... INTO TABLE ... превышает установленный базисниками объем памяти на Application server, в результате чего программа падает в дамп.
2) Очень маленький объем выбираемых данных (вспомогательных), если лень объявлять вн. таблицу и затем писать LOOP/ENDLOOP.

Для оптимизации циклов LOOP/ENDLOOP также рекомендуется использование FIELD-SYMBOLS если вн. таблица модифицируется.
« Последнее редактирование: Сентябрь 02, 2009, 04:43:51 pm от Dmitriy »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #140 : Сентябрь 02, 2009, 04:57:28 pm »
You are not allowed to view links. Register or Login
Для оптимизации циклов LOOP/ENDLOOP также рекомендуется использование FIELD-SYMBOLS если вн. таблица модифицируется.
Даже если она не модифицируется это будет быстрее...

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #141 : Сентябрь 08, 2009, 03:01:10 pm »
Для оптимизации некоторых select join   раньше использовала ракурсы БД по соответствующим таблицам (без фанатизма, конечно) . т.е. mkpf+mseg  или lips+likp. В местной системе обнаружила некое кол-во ракурсов на интересующую меня тему, но с разным набором полей.   Что оптимально: создать ракурс с большим кол-вом полей и использовать его в разных программах или держать несколько ракурсов под разные нужды. Как создание ракурса увеличивает нагрузку на БД.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #142 : Сентябрь 08, 2009, 03:47:35 pm »
You are not allowed to view links. Register or Login
Для оптимизации некоторых select join   раньше использовала ракурсы БД по соответствующим таблицам (без фанатизма, конечно) . т.е. mkpf+mseg  или lips+likp. В местной системе обнаружила некое кол-во ракурсов на интересующую меня тему, но с разным набором полей.   Что оптимально: создать ракурс с большим кол-вом полей и использовать его в разных программах или держать несколько ракурсов под разные нужды. Как создание ракурса увеличивает нагрузку на БД.
Оно конечно неплохо бы проверить, но мне кажется что несколько ракурсов с узкими наборами полей будут немного быстрее чем одни ракурс объединяющий все поля из нескольких ракурсов. С точки же нагрузки, ракурс это подготовленный запрос к базе данных и все, т.е. теоретически его вызов быстрее чем просто запрос, но в рамках SAP, на это можно забить. Вообще-то идея ракурсов была в том чтобы скрыть структуру базы данных от приложения, т.е. например если у вас изменилась схема базы данных (но не сами данные), то перестроив ракурс, приложение пользователя не заметит таких изменений и продолжит работу.

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #143 : Сентябрь 08, 2009, 04:22:55 pm »
Цитата: Uukrul  link=topic=174.msg4866#msg4866 date=1252414055
Вообще-то идея ракурсов была в том чтобы скрыть структуру базы данных от приложения, т.е. например если у вас изменилась схема базы данных (но не сами данные), то перестроив ракурс, приложение пользователя не заметит таких изменений и продолжит работу.

т.е. join  лучше обходить без использования ракурсов?

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #144 : Сентябрь 08, 2009, 05:12:42 pm »
You are not allowed to view links. Register or Login
т.е. join  лучше обходить без использования ракурсов?
Ну я не могу так сказать что лучше без ракурсов, просто ракурс для своей программы вещь как по мне не очень нужная и необходимая, но опять же смотря какая программа и кто ее пишет и сколько людей в этом участвуют. Выигрыша в производительности особого, да и не особого не будет.

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #145 : Сентябрь 09, 2009, 08:55:33 am »
есть код, в котором прописаны константы. как оптимально их убрать?
(как вариант  - завести внутреннюю таблицу , доступную избранному человеку или есть другой хороший способ)
 например:
Код: You are not allowed to view links. Register or Login
SELECT * FROM A596
          into table ia596
        WHERE KAPPL = '# ' AND
                KSCHL = '####' AND
                VKORG = '####' AND  PLTYP = '##'
                AND WAERK = '###' AND MATNR =  MATNR .

и просто в коде много всяких констанкт для исключений и пр.

вообще стоит ли их куда-нибудь в отдельное место перемещать?

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #146 : Сентябрь 09, 2009, 09:43:47 am »
You are not allowed to view links. Register or Login
есть код, в котором прописаны константы. как оптимально их убрать?
(как вариант  - завести внутреннюю таблицу , доступную избранному человеку или есть другой хороший способ)
 например:
Тут варианты сложно вам предложить, все зависит от задачи. Внутренняя таблица со значениями, ну это если у вас есть какие-то варианты работы, а если вариантов нет, т.е. у вас например вид документа всегда NB, тогда используйте константы в запросе и в принципе таблица не нужна, ну можно для наглядности завести в заголовке программы что-то типа:

CONSTANTS: cns_doc_type LIKE ekko-ebeln VALUE 'NB'

Ну и дальше в запросах использовать

... WHERE ebeln = cns_doc_type ...

Если документ измениться то всегда можно быстро изменить только значение константы. Таблицу для такого я бы использовал только в случае если отчет предполагается тиражировать в разные системы, разным клиентам.

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Репутация: +7/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #147 : Сентябрь 10, 2009, 12:10:25 pm »
You are not allowed to view links. Register or Login
Для оптимизации некоторых select join   раньше использовала ракурсы БД по соответствующим таблицам (без фанатизма, конечно) . т.е. mkpf+mseg  или lips+likp. В местной системе обнаружила некое кол-во ракурсов на интересующую меня тему, но с разным набором полей.   Что оптимально: создать ракурс с большим кол-вом полей и использовать его в разных программах или держать несколько ракурсов под разные нужды. Как создание ракурса увеличивает нагрузку на БД.
В результате практических наблюдений было выяснено, что для БД Oracle 9 выборка с одинаковым составом полей и условиями
1. по по MKPF+MSEG идет быстрее, чем по ракурсу WB2_V_MKPF_MSEG2
2.По likp+lips, vbak+vbap, ekko+ekpo идет медленнее, чем по соответствующим ракурсам.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #148 : Сентябрь 10, 2009, 12:12:25 pm »
You are not allowed to view links. Register or Login
1. по по MKPF+MSEG идет быстрее, чем по ракурсу WB2_V_MKPF_MSEG2
2.По likp+lips, vbak+vbap, ekko+ekpo идет медленнее, чем по соответствующим ракурсам.
А приблизительную разницу в скорости можно озвучить? Ну там 2-3% или 10%?

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Репутация: +7/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #149 : Сентябрь 10, 2009, 12:54:53 pm »
You are not allowed to view links. Register or Login
есть код, в котором прописаны константы. как оптимально их убрать?
(как вариант  - завести внутреннюю таблицу , доступную избранному человеку или есть другой хороший способ)
 например:
Код: You are not allowed to view links. Register or Login
SELECT * FROM A596
          into table ia596
        WHERE KAPPL = '# ' AND
                KSCHL = '####' AND
                VKORG = '####' AND  PLTYP = '##'
                AND WAERK = '###' AND MATNR =  MATNR .

и просто в коде много всяких констанкт для исключений и пр.

вообще стоит ли их куда-нибудь в отдельное место перемещать?
Орг.единицы лучше помещать на экран выбора отчета.
Виды условий и прочие поля, которые не должны меняться, лучше оформить константами, как сказал Uurkul

Sapforum.Biz

Re: Оптимизация ABAP-а
« Ответ #149 : Сентябрь 10, 2009, 12:54:53 pm »