+ Sapforum.Biz » Инструменты » ABAP - Инструментальные средстваТема:
|- Оптимизация ABAP-а




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

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

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Оптимизация ABAP-а
« : Май 16, 2008, 11:39:58 am »
Данное первое сообщение темы будет содержать обобщенный документ по оптимизации ABAP.

25.10.2010 - Первая версия документа 1.0

21.03.2011 - Изменения к оптимизации ABAP версия 1.1
Цитировать
Краткий список изменений:
  • Расширено описание пункта 8 – Определение внутренних таблиц, добавлен раздел 8.1 описывающий внутреннюю организацию и принципы выделения памяти системой для внутренних таблиц, так же описан параметр INITIAL SIZE используемый при объявлении внутренних таблиц в программах и общие рекомендации по его использованию.
  • Расширено описание пункта 8 – Определение внутренних таблиц, добавлен раздел 8.2 описывающий организацию индексов для внутренних таблиц и принципов их построения.
  • Расширено и изменено описание пункта 9, работа операторов REFRESH и FREE, в связи с получением более подробной информации по их функционированию.
  • Небольшие несущественные правки по тексту из-за внесенных выше изменений в раздел 8

21.09.2011 - Изменения к оптимизации ABAP версия 1.2
Цитировать
Краткий список изменений:
  • Расширено описание пункта 10 – Тестирование программ, дополнено описание использования транзакций расширенной проверки программы SLIN и анализатора код транзакции SCI / SCII.

PS: Предыдущие версии документа, пока удаляться не будут...
PPS: И кстати качать предыдущие версии документа не обязательно, хотя если вы хотите отследить как менялось мое и всех кто помогал мне писать документ, представление об оптимизации ABAP-а, ну тогда да, качайте  ;D
« Последнее редактирование: Сентябрь 21, 2011, 04:42:16 pm от Uukrul »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #1 : Май 16, 2008, 11:50:20 am »
В общем как не крутись а писать на ABAP приходится и очень часто это какие-то отчеты/обработки, которые гудят долго и жрут как памяти так и процессора много, в общем-то зубры и так знают как писать правильно, а вот молодЕжь такие перлы выдает, что иногда... хотя опять же если вспомнить прошлый век и свой первый отчет, то как говориться сам такой был. А поэтому предлагают тут поделиться примерами того как надо писать, чтобы или работало быстрее или памяти жрало меньше или.. ну в общем от ситуации.

PS: При этом не надо думать, что если что-то вам кажется общеизвестным, то это таки действительно общеизвестно  ;)

Работу запросов можно проверить через транзакцию ST05 включив трассировку запросов, однако в продуктиве можете отгрести за это, плюс не забываем что два чтения подряд одних и тех же данных, дадут разное время, так как во втором чтении данные скорее всего будут уже частично кешированы и соответственно прочитаются быстрее без изменения запроса.

Выборка данных из таблиц.

Код: You are not allowed to view links. Register or Login
DATA: lt_mara LIKE mara OCCURS 1 WITH HEADER LINE.

SELECT * INTO CORRESPONDIG FIELDS OF TABLE lt_mara
FROM mara
работает медленнее, чем
Код: You are not allowed to view links. Register or Login
SELECT * INTO TABLE lt_mara
FROM mara

В общем случае время выполнения первого запроса раза в 4 больше чем второй вариант.
« Последнее редактирование: Октябрь 25, 2010, 12:03:47 am от Uukrul »

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #2 : Май 16, 2008, 10:21:16 pm »
-- а что лутше select sum(xxx) from yyy или  ....

Цитировать
В общем как не крутись а писать на ABAP приходится и очень часто это какие-то отчеты/обработк
-- ну вижу (у нас) то знание абап - только вред - так тебя начинают грузить программерской работой, никагого росту, за деревьями леса не видиш ....
а рядок девушки  - абпапа нифига - так у них и задачи поинтересней,  и загрузка полутше ...

p.s. может тему начать ? Типа консультант без знания абап, хорошо или плохо ....
или "Насколько большой недостаток - знать абап"
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #3 : Май 16, 2008, 10:39:09 pm »
You are not allowed to view links. Register or Login
-- а что лучше select sum(xxx) from yyy или  ....
Для больших таблиц... ну скажем так, как отрабатывает операция SUM(XXX), при такой конструкции всегда подразумевается что есть группа записей с одинаковым значением одного поля и числовым полем, т.е.
Код: You are not allowed to view links. Register or Login
ID COST
------------
01 2
02 2
01 3
01 1
02 1
Без индекса к чему это ведет? А к тому что при операции суммирования, для каждого из значений ID в общем случае система пробегает по всей таблице, да кеширование и оптимизация при обработки SQL-запросов + индексы ускорят процесс, но в общем случае без индекса сумму для каждого ID можно получить выполнив для данного примера двойной проход по таблице, сначала для ID = 01, затем для ID = 02, а поэтому иногда может быть быстрее загрузить все во внутреннюю таблицу (если по памяти есть куда) и уже в памяти пройтись и просуммировать данные.

Опять же, все таки желательно смотреть на данные и уже из этого решать, что будет быстрее, т.е. запрос с суммированием или чтение SELECT * INTO TABLE xxx и уже затем LOOP AT lt_xxx. ENDLOOP. С суммированием в цикле.

Из личного опыта на большой таблице, >30 000 000 записей, но записи длинной порядка 100 байт, мне надо было посчитать не сумму, а количество записей с определенными ID. Так вот, операция SELECT COUNT(*) просто зависло и не вернулось из задумчивости, а вот вариант с выбором во внутреннюю таблицу и ручным суммированием, оказался очень даже быстрым и приемлимым. Индексы были построены и первый SELECT по плану запроса ходил как раз именно по индексу.

You are not allowed to view links. Register or Login
а рядок девушки  - абпапа нифига - так у них и задачи поинтересней,  и загрузка полутше ...
p.s. может тему начать ? Типа консультант без знания абап, хорошо или плохо ....
или "Насколько большой недостаток - знать абап"
Ну открывай, в другой ветке конечно  ::)

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #4 : Май 16, 2008, 11:10:29 pm »
Цитировать
уже в памяти пройтись и просуммировать данные.

Можеш пример в студию - простенький лиш бы понять смысл ?
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #5 : Май 17, 2008, 12:07:40 am »
You are not allowed to view links. Register or Login
Можеш пример в студию - простенький лиш бы понять смысл ?
Так а чего там пример то? Ну схематично, без системы типа так:
Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*& Report  YUUK_TEST
*&
*&---------------------------------------------------------------------*
*& В общем пример суммы свободного запаса по заводам для материалов
*&
*&---------------------------------------------------------------------*

REPORT  yuuk_test.
DATA: BEGIN OF lt_mard OCCURS 1.
        INCLUDE STRUCTURE mard.
DATA: index LIKE sy-tabix,
END OF lt_mard.
DATA: l_mard LIKE lt_mard.

*--------------------------
SELECT * INTO TABLE lt_mard
FROM mard
ORDER BY werks matnr.

* Опять же может окажется что SORT lt_mard BY werks matnr.
* может быстрее быть чем сортировка в запросе. Тут надо смотреть
* на память и объемы выборки...

LOOP AT lt_mard.
  ON CHANGE OF lt_mard-werks OR lt_mard-matnr.
    IF sy-tabix = 1.
      lt_mard-index = sy-tabix.
      l_mard = lt_mard.
    ELSE.
      MODIFY lt_mard FROM l_mard INDEX l_mard-index.
      lt_mard-index = sy-tabix.
      l_mard = lt_mard.
    ENDIF.
    CONTINUE.
  ENDON.
  l_mard-labst = l_mard-labst + lt_mard-labst.
ENDLOOP.
IF lt_mard-index = 0.
  l_mard-labst = l_mard-labst + lt_mard-labst.
ENDIF.
MODIFY lt_mard FROM l_mard INDEX l_mard-index.

DELETE lt_mard WHERE index = 0.

LOOP AT lt_mard.
  WRITE: / lt_mard-werks, lt_mard-lgort, lt_mard-matnr, lt_mard-labst.
ENDLOOP.
« Последнее редактирование: Май 17, 2008, 01:30:44 am от Uukrul »

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #6 : Май 17, 2008, 12:17:07 am »
Спасибо, что то такое я и думал ... только не мог вспомнить где видел подобное ...
Кажется аналогично делается отчет с суммами по группам с помощю WRITE ...

Вопрос: а зачем так
Цитировать
DELETE lt_mard WHERE index = 0.

Как я понял - для очистки строки (шапки таблицы) ...

А чего не clear ...  сейчас еще посмотрю ..ю
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #7 : Май 17, 2008, 12:39:00 am »
You are not allowed to view links. Register or Login
Вопрос: а зачем так
Как я понял - для очистки строки (шапки таблицы) ...
Нет, конечно... я убираю из памяти лишние запаси которые уже вошли в суммирование... т.е. пример есть пять записей на двух заводах одного материала:

1000 0088 M1 1
1000 0001 M1 2
1000 0088 M1 5
1000 0010 M1 3
1200 0001 M1 4

Так вот после выборки с сортировкой я получу, ну пусть такой порядок:
1000 0001 M1 2
1000 0088 M1 5
1000 0088 M1 1
1000 0010 M1 3
1200 0001 M1 4

После обработки будет такая ситуация во внутренней таблице:
1000 0001 M1 11 1
1000 0088 M1 5 0
1000 0088 M1 1 0
1000 0010 M1 3 0
1200 0001 M1 4 5

Затем я оператом DELETE грохну нулевые индексы и получу
1000 0001 M1 11 1
1200 0001 M1 4 5

На склад забиваем и того имею суммы запасов материала по заводу в целом.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #8 : Май 17, 2008, 12:48:08 am »
Поля в примере идут:
Завод, Склад, Код материала, Количество

В результирующей выборке, последнее число, это индекс записи внутренней таблицы... из примера программы это поле index.
« Последнее редактирование: Май 17, 2008, 01:19:13 am от Uukrul »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а (SELECT * ENDSELECT.)
« Ответ #9 : Май 19, 2008, 10:39:05 am »
Самый тормознутый способ выборки чего либо из таблиц это операция:
Код: You are not allowed to view links. Register or Login
SELECT * FROM mard.
ENDSELECT.
Однако исключать данный способ из применения не следует, так как он дает наименьшую нагрузку на сервер + минимальное использование памяти. Так что если таблица небольшая или выборка данных будет небольшой, то вполне можно обойтись и данной конструкцией, т.е. без операции SELECT * INTO TABLE и дальнейшим LOOP AT lt_tab. ENDLOOP.  Ну и как обычно смотрим трассировку запросов. Если эта конструкция является самой тормознутой в вашем приложении, то имеет смысл ее заменить, а иначе, нефиг заниматься оптимизацией так где и без нее все бегает  ;)
« Последнее редактирование: Май 19, 2008, 10:40:50 am от Uukrul »

Оффлайн №1

  • Administrator
  • Jr. Member
  • *****
  • Сообщений: 632
  • Reputation Power: 1
  • №1 has no influence.
  • Пол: Мужской
  • Судьбы я вызов принимаю прямым пожатием руки
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #10 : Май 20, 2008, 09:11:11 am »
You are not allowed to view links. Register or Login
PS: При этом не надо думать, что если что-то вам кажется общеизвестным, то это таки действительно общеизвестно  ;)
Добавлю свои пять копеек... про конструкцию SELECT .... FOR ALL ENTRIES IN itab
Если itab пустая, то будет перебор всей таблицы, т.е. FULL SCAN. Поэтому надо до оператора поставить проверку на непустоту.
ЗЫ. Непонятно одно - почему САПы не воткнули такую проверку на уровне ядра? Жить было бы куда проще.
Мой You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #11 : Июнь 22, 2008, 08:48:15 pm »
Ну поехали дальше (Опять же из обще известного, так сказать примеры из документации SAP, руки до которой почему-то у многих не доходят):

Требуется проверить на существование записи в таблице БД по определенному не полному ключу. Варианта тут есть два, первый делаем SELECT с нужными ключами и внутри EXIT.
Код: You are not allowed to view links. Register or Login
SELECT * FROM <table> INTO <work_line>
    WHERE <Field> = 'xxx'.
  EXIT.
ENDSELECT.
или
Код: You are not allowed to view links. Register or Login
SELECT * FROM <table> INTO <work_line>
  UP TO 1 ROWS
  WHERE <Field> = 'xxx'.
ENDSELECT.
Так вот второй вариант с UP TO 1 ROWS (кстати многие похоже о такой конструкции даже не подозревают), работает так раз в 6-7 быстрее, чем первый вариант.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #12 : Июнь 22, 2008, 09:05:26 pm »
Ну и дальше возвращаясь к теме агрегирующих функций, собственно с чего началась данная тема, вообще-то документация советует использовать именно функции агрегации типа MAX, MIN, SUM и т.д. вместо использования построчного подсчета значений. В справке приведены такие два примера, по поиску максимального значения:

Код: You are not allowed to view links. Register or Login
DATA: MAX_MSGNR type t100-msgnr.
MAX_MSGNR = '000'.
SELECT * FROM T100 INTO T100_WA
  WHERE SPRSL = 'D' AND
        ARBGB = '00'.
  CHECK: T100_WA-MSGNR > MAX_MSGNR.
  MAX_MSGNR = T100_WA-MSGNR.
ENDSELECT.
и
Код: You are not allowed to view links. Register or Login
DATA: MAX_MSGNR type t100-msgnr.
SELECT MAX( MSGNR ) FROM T100 INTO max_msgnr
  WHERE SPRSL = 'D' AND
        ARBGB = '00'.
Разница в выполнении этих двух примеров где-то раз в 100, т.е. первый пример будет работать ну на много дольше. Однако если вернуться к конструкции UP TO 1 ROWS, то добавив конструкцию ORDER BY с соответсующей сортировке по убыванию  для MAX или по возрастанию для MIN получим время выполнения такое же как и в примере с агрегирующей функцией.  Пример ниже:
Код: You are not allowed to view links. Register or Login
DATA: MAX_MSGNR type t100-msgnr.
MAX_MSGNR = '000'.

SELECT * FROM T100 INTO T100_WA UP TO 1 ROWS
  WHERE SPRSL = 'D' AND
        ARBGB = '00'
ORDER BY MSGNR DESCENDING.
ENDSELECT.
В общем замеры времени выполнения для примера 2 и 3 показали 81 и 85 миллисекунд (для примера 1, кстати было 7360), т.е.  для функций MIN и MAX, можно использовать альтернативу UP TO 1 ROWS совместно с ORDER BY. Ну а сумма и среднее значение, это уже по обстоятельствам надо смотреть  ;)

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #13 : Июнь 22, 2008, 09:27:11 pm »
По поводу данных которые мы выбираем. В общем не следует без всякой необходимости использовать * в операторе SELECT, если вас интересует значение одного или пары полей из сотни, которые входят в таблицу. Пример из справки:
Код: You are not allowed to view links. Register or Login
SELECT * FROM DD01L INTO DD01L_WA
  WHERE DOMNAME LIKE 'CHAR%'
        AND AS4LOCAL = 'A'.
ENDSELECT.
и
Код: You are not allowed to view links. Register or Login
SELECT DOMNAME FROM DD01L
  INTO DD01L_WA-DOMNAME
  WHERE DOMNAME LIKE 'CHAR%'
        AND AS4LOCAL = 'A'.
ENDSELECT.
В первом случае  получаем время выполнения порядка 8285 миллисекунд, а во втором случае 2596. Ну т.е. где-то раза в 4.

Однако теперь, зная что и как выбирать и возвращаясь к предыдущему сообщению, по поводу агрегирующих функций, пример 3 можно еще дожать следующим образом:
Код: You are not allowed to view links. Register or Login
DATA: MAX_MSGNR type t100-msgnr.

SELECT MSGNR FROM T100 INTO (MAX_MSGNR) UP TO 1 ROWS
  WHERE SPRSL = 'D' AND
        ARBGB = '00'
ORDER BY MSGNR DESCENDING.
ENDSELECT.
т.е. задав выбор только поля по которому требуется получить максимальное значение и после этого выполнение станет практически такое же как и с использованием функции MAX, у меня получилось после нескольких прогонов разница в 1-2 миллисекунды. В общем так как не ассемблер, то на эти миллисекунды уже можно и забить.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #14 : Июнь 22, 2008, 09:37:56 pm »
Если имеются часто изменяемые данные в таблицах, например это очереди в таблице сообщений, то читают такие данные обычно с выключением буфера. Однако не следует этим перебарщивать, а то скорость обработки ясное дело будет печальной. Примеры из справки:
Код: You are not allowed to view links. Register or Login
SELECT SINGLE * FROM T100 INTO T100_WA
  BYPASSING BUFFER
  WHERE     SPRSL = 'D'
        AND ARBGB = '00'
        AND MSGNR = '999'.
и
Код: You are not allowed to view links. Register or Login
SELECT SINGLE * FROM T100  INTO T100_WA
  WHERE     SPRSL = 'D'
        AND ARBGB = '00'
        AND MSGNR = '999'.
В общем случае скорость для первого запроса ~80 миллисекунд, а во втором порядка 5 миллисекунд.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #15 : Июнь 22, 2008, 09:49:02 pm »
Возвращаясь к вариантам выбора записей из таблиц и их последующей обработке есть два варианта, выбрать все и затем пройтись по внутренней таблице или же обрабатывать данные по мере из выбора внутри конструкции SELECT ENDSELECT. В общем случае быстрее будет выбрать данные во внутреннюю таблицу и затем обработать выборку. Примеры:
Код: You are not allowed to view links. Register or Login
SELECT * FROM T006
  INTO TABLE X006.
LOOP AT X006 INTO X006_WA.
ENDLOOP.
и
Код: You are not allowed to view links. Register or Login
SELECT * FROM T006 INTO X006_WA.
ENDSELECT.
Первый вариант работает быстрее в среднем в полтора-два раза чем вариант два. По замерам время исполнения в среднем колебалось 60 и 110 миллисекунд.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #16 : Июнь 22, 2008, 10:01:11 pm »
Вложенные SELECT или SELECT с JOIN. Я вообще-то предпочитаю  использовать конструкцию JOIN хотя как показывают замеры, первый вариант работает быстрее. В общем случае констуркция
Код: You are not allowed to view links. Register or Login
SELECT * FROM SPFLI INTO SPFLI_WA.
  SELECT * FROM SFLIGHT INTO SFLIGHT_WA
      WHERE CARRID = SPFLI_WA-CARRID
        AND CONNID = SPFLI_WA-CONNID.
  ENDSELECT.
ENDSELECT.
была быстрее чем конструкция
Код: You are not allowed to view links. Register or Login
SELECT * INTO WA
    FROM SPFLI AS P JOIN SFLIGHT AS F
      ON P~CARRID = F~CARRID AND
         P~CONNID = F~CONNID.
ENDSELECT.
По времени выполнения  получается 6100 миллисекунд против 8300 во втором случае. Но пять же, требуется смотреть на таблицы из которых выбираются данные и на объем который требуется выбрать.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #17 : Июнь 22, 2008, 10:10:18 pm »
Подзапросы или FOR ALL ENTRIES IN T_SPFLI с использованием двух операторов SELECT. Исходя из примера по справке, существуют следующие варианты выборки:
Код: You are not allowed to view links. Register or Login
SELECT * FROM SPFLI
  INTO TABLE T_SPFLI
  WHERE CITYFROM = 'FRANKFURT'
    AND CITYTO = 'NEW YORK'.
SELECT * FROM SFLIGHT AS F
    INTO SFLIGHT_WA
    FOR ALL ENTRIES IN T_SPFLI
    WHERE SEATSOCC < F~SEATSMAX
      AND CARRID = T_SPFLI-CARRID
      AND CONNID = T_SPFLI-CONNID
      AND FLDATE BETWEEN '19990101' AND '19990331'.
ENDSELECT.
и
Код: You are not allowed to view links. Register or Login
SELECT * FROM SFLIGHT AS F INTO SFLIGHT_WA
    WHERE SEATSOCC < F~SEATSMAX
      AND EXISTS ( SELECT * FROM SPFLI
                     WHERE CARRID = F~CARRID
                       AND CONNID = F~CONNID
                       AND CITYFROM = 'FRANKFURT'
                       AND CITYTO = 'NEW YORK' )
      AND FLDATE BETWEEN '19990101' AND '19990331'.
ENDSELECT.
В общем случае второй вариант работает быстрее, 210 простив 130 миллисекунд, чем использование FOR ALL ENTRIES.  Кстати по поводу FOR ALL ENTRIES, не забываем, что если табличка T_SPFLI, будет пустой, то как уже писал №1, будет полный проход таблицы.

Оффлайн bdmalex

  • Newbie
  • *
  • Сообщений: 79
  • Reputation Power: 0
  • bdmalex has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Качественная телефония по разумной цене...
Re: Оптимизация ABAP-а
« Ответ #18 : Июнь 27, 2008, 07:07:17 pm »
ВВерну свои 5 копеек...

Начиная с какой-то версии 4.x(точно не скажу) - есть прекрасный инструмент: Сode Inspector(Код инспектор)
...
IMHO - помогает бороться с ошибками(явными и не очень) ЛЮБЫХ абаперов...:)...
...
А вообще - инфа на курсах ADM315(немного) и BC490....

Оффлайн №1

  • Administrator
  • Jr. Member
  • *****
  • Сообщений: 632
  • Reputation Power: 1
  • №1 has no influence.
  • Пол: Мужской
  • Судьбы я вызов принимаю прямым пожатием руки
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #19 : Июнь 27, 2008, 08:04:31 pm »
You are not allowed to view links. Register or Login
прекрасный инструмент: Сode Inspector(Код инспектор)
Тада свой полтинник... от избыточных выборок по базе это чудо бессильно 8)
Мой You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #20 : Июль 01, 2008, 05:52:49 pm »
You are not allowed to view links. Register or Login
Начиная с какой-то версии 4.x(точно не скажу) - есть прекрасный инструмент: Сode Inspector(Код инспектор)
Это транзакция SLIN имеется в виду?

Оффлайн №1

  • Administrator
  • Jr. Member
  • *****
  • Сообщений: 632
  • Reputation Power: 1
  • №1 has no influence.
  • Пол: Мужской
  • Судьбы я вызов принимаю прямым пожатием руки
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #21 : Июль 01, 2008, 06:09:49 pm »
You are not allowed to view links. Register or Login
Это транзакция SLIN имеется в виду?
SCI
Мой You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #22 : Июль 01, 2008, 06:38:58 pm »
You are not allowed to view links. Register or Login
SCI
Чего-то в 4.6С сказало нет такой буквы...

Оффлайн №1

  • Administrator
  • Jr. Member
  • *****
  • Сообщений: 632
  • Reputation Power: 1
  • №1 has no influence.
  • Пол: Мужской
  • Судьбы я вызов принимаю прямым пожатием руки
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #23 : Июль 01, 2008, 07:43:45 pm »
А в 4.6С надо отдельным транспортом это тащить - есть нота
Мой You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #24 : Июль 02, 2008, 09:36:22 am »
You are not allowed to view links. Register or Login
А в 4.6С надо отдельным транспортом это тащить - есть нота
А номерок ноты? А то я что-то не нашел, о разных исправлениях ошибок есть... а саму программку где тянуть не находиться...

Оффлайн №1

  • Administrator
  • Jr. Member
  • *****
  • Сообщений: 632
  • Reputation Power: 1
  • №1 has no influence.
  • Пол: Мужской
  • Судьбы я вызов принимаю прямым пожатием руки
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #25 : Июль 02, 2008, 09:52:12 am »
You are not allowed to view links. Register or Login
А номерок ноты? А то я что-то не нашел, о разных исправлениях ошибок есть... а саму программку где тянуть не находиться...
Ну может убрали. Поищи на ftp у сапов транспорт K900427.XB4  (EILENBERGER    CI Downport 3.Version) - 2003 год.
У себя не нашел - после апгрейда все старые вычистил из transdir. Осталось только в истории импорта
« Последнее редактирование: Июль 02, 2008, 09:58:37 am от №1 »
Мой You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #26 : Июль 07, 2008, 10:34:00 am »
COMMIT WORK - Однако при массовых вставках не надо использовать эту конструкцию после каждой вставки новой записи. Опять же на надо заливать все и делать один общий COMMIT. Оптимальным обычно является фиксация обновления/вставки через 500-1000 обработанных записей. К сожалению это правило часто не работает с функциями BAPI, которые не являются повторно входимыми, поэтому там ничего не поделаешь, но после каждого вызова функции нужно делать COMMIT. Опять же если можно сделать фиксацию на несколько разных вызовов BAPI, то нужно пользоваться такой возможностью.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #27 : Август 01, 2008, 11:20:05 am »
В продолжении темы о COMMIT WORK и BAPI, в общем есть такая функция BAPI_FIXEDASSET_CHANGE - Изменение карточек ОС, написано ничего так, позволяет выполнять COMMIT после обработки нескольких карточек, так вот надо было изменить порядка ~20 000 записей, в программке случайно сбился счетчик и в итоге COMMIT вызвался только после обновления всех записей. К чему это привело, ну во-первых, каждая следующая запись карточки ОС, обновлялась все медленнее и медленнее, так как рос лог транзакции. В общей сумме оно выросло до 400 Мб и тут пришел COMMIT, ну конца этого процесса я не дождался, так как 3 часа висения на этой строчке и было принято решение, а ну его нафиг. В общем подрихтовали программку, COMMIT через 200 записей и в итоге ~20 000 карточек проскочило минут за 40.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #28 : Август 06, 2008, 12:08:54 pm »
И еще в продолжении COMMIT WORK-а, в общем при массовой обработке объектов базы или проводке документов возникает иногда ситуация, что нужно или подождать пока объект станет доступен для последующей обработки или пока документ появится в базе данных. Делать задержку в секундах после каждого COMMIT-а, не только не гуманно, но и желательно отрывать руки за такой код, так как один документ + задержка в секунду, это еще куда не шло, но 500 000 объектов + 1 секудна, это месяц работы программы, хотя без этой задержки, записи к примеру льются со скоростью 15-20 объектов в секунду. Поэтому как общая рекомендация после обновления для проверки существования объекта использовать или объекты блокирования объекта или модули чтения таблицы блокировок из примера: You are not allowed to view links. Register or Login, Во втором случае, проверяем есть ли наш объект в записях блокирования и если есть то ждем, если нет, тогда можем считать что объект уже прошел все обновления и существует в базе данных. А вот для использования объектов блокирования, сначала нужно посмотреть какой объект используется. Например возьмем карточки ОС. Самое просто это зайти в изменения любой карточки ОС, а после этого в другом окне запустить транзакцию SM12. Если у вас больше ничего в других окнах не открыто, то скорее всего там будет одна запись блокирования. Делаете двойной клик на этой записи и получаете детальную информацию по объекту блокирования, рисунок SM12V.png. Нас интересует объект выделенный рамкой, это и есть объект блокировки. Теперь нужно пойти в транзакцию SE11, чтобы узнать функциональные модули управления блокировкой. Вводим полученный объект блокирования, как на рисунке SE11-1.png, жмем просмотр объекта и попадаем в экран просмотра SE11-2.png и там по меню "Перейти к" - "Модули блокировки" и получаем две функции, одна для блокирования объекта основное средство, а другая для деблокирования. Ну а дальше дело техники. После вызова функции создания/обновления карточки ОС, если параметр BAPIRET2 не содержит ошибок, т.е. например создание карточки прошло успешно, то далее вставляем такой код:
Код: You are not allowed to view links. Register or Login
CALL FUNCTION 'ENQUEUE_EANLA'
     EXPORTING
          bukrs          = l_bukrs
          anln1          = l_anln1
          anln2          = l_anln2
          _wait          = 'X'
     EXCEPTIONS
          foreign_lock   = 1
          system_failure = 2
          OTHERS         = 3.
IF sy-subrc = 0.
* Запись находится в БД, блокировку можно снять и бежать дальше
  CALL FUNCTION 'DEQUEUE_EANLA'
       EXPORTING
            bukrs = l_bukrs
            anln1 = l_anln2
            anln2 = l_anln3.
ENDIF.
Т.е. система будет пытаться поставить блокировку на созданный/изменный объект, если блокировка установилась, то мы ее тут же снимаем и идем обрабатывать следующие данные, так как запись точно уже существует в БД.

Оффлайн bdmalex

  • Newbie
  • *
  • Сообщений: 79
  • Reputation Power: 0
  • bdmalex has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Качественная телефония по разумной цене...
Re: Оптимизация ABAP-а
« Ответ #29 : Август 21, 2008, 05:11:40 pm »
You are not allowed to view links. Register or Login
А номерок ноты? А то я что-то не нашел, о разных исправлениях ошибок есть... а саму программку где тянуть не находиться...

У меня нет 4.x....Но в блокноте записан номер ноты: You are not allowed to view links. Register or Login ...подходит ??

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #30 : Август 21, 2008, 05:35:33 pm »
You are not allowed to view links. Register or Login
...подходит ??
Подходит конечно  ;)

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #31 : Октябрь 09, 2008, 10:25:00 pm »
Не совсем может и оптимизация, но точно про ABAP будет  ;)

Сегодня тут протормозил при вставке записей в свою Z-таблицу. Короче в таблице уже есть некоторое количество данных. Вставляю программно еще парочку, первая запись вставляется, вторая нет, потом еще пара других без проблем заливаются в таблицу. Вставку делаю оператором MODIFY <tab_name>, в цикле. Тупо не мог понять почему оно не отрабатывает, при этом код ошибки 4 (вставка дублирующей записи и это при MODIFY). Короче оказалось что то ли рука дрогнула вчера поздно уже было, то ли еще чего, но вместо просто дополнительного индекса, почему-то создал уникальный индекс. На несчастье, по полю уникального индекса, как раз данные были уникальные и этот индекс создался в тот момент без вопросов,, а я как-то не обратил внимание. Короче проблемы начались утром следующего дня ::) Однако, потребовался перекур и тупо смотрение в код, с мыслью то ли лыжи не едут, то ли снега просто еще нет.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а (Хинты)
« Ответ #32 : Октябрь 23, 2008, 10:40:26 am »
В общем-то иногда нужно в запросе сказать какой индекс использовать при запросе из базы данных. Админы конечно этого сильно не любят, типа оптимизатор должен сам решать как делать выборку +  админ если что сам порулит этим процессом, а вот при жесткой привязке индекса этого уже не сделаешь. В общем на усмотрение разработчика. Пример для оракловой базы. Будет использоваться индекс "T".
Код: You are not allowed to view links. Register or Login
   SELECT * UP TO 10 ROWS FROM mara
                          WHERE MTART = 'HAWA' AND
                                MATKL = '100'
                          %_HINTS ORACLE 'index(mara"T")'.

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #33 : Ноябрь 13, 2008, 07:18:15 pm »
По поводу вложенных запросов.
 
Код: You are not allowed to view links. Register or Login
SELECT mseg~mblnr mseg~mjahr mseg~zeile mseg~bwart mseg~xauto
         mseg~matnr mseg~werks mseg~lgort mseg~insmk mseg~shkzg
         mseg~dmbtr mseg~bwtar mseg~menge mseg~bustm mkpf~budat
    INTO TABLE lt_mseg
    FROM mseg JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND
                           mkpf~mjahr = mseg~mjahr
    WHERE mseg~matnr IN s_matnr
      AND mseg~werks IN s_werks
      AND mseg~lgort IN s_lgort
      AND mseg~sobkz = ' '
      AND mseg~smbln = ' '
      AND mkpf~budat IN r_date
      AND NOT EXISTS ( SELECT * FROM *mseg WHERE smbln = mseg~mblnr
                                             AND sjahr = mseg~mjahr
                                             AND smblp = mseg~zeile ).

Известно, что при больших объемах данных, вложенные запросы существенно замедляют быстродействие основного. В приведенной выше выборке вложенный запрос отсекает сторнированные позиции д-тов движений материалов. При большом числе выбираемых позиций (>1000000) данная конструкция в плане быстродействия оказалась более предпочтительней, чем обычный запрос, с последующим отсечением сторно в цикле по полученным записям. Поскольку в позции прямого документа в таблице MSEG нет ссылки на сторнирующий, то в цикле по lt_mseg исключение сторно приходится делать единичной выборкой из MSEG (SELECT SINGLE ...) и при положительном ее результате (sy-subrc = 0) - удаление позиции из вн. таблицы. Единичная выборка в цикле (даже по ключу) и переиндексация lt_mseg при удалении из нее записи оказались неприемлемыми (дамп по таймауту). Вот такой вот частный случай.     
« Последнее редактирование: Ноябрь 13, 2008, 07:19:59 pm от Dmitriy »

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #34 : Ноябрь 14, 2008, 12:06:09 pm »
Использование вспомогательных вн. таблиц с оператором READ ... BINARY SEARCH.
Необходимое и достаточное условие: устраивающий объем оперативной памяти, выделенной пользователю на сервере приложений (отсутствие дампа по переполнению).
В приведенном выше посте мы получили вн. таблицу lt_mseg с позициями д-тов движений материалов. Как оптимальнее добавить краткие наименования ЕИ материала (в эту же или итоговую таблицу)? Перед основным запросом делаем ряд доп. выборок, в нашем случае, например:
Код: You are not allowed to view links. Register or Login
* Единицы измерения
  SELECT mara~matnr t006a~mseh3 INTO TABLE gt_meins FROM mara
                       JOIN t006a ON mara~meins = t006a~msehi
                                  WHERE mara~matnr IN s_matnr
                    AND t006a~spras = sy-langu ORDER BY mara~matnr.
Затем, в цикле по lt_mseg вместо SELECT SINGLE ... мы пользуемся оператором READ TABLE gt_meins WITH KEY matnr = <fs_mseg>-matnr BINARY SEARCH (используется LOOP AT lt_mseg ASSIGNING <fs_mseg>). Т.о. быстродействие цикла можно увеличить на 10-15%, поскольку в течение несколькомиллионных итераций мы обращаемся не к серверу БД, а уже исключительно к серверу приложений.
Примечание: для корректной работы BINARY SEARCH вн. таблица (в нашем случае - gt_meins) должна быть отсортирована по ключу, который используем в операторе READ (см. help).   
« Последнее редактирование: Ноябрь 14, 2008, 12:08:11 pm от Dmitriy »

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #35 : Ноябрь 14, 2008, 12:31:11 pm »
В догонку к примечаниям: перед оператором READ ... в том же цикле по lt_mseg ЕИ и количества материалов были трансформированы в "стандартные" (из пачек в "ШТ." в данном случае) посредством соотв. ФМ.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #36 : Ноябрь 15, 2008, 08:57:49 pm »
You are not allowed to view links. Register or Login
В догонку к примечаниям: перед оператором READ ... в том же цикле по lt_mseg ЕИ и количества материалов были трансформированы в "стандартные" (из пачек в "ШТ." в данном случае) посредством соотв. ФМ.
Соответствующий ФМ описан тут: You are not allowed to view links. Register or Login  ;)

Оффлайн NachDenken

  • Newbie
  • *
  • Сообщений: 158
  • Reputation Power: 0
  • NachDenken has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #37 : Декабрь 08, 2008, 02:49:37 pm »
Есть большое сомнение, что 2 выборка по mseg в таком виде будет работать быстро, недавно как раз был случай, что такая именно конструкция работала _очень_ медленно, не смотря на то, что и индекс по сторно был, и выборка шла по номеру документа+год материала (по ключу),
спасло: дополнительные условия на mseg поля ebeln ebelp

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #38 : Декабрь 08, 2008, 03:03:09 pm »
You are not allowed to view links. Register or Login
Есть большое сомнение, что 2 выборка по mseg в таком виде будет работать быстро, недавно как раз был случай, что такая именно конструкция работала _очень_ медленно, не смотря на то, что и индекс по сторно был, и выборка шла по номеру документа+год материала (по ключу),
спасло: дополнительные условия на mseg поля ebeln ebelp
Не вопрос, замеры нам помогут. Нет под рукой системы! :(
Ну на более, чем миллион записей выборка "сыграла".
« Последнее редактирование: Январь 26, 2010, 12:20:20 am от Dmitriy »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #39 : Декабрь 08, 2008, 03:16:23 pm »
You are not allowed to view links. Register or Login
Есть большое сомнение, что 2 выборка по mseg в таком виде будет работать быстро, недавно как раз был случай, что такая именно
Это имелось в виду конструкция с:
Код: You are not allowed to view links. Register or Login
AND NOT EXISTS ( SELECT * FROM *mseg WHERE smbln = mseg~mblnr
                                             AND sjahr = mseg~mjahr
                                             AND smblp = mseg~zeile ).

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #40 : Декабрь 08, 2008, 03:18:28 pm »
Да, похоже именно эта. MKPF join MSEG вообще темная тема, индексы нужно делать, иначе...
« Последнее редактирование: Декабрь 08, 2008, 03:21:16 pm от Dmitriy »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #41 : Декабрь 08, 2008, 03:26:05 pm »
You are not allowed to view links. Register or Login
Да, похоже именно эта. MKPF join MSEG вообще темная тема, индексы нужно делать, иначе...
Ну например можно ораклово (ну если там оракл) таблицу вынести на отдельный раздел, на отдельном диске... и уже это добавит производительности в выборке. А вообще подселекты, вещь тоже темная и как их оптимизатор разрулит, нужно смотреть в каждом отдельном случае.

Оффлайн NachDenken

  • Newbie
  • *
  • Сообщений: 158
  • Reputation Power: 0
  • NachDenken has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #42 : Декабрь 08, 2008, 05:10:06 pm »
в пред случае имелось в виду двойная выборка по mseg, про оптимизацию верно, каждый своим опытным путем.
вот тут недавно было, про то, что сначало сделать выборку (select) а потом по внут таблице Read table ...binary , сама сортировать по ключам нужно, а это иногда тоже время требует, если данных много.
вот и призадумаешься, может лучше все таки _дернуть_ из базы select single по ключам чем read table

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #43 : Декабрь 08, 2008, 05:34:23 pm »
You are not allowed to view links. Register or Login
вот и призадумаешься, может лучше все таки _дернуть_ из базы select single по ключам чем read table
Ну тут в каждом случае надо смотреть отдельно... если памяти хватает, то врядли READ SINGLE будет быстрее, хотя конечно если там одно и тоже читается, т.е. например для 100 записей реально будет только 10 различных чтений данных, тогда скорее всего что данные при SELECT будут браться из кэша, что возможно будет быстрее чем выборка с последующей сотрировкой... короче в каждом случае надо смотреть на данные и сервер на котором все это работает.

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #44 : Декабрь 09, 2008, 03:57:26 am »
Да и вообще, всего не предугадаешь и всего знать невозможно, оно же по крупицам собирается, с опытом приходит. Мой добрый совет: если это возможно, то лучше прийти к базисникам, познакомиться/поговорить с мужиками, глядишь и помогут, главное не стесняться. ;) Было много случаев, например, когда "перепахивали" систему, вычислили проги, которые пару раз запустили за год, и все... Базис просто инфу дал, когда попросили. С теми же индексами... (с): Опыт сын ошибок трудных. :)     

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #45 : Декабрь 09, 2008, 04:07:41 am »
You are not allowed to view links. Register or Login
Есть большое сомнение, что 2 выборка по mseg в таком виде будет работать быстро, недавно как раз был случай, что такая именно конструкция работала _очень_ медленно, не смотря на то, что и индекс по сторно был, и выборка шла по номеру документа+год материала (по ключу),
спасло: дополнительные условия на mseg поля ebeln ebelp
У меня вообще долго крутился отчет, самый "энергоемкий" был, т.к. начальству хотелось "всю информацию" сначала в общем виде, а потом с детализацией в гриде. Миллионы записей - это что-то))) А со сторно разрулилось по-другому: разнесли по видам движений. На использовании упомянутой мной конструкции не настаиваю, но реально замеры показали, что она в моем случае работала быстрее. Хотя тут больше скажут MM-щики, я таки ABAP-ер и насколько понимаю, часть видов движений стандартна, но можно свои настроить. ;)  
« Последнее редактирование: Декабрь 09, 2008, 04:12:09 am от Dmitriy »

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Использование внутренних таблиц типа SORTED
« Ответ #46 : Январь 13, 2009, 03:29:33 pm »
Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*& Report  YXXX
*&---------------------------------------------------------------------*
*& Данный отчет - тестовый, для отладки всевозможных ситуаций
*&---------------------------------------------------------------------*
REPORT yxxx.
* Для заголовков
TYPES: BEGIN OF t1,
  bukrs TYPE bukrs,
  belnr TYPE belnr_d,
  gjahr TYPE gjahr,
* Здесь еще какие-нибудь наши поля
* ................,
  END OF t1.
* Для позиций
TYPES: BEGIN OF t2,
  bukrs TYPE bukrs,
  belnr TYPE belnr_d,
  gjahr TYPE gjahr,
  buzei TYPE buzei,
  buzid TYPE buzid,
* Здесь еще какие-нибудь наши поля
* ................,
  sgtxt TYPE sgtxt,
  END OF t2.
* Таб. заг., ее в нашем случае можно было бы объявить произвольно
DATA: gt_h TYPE SORTED TABLE OF t1
      WITH UNIQUE KEY bukrs belnr gjahr. " Заголовки
* Таб. позиций, объявляем именно так
DATA: gt_p TYPE SORTED TABLE OF t2
      WITH UNIQUE KEY bukrs belnr gjahr buzei. " Позиции
* Рабочую область таблицы позиций объявляем так для иллюстрации примера
* классического использования оператора ASSIGN, можно найти в примерах:
* SE80-)>Среда-)>Примеры-)>Примеры производительности-)>Internal tables
* -)>Using the Assigning Comand. Для таблицы заголовков можно было бы
* обойтись обычной Work area:
* DATA: gs_h LIKE LINE OF gt_h.
FIELD-SYMBOLS: <gs_h> LIKE LINE OF gt_h,
               <gs_p> LIKE LINE OF gt_p.
*&---------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM selection. " Выбор данных

  PERFORM processing. " Обработка данных

END-OF-SELECTION.

* Далее - процедура изменения FI-документов в БД

*&---------------------------------------------------------------------*
*&      Form  SELECTION
*&---------------------------------------------------------------------*
FORM selection.
* Выбор из БД
ENDFORM.                    " SELECTION
*&---------------------------------------------------------------------*
*&      Form  PROCESSING
*&---------------------------------------------------------------------*
FORM processing.

  LOOP AT gt_h INTO <gs_h>.
* { Здесь какая-либо обработка
* ..........................
* Конец обработки }
    LOOP AT gt_p ASSIGNING <gs_p> WHERE bukrs = <gs_h>-bukrs
                                                      AND belnr = <gs_h>-belnr
                                                      AND gjahr = <gs_h>-gjahr.
* { Здесь какая-либо обработка
* ..........................
* Конец обработки }
      IF <gs_p>-buzid NE space. " Позиция контрагента
* Замена текста позиции (MODIFY строки вн.табл.)
        <gs_p>-sgtxt = 'Добавлено из старой системы'.
      ENDIF.
    ENDLOOP.
  ENDLOOP.

ENDFORM.                    " PROCESSING
В данном случае, при использовании вложенного цикла, происходит уменьшение числа итераций засчет соответствующего объявления вн. таблицы позиций. В противном случае, не смотря на условие WHERE, происходит полный перебор всех записей таблицы gt_p.
« Последнее редактирование: Январь 13, 2009, 05:11:32 pm от Dmitriy »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а (Грабли с SELECT)
« Ответ #47 : Январь 22, 2009, 10:41:06 pm »
В общем не совсем оптимизация, но скажем так грабли с небольшой ручкой, проявились на системе 4.6 операционка HP-UX версии 11.31, база Oracle версия 10.хх с хвостиком, на системе где Oracle 9.xx с хвостиком такого эффекта не наблюдалось, так что скорее всего это похоже грабли от оракловой базы. И так что и как было.

1. Есть своя Z-табличка, есть свои программки, которые туда чего-то пишут, а другие чего-то читают. В какой-то момент надо было добавить поле, тип поля NUMC. Добавил поле, к примеру R_FILE TYPE MY_DATA, где в словаре определено как MY_DATA(5) TYPE n. Ясное дело таблицу переактивировал, через утилиту базы данных сделал адаптацию с сохранением значений.
2. Написал программку, которая для некоторых записей из таблички заполнила новое поле R_FILE нужными значениями.
3. Перенес все это дело в продуктивную систему, там тоже для части полей заполнил данные в новое поле.

А вот дальше началось интересное, запрос вида:
SELECT * INTO lt_my_table FROM my_table
WHERE R_FILE = space.
На выходе получаю SY-SUBRC = 4.
==========
SELECT * INTO lt_my_table FROM my_table
WHERE R_FILE = 0.
На выходе получаю SY-SUBRC = 4.
==========
SELECT * INTO lt_my_table FROM my_table
WHERE R_FILE = '0'.
На выходе получаю SY-SUBRC = 4.
==========
SELECT * INTO lt_my_table FROM my_table
WHERE R_FILE = '00000'.
На выходе получаю SY-SUBRC = 4.

Короче, выбрать пустые записи, которые просто запросом SELECT * INTO lt_my_table FROM my_table выбираются кучей и при просмотре показываются как '0' или как '00000', выбрать никак не получается при прямом указании значения, хотя теоретически по равно space, должно было бы выбраться. При этом если сделать:

SELECT * FROM my_table.
  IF my_table-r_file = space.
*  Сюда заходит и именно вот те самые пустые записи типа находятся
*  причем можно было бы написать IF my_table-r_file = '0', и тоже заходит
  ENDIF.
ENDSELECT.

Короче, пришлось сделать вторую программку вида:
SELECT * FROM my_table.
  IF my_table-r_file = space.
    my_table-r_file = '0'.
    MODIFY my_table.
  ENDIF.
ENDSELECT.
COMMIT WORK.

После чего все типа заработало... кстати, самое интересное, что на версии Oracle 9 с хвостиком (система разработки), такого эффекта не наблюдается, ну правда сюда поле не транспортом попало, но в принципе это похоже не важно, так как адаптация таблицы, через утилиту базы данных делалась по аналогии с продуктивом. Причем если записи вставлять после добавления этого нового поля, то такие записи находятся запросом равно space или равно ноль, без проблем.

В общем вот такая вот грабелька попалась, т.е. состояние добавленного поля в таблицу для уже существующих записей для поля типа NUMC (другие не проверял) вообще какое-то не определенное в базе данных, причем после считывания оно корректно конвертируется в space/0 и уже при проверке в IF все корректно, но вот выбрать такие поля SELECT-от ну никак не получается, а ощущения, типа SE16 просмотреть все... вот она запись, ставишь на селекционном экране поле равно пустому значению, а она говорит нет значений для показа и некоторое время чувствуешь себя типа а где это я, а как это я  ???

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #48 : Январь 22, 2009, 10:47:58 pm »
а не проходит where r_file is null ?
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #49 : Январь 22, 2009, 10:50:04 pm »
 как по мне так правильно выбирать .... хотя сам помню когда-то сидел пытался выбрать по условию что поле типа дата пустое ..... самое интересное, сюда не написал .... а теперь не помню ....
кажись писал WHERE docdate = '' ....
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #50 : Январь 22, 2009, 10:50:48 pm »
You are not allowed to view links. Register or Login
а не проходит where r_file is null ?
не пробовал... но тут похоже если так пройдет, то надо будет все запросы по этому полю по всей программе менять на r_file is null or r_file = 0, что уже не кошерно, так что проще таки новое поле принудительно присвоить в space или в ноль, если возможно и потом уже не париться.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #51 : Январь 22, 2009, 10:51:52 pm »
You are not allowed to view links. Register or Login
как по мне так правильно выбирать .... хотя сам помню когда-то сидел пытался выбрать по условию что поле типа дата пустое ..... самое интересное, сюда не написал .... а теперь не помню ....
кажись писал WHERE docdate = '' ....
Не с датой там фишка другая, там точно известно что поле дата будет '00000000'.

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #52 : Январь 22, 2009, 10:52:40 pm »
ну может быть, я же не знаю твоих условий .....

как по мне закладыватся на то что ты обновил, источник ошибок .... вдруг забудеш обновить и выборка пойдет ....
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #53 : Январь 22, 2009, 10:53:33 pm »
You are not allowed to view links. Register or Login
Не с датой там фишка другая, там точно известно что поле дата будет '00000000'.
буду на работе поищу, там ксати у меня так не прошло ..... не помню точно
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #54 : Январь 22, 2009, 10:57:21 pm »
You are not allowed to view links. Register or Login
как по мне закладыватся на то что ты обновил, источник ошибок .... вдруг забудеш обновить и выборка пойдет ....
Условие я написал какое... а обновить, так это надо в любом случае первый раз сделать для всех записей которые существовали до внесения нового поля, для записей, который будут вставлены после добавления нового поля, уже корректно работает выборка на space или ноль. Так что тут именно грабли в том что поле не конвертировано. Возможно что IS NULL пройдет, но если у меня запросов уже три десятка по программе, то добавлять лишнее сравнение на то что пока обработаются все старые записи, да и вообще лишнее сравнение, которое через месяц точно уже будет лишним, короче апдейтик будет самое оно.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #55 : Февраль 19, 2009, 09:12:57 pm »
В общем из этого поста: You are not allowed to view links. Register or Login

Есть выборка и есть обработка/модификация данных внутренней таблицы в LOOP AT / ENDLOOP. Само собой есть два варианта, через MODIFY и используя FIELD-SYMBOLS, в общем во втором случае производительность просто в разы больше, что видно из теста! Так что считайте, что это рекомендации лучших собаководов при обновлении внутренних таблиц данных.

Однако подтверждаю, и так провел небольшой тест, есть табличка MSEG, система тестовая записей  123 226, сделана программка следующего вида:
Код: You are not allowed to view links. Register or Login
REPORT  yuuk_test_select.

DATA: lt_mseg LIKE mseg OCCURS 1 WITH HEADER LINE,
      runtime_1 TYPE i,
      runtime_2 TYPE i,
      time_diff TYPE i.

FIELD-SYMBOLS: <fs> LIKE LINE OF lt_mseg.

SELECT * INTO TABLE lt_mseg
FROM mseg.

GET RUN TIME FIELD runtime_1.
LOOP AT lt_mseg.
  lt_mseg-bwart = '000'.
  MODIFY lt_mseg.
ENDLOOP.
GET RUN TIME FIELD runtime_2.
time_diff = runtime_2 - runtime_1.
WRITE: / time_diff.

GET RUN TIME FIELD runtime_1.
LOOP AT lt_mseg ASSIGNING <fs>.
  <fs>-bwart = '000'.
ENDLOOP.
GET RUN TIME FIELD runtime_2.
time_diff = runtime_2 - runtime_1.
WRITE: / time_diff.
Результат на экране, комментарии я так думаю излишние, разница в производительности даже не на лице  ;) в надцать раз практически, т.е.  192 580 миллисекунд против  12 172, кажется закрывают данный вопрос как нужно делать обновления внутренних таблиц.

Оффлайн NachDenken

  • Newbie
  • *
  • Сообщений: 158
  • Reputation Power: 0
  • NachDenken has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #56 : Май 21, 2009, 09:06:14 am »
Спасибо партии администрации за возвращения ника :)
есть вопрос скорее по оптимизации выполнения select
задачка выполнить 2-3 тяжелых селекта в паралельном фоновом режиме,
есть 2 (у меня) варианта
1) call function селект ...new task и потом их ловить в процедурке on end task
2) запустить  job_open submit селект

как лучше ?

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

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #57 : Май 21, 2009, 09:37:30 am »
You are not allowed to view links. Register or Login
1) call function селект ...new task и потом их ловить в процедурке on end task
2) запустить  job_open submit селект
Я не тестировал оба варианта, делал по второму пункту.

You are not allowed to view links. Register or Login
селект к одной и тойже таблице в 2 разных фоновых заданиях будет быстрее чем 2 селекта последовательно ?
Быстрее будет работать два параллельных запроса, чем два последовательных, но само собой каждый отдельный запрос будет медленнее при параллельной обработке чем при последовательно.

Тут есть правда такая вещь как кеширование, если данные обоих запросов очень близкие по теме, то... я бы замерил время выполнения обоих вариантов на твоих данных и тода уже принимал бы решение. (Как измерять время выполнения тут уже написано)

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #58 : Июнь 05, 2009, 02:28:41 pm »
Можно и мои 5 коп?

По поводу "LOOP AT + INTO" vs "LOOP AT + ASSIGNING", тут как раз занимаюсь оптимизацией одной гениальной програмульки, написанной неким месье Паганелем (дизайн и все ..... лапочка, только быстродействие).....Ннндда, .....

 вот пару замерчиков, выводы очевидны:
1. LOOP AT gt_alvtab INTO ls_alvtab.
2. LOOP AT gt_alvtab ASSIGNING <fs_alvtab>.
« Последнее редактирование: Июнь 05, 2009, 02:34:12 pm от Паганель »
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн NachDenken

  • Newbie
  • *
  • Сообщений: 158
  • Reputation Power: 0
  • NachDenken has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #59 : Июнь 05, 2009, 02:31:38 pm »
ого какая существенная разница в тормозах ,
для LOOP AT gt_alvtab ASSIGNING <fs_alvtab>.

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #60 : Июнь 05, 2009, 02:35:53 pm »
You are not allowed to view links. Register or Login
ого какая существенная разница в тормозах ,
для LOOP AT gt_alvtab ASSIGNING <fs_alvtab>.

Ссори, привел полные логи, но реально изменения касались только последней строки
calc_data 14.457.162 и calc_data 11.666.928

P.S. В пред. посте рисунки поменял :-)
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #61 : Июнь 05, 2009, 02:44:01 pm »
Еще пару заметок и мыслей-вопросов

1. Странно SAP выбирает какие индексы использовать, раньше я думал что порядок
полей в условии WHERE, как раз и определяет, какой индекс юзается, как оказалось -  не так.
На выбор индекса, как я понял, влияют только количество параметров в условии WHERE.

2. ! Как оказалось, если параметр (selopt) не заполнен, он все равно влияет на выбор индекса.
Т.е.:
Первый вариант:
  
Код: You are not allowed to view links. Register or Login
WHERE
          matnr IN  so_matnr     AND
          werks IN  so_werks     AND
          sobkz = 'K'            AND          
          lifnr IN  so_lifnr     AND " даже если пустой so_lifnr, он все равно влияет на выбор индекса

У меня из-за него подтягивался какой-то "неправильный" :-) индекс.

Второй вариант:
 
Код: You are not allowed to view links. Register or Login
WHERE
          matnr IN  so_matnr     AND
          werks IN  so_werks     AND
          sobkz = 'K'            AND          
          "!!!!! lifnr IN  so_lifnr     AND " закомментировал, теперь выбирается нужный индекс...

уфффф.... сссори, что сумбурно, радость переполняет ...
« Последнее редактирование: Июнь 05, 2009, 02:45:32 pm от Паганель »
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #62 : Июнь 05, 2009, 04:07:39 pm »
You are not allowed to view links. Register or Login
На выбор индекса, как я понял, влияют только количество параметров в условии WHERE.
Ну ты же сам написал... порядок полей в условии WHERE!!!, а какая разница есть справа значение для сравнения или нет?!

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #63 : Июнь 05, 2009, 04:49:22 pm »
You are not allowed to view links. Register or Login
Ну ты же сам написал... порядок полей в условии WHERE!!!, а какая разница есть справа значение для сравнения или нет?!
Ну вот, хотя если реально в данный момент времени, данные не передаются, оптимизатор должен бы отбросить несипользуемые  условия ....
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #64 : Июнь 05, 2009, 04:57:38 pm »
You are not allowed to view links. Register or Login
Ну вот, хотя если реально в данный момент времени, данные не передаются, оптимизатор должен бы отбросить несипользуемые  условия ....
Ну я бы про отбросить так не говорил, так как я как раз иногда использую такую конструкцию чтобы выбирался нужный мне индекс при выборке, а вообще у тебя оракловая база? Прибей индекс гвоздями и буде тебе счастье...

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #65 : Июнь 05, 2009, 05:00:37 pm »
You are not allowed to view links. Register or Login
Ну я бы про отбросить так не говорил, так как я как раз иногда использую такую конструкцию чтобы выбирался нужный мне индекс при выборке, а вообще у тебя оракловая база? Прибей индекс гвоздями и буде тебе счастье...
да нет "ДИБИ Цвай" ....  :-), это как "гвоздями"?
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #66 : Июнь 05, 2009, 05:04:31 pm »
You are not allowed to view links. Register or Login
да нет "ДИБИ Цвай" ....  :-), это как "гвоздями"?
Ну под DB2 не знаю надо документацию смотреть, опять же может Дмитрий знает, там типа хинт использования индекса можно указывать... но админы БД обычно это сильно не любят... т.е. мы жестко говорим какой индекс должна использовать система.

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #67 : Июнь 05, 2009, 05:11:27 pm »
Цитировать
уфффф.... сссори, что сумбурно, радость переполняет ...
По праву передавшего эстафетную палочку месье Паганелю. ;)
2 Паганель: как-то внятно писать сразу нужно писать, задача, результат, выводы, стройность текста сообщения должна быть на уровне. А то как же месье Паганель, вы модератором тематики в скором времени будете: начинающий не поймет о чем это он, куда плыть? ::)

P.S. Это так, оффтоп, просто контент должен быть четким. 8)
« Последнее редактирование: Июнь 05, 2009, 05:14:34 pm от Dmitriy »

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #68 : Июнь 05, 2009, 05:12:41 pm »
You are not allowed to view links. Register or Login
Ну под DB2 не знаю надо документацию смотреть, опять же может Дмитрий знает, там типа хинт использования индекса можно указывать... но админы БД обычно это сильно не любят... т.е. мы жестко говорим какой индекс должна использовать система.
Хинт иногда нужно указывать, однозначно.

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #69 : Июнь 05, 2009, 05:15:22 pm »
You are not allowed to view links. Register or Login
По праву передавшего эстафетную палочку месье Паганелю. ;)
2 Паганель: как-то внятно писать сразу нужно писать, задача, результат, выводы, стройность текста сообщения должна быть на уровне. А то как же месье Паганель, вы модератором тематики в скором времени будете: начинающий не поймет о чем это он, куда плыть? ::)
Все правильно Вы написали, мой уважаемый друг Дима, только не учли одного: природы человека по имени Паганель ......  который и получил сие прозвище еще в школе, за сию рассеянность и непоследовательность ...  ссори ... стараюсь.... буду исправляется ..
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #70 : Июнь 05, 2009, 05:15:56 pm »
You are not allowed to view links. Register or Login
Хинт иногда нужно указывать, однозначно.
Слышал, вроде бы видел, тока не помню как пишется ....  ;-)
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #71 : Июнь 05, 2009, 05:21:12 pm »
You are not allowed to view links. Register or Login
По праву передавшего эстафетную палочку месье Паганелю. ;)
P.S. Это так, оффтоп, просто контент должен быть четким. 8)

Поддежрживаю, "должен быть четким".

You are not allowed to view links. Register or Login
..... вы модератором тематики в скором времени будете:.....
Ну это бабка на двое сказала, как говортся "ры...м еще не дорос"
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #72 : Июнь 05, 2009, 05:23:09 pm »
You are not allowed to view links. Register or Login
Хинт иногда нужно указывать, однозначно.
Синтаксис не подскажешь сразу, а то я что-то найти не могу..

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #73 : Июнь 05, 2009, 05:30:06 pm »
You are not allowed to view links. Register or Login
Синтаксис не подскажешь сразу, а то я что-то найти не могу..
ага, а то видел, кажись в mb5b... сижу, ищу ...  :-(
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #74 : Июнь 05, 2009, 08:57:06 pm »
You are not allowed to view links. Register or Login
Поддежрживаю, "должен быть четким".
Ну это бабка на двое сказала, как говортся "ры...м еще не дорос"
Еще раз поддерживаю, "дурак, это тот кого никто не понимает"
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #75 : Июнь 05, 2009, 10:18:09 pm »
You are not allowed to view links. Register or Login
Синтаксис не подскажешь сразу, а то я что-то найти не могу..
Нет, к сожелению, этот код не "засолил", повезло в свое время по поводу мегаотчетов, но может мужики-абаперы подскажут что, залез в исходники - много их... Нормально просто всегда индексы работали, а еще и с базисом общался, грамотный базисник дюжины начинающих абаперов стоит, если не вредный. ;) А потом уже (по поводу больших отчетов), мы просто присаживались с консулами (когда они были!) и предметно общаясь, договаривались, что они, как постановщики, будут клиенту говорить, можно/нельзя, а то иногда такие казусы... ::) Пошукаю, если найду - отпишу.
 

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #76 : Июнь 05, 2009, 10:24:52 pm »
You are not allowed to view links. Register or Login
А потом уже (по поводу больших отчетов), мы просто присаживались с консулами (когда они были!) и предметно общаясь, договаривались, что они, как постановщики, будут клиенту говорить, можно/нельзя, а то иногда такие казусы... ::) Пошукаю, если найду - отпишу.
Хорошо, наверное тебе, Дима, просто, нет у меня консулов, «Аз есмь…», и косул, и абапер, в одном лице :-), и задачу ставят не в виде ТЗ, а ближе к ФД (функциональному требованию, общему описанию, как должно быть) ... ну как говорят "и кузнец, и жнец, и трубе дудец"....
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #77 : Июнь 05, 2009, 10:29:12 pm »
You are not allowed to view links. Register or Login
Хорошо, наверное тебе, Дима, просто, нет у меня консулов, «Аз есмь…», и косул, и абапер, в одном лице :-), и задачу ставят не в виде ТЗ, а ближе к ФД (функциональному требованию, общему описанию, как должно быть) ... ну как говорят "и кузнец, и жнец, и трубе дудец"....
Да это понятно, просто когда опыта поднаберешь, сможешь авторитетом "давить". А то мечтателей много, дай им то, это, а SAP ведь тоже не резиновый. :D

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #78 : Июнь 05, 2009, 10:31:33 pm »
You are not allowed to view links. Register or Login
Да это понятно, просто когда опыта поднаберешь, сможешь авторитетом "давить". А то мечтателей много, дай им то, это, а SAP ведь тоже не резиновый. :D
Знаем"с мы таких "мечтателей", сами такие, как сделаем, потом еще недельку оптимизируем .....

Дима, а ты о чем?
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #79 : Июнь 05, 2009, 10:53:06 pm »
You are not allowed to view links. Register or Login
Знаем"с мы таких "мечтателей", сами такие, как сделаем, потом еще недельку оптимизируем .....

Дима, а ты о чем?
О понимании бизнес-процессов компании самим, руководством оной и умением объяснить Клиенту, не то, что он не прав, а то, как надо, т.е. научить/объяснить и подвести к тому, чтобы он был прав, но с учетом специфики параметров "железа" на котором все это дело функционирует и системных настроек.
« Последнее редактирование: Июнь 05, 2009, 11:10:00 pm от Dmitriy »

Оффлайн NachDenken

  • Newbie
  • *
  • Сообщений: 158
  • Reputation Power: 0
  • NachDenken has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #80 : Июнь 10, 2009, 11:26:06 am »
не могу найти пост где месье Паганель рассказывал про зависимость условий where и выбор индекса
действительно ли это так

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #81 : Июнь 10, 2009, 11:28:39 am »
You are not allowed to view links. Register or Login
не могу найти пост где месье Паганель рассказывал про зависимость условий where и выбор индекса
действительно ли это так
страницей выше в этой же теме (только это вопрос спорный)
You are not allowed to view links. Register or Login
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн NachDenken

  • Newbie
  • *
  • Сообщений: 158
  • Reputation Power: 0
  • NachDenken has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #82 : Июнь 11, 2009, 01:24:28 pm »
еще нужен синтаксис хинта ?
%_HINTS ORACLE 'index(MKPF "MKPF~Zblabla")'.

Оффлайн NachDenken

  • Newbie
  • *
  • Сообщений: 158
  • Reputation Power: 0
  • NachDenken has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #83 : Июнь 11, 2009, 01:26:03 pm »
по поводу индекса,
думаю со стратегией выбора индекса в sap не все так просто,
1 и тот же селект и условия, при одинаковых индексах в разных мандантах выбор разный.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #84 : Июнь 11, 2009, 01:59:34 pm »
You are not allowed to view links. Register or Login
1 и тот же селект и условия, при одинаковых индексах в разных мандантах выбор разный.
Ну там еще статистика индекса смотрится... т.е. для теста желательно сбор статистики сделать в обоих системах, посмотреть на результат, ну если данные в системах одинаковые, то должно совпасть и уже потом запускать отчеты и смотреть на индексы.

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #85 : Июнь 17, 2009, 03:37:07 pm »
Тут вот опять делаю оптимизацию, странные результаты:  

LOOP AT gt_alvtab INTO ls_alvtab - 33 302 061
LOOP AT gt_alvtab ASSIGNING <fs_alvtab>. - 36 540 526


Странно....  :o

Может это для небольшого к-ва тестовых данных?
« Последнее редактирование: Июнь 17, 2009, 03:39:08 pm от Паганель »
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #86 : Июнь 17, 2009, 03:48:10 pm »
Ошибся, в одном месте не заменил
PERFORM select_add_data CHANGING ls_alvtab на <fs_alvtab>.
Странно,  не думаю что из-за этого такой разброс?


Вопросик, каким образом, через <fs_alvtab> или еще как то можно оптимизировать такой код?
Код: You are not allowed to view links. Register or Login
" Очищаем все пустые
LOOP AT gt_alvtab INTO ls_alvtab WHERE is_null = 1.
    DELETE gt_alvtab INDEX sy-tabix.
    "DELETE gt_alvtab FROM ls_alvtab. " INDEX sy-tabix.
ENDLOOP.
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Reputation Power: 0
  • Удав has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #87 : Июнь 17, 2009, 04:32:35 pm »
Замени выборку данных на свою и посмотри результаты разных методов ;)
Код: You are not allowed to view links. Register or Login
REPORT  z_test_delete.

DATA: BEGIN OF gs_alvtab,
        belnr TYPE bkpf-belnr,
        is_null(1) TYPE c,
      END OF gs_alvtab,
      gt_alvtab LIKE STANDARD TABLE OF gs_alvtab,
      gt_alvtab2 LIKE STANDARD TABLE OF gs_alvtab,
      tabix TYPE sy-tabix,
      t1 TYPE i,
      t2 TYPE i.

FIELD-SYMBOLS: <fs_alvtab> LIKE gs_alvtab.

START-OF-SELECTION.

  SELECT belnr
  INTO CORRESPONDING FIELDS OF TABLE gt_alvtab
  FROM bkpf
  WHERE bukrs = '1100'.

  LOOP AT gt_alvtab ASSIGNING <fs_alvtab>.
    tabix = sy-tabix MOD 5.
    WRITE tabix TO <fs_alvtab>-is_null LEFT-JUSTIFIED.
  ENDLOOP.
  gt_alvtab2 = gt_alvtab.
  tabix = LINES( gt_alvtab ).
  WRITE: /(25) 'Count of records', tabix.
  GET RUN TIME FIELD t1.
  LOOP AT gt_alvtab ASSIGNING <fs_alvtab> WHERE is_null = 1.
    DELETE gt_alvtab INDEX sy-tabix.
  ENDLOOP.
  GET RUN TIME FIELD t2.
  t1 = t2 - t1.
  tabix = LINES( gt_alvtab ).
  WRITE: /(25) 'Loop w/o sort', t1, tabix.
  GET RUN TIME FIELD t1.
  SORT gt_alvtab2 BY is_null.
  GET RUN TIME FIELD t2.
  t1 = t2 - t1.
  WRITE: /(25) 'Sort', t1.
  gt_alvtab = gt_alvtab2.
  GET RUN TIME FIELD t1.
  LOOP AT gt_alvtab ASSIGNING <fs_alvtab> WHERE is_null = 1.
    DELETE gt_alvtab INDEX sy-tabix.
  ENDLOOP.
  GET RUN TIME FIELD t2.
  t1 = t2 - t1.
  tabix = LINES( gt_alvtab ).
  WRITE: /(25) 'Loop with sort', t1, tabix.
  gt_alvtab = gt_alvtab2.
  GET RUN TIME FIELD t1.
  READ TABLE gt_alvtab WITH KEY is_null = 1
    BINARY SEARCH
    TRANSPORTING NO FIELDS.
  tabix = sy-tabix.

  WHILE sy-subrc = 0.
    sy-subrc = 0.
    READ TABLE gt_alvtab ASSIGNING <fs_alvtab> INDEX tabix.
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.
    IF <fs_alvtab>-is_null <> 1.
      sy-subrc = 4.
    ELSE.
      DELETE gt_alvtab INDEX tabix.
*      ADD 1 TO tabix.
    ENDIF.
  ENDWHILE.
  GET RUN TIME FIELD t2.
  t1 = t2 - t1.
  tabix = LINES( gt_alvtab ).
  WRITE: /(25) 'Read .. binary search', t1, tabix.

  gt_alvtab = gt_alvtab2.
  GET RUN TIME FIELD t1.
  DELETE gt_alvtab WHERE is_null = 1.
  GET RUN TIME FIELD t2.
  t1 = t2 - t1.
  tabix = LINES( gt_alvtab ).
  WRITE: /(25) 'Delete', t1, tabix.

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #88 : Июнь 17, 2009, 09:13:07 pm »
You are not allowed to view links. Register or Login
Замени выборку данных на свою и посмотри результаты разных методов ;)
Код: You are not allowed to view links. Register or Login
REPORT  z_test_delete.

DATA: BEGIN OF gs_alvtab,
        belnr TYPE bkpf-belnr,
        is_null(1) TYPE c,
      END OF gs_alvtab,
      gt_alvtab LIKE STANDARD TABLE OF gs_alvtab,
      gt_alvtab2 LIKE STANDARD TABLE OF gs_alvtab,
      tabix TYPE sy-tabix,
      t1 TYPE i,
      t2 TYPE i.

FIELD-SYMBOLS: <fs_alvtab> LIKE gs_alvtab.

START-OF-SELECTION.

  SELECT belnr
  INTO CORRESPONDING FIELDS OF TABLE gt_alvtab
  FROM bkpf
  WHERE bukrs = '1100'.

  LOOP AT gt_alvtab ASSIGNING <fs_alvtab>.
    tabix = sy-tabix MOD 5.
    WRITE tabix TO <fs_alvtab>-is_null LEFT-JUSTIFIED.
  ENDLOOP.
  gt_alvtab2 = gt_alvtab.
  tabix = LINES( gt_alvtab ).
  WRITE: /(25) 'Count of records', tabix.
  GET RUN TIME FIELD t1.
  LOOP AT gt_alvtab ASSIGNING <fs_alvtab> WHERE is_null = 1.
    DELETE gt_alvtab INDEX sy-tabix.
  ENDLOOP.
  GET RUN TIME FIELD t2.
  t1 = t2 - t1.
  tabix = LINES( gt_alvtab ).
  WRITE: /(25) 'Loop w/o sort', t1, tabix.
  GET RUN TIME FIELD t1.
  SORT gt_alvtab2 BY is_null.
  GET RUN TIME FIELD t2.
  t1 = t2 - t1.
  WRITE: /(25) 'Sort', t1.
  gt_alvtab = gt_alvtab2.
  GET RUN TIME FIELD t1.
  LOOP AT gt_alvtab ASSIGNING <fs_alvtab> WHERE is_null = 1.
    DELETE gt_alvtab INDEX sy-tabix.
  ENDLOOP.
  GET RUN TIME FIELD t2.
  t1 = t2 - t1.
  tabix = LINES( gt_alvtab ).
  WRITE: /(25) 'Loop with sort', t1, tabix.
  gt_alvtab = gt_alvtab2.
  GET RUN TIME FIELD t1.
  READ TABLE gt_alvtab WITH KEY is_null = 1
    BINARY SEARCH
    TRANSPORTING NO FIELDS.
  tabix = sy-tabix.

  WHILE sy-subrc = 0.
    sy-subrc = 0.
    READ TABLE gt_alvtab ASSIGNING <fs_alvtab> INDEX tabix.
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.
    IF <fs_alvtab>-is_null <> 1.
      sy-subrc = 4.
    ELSE.
      DELETE gt_alvtab INDEX tabix.
*      ADD 1 TO tabix.
    ENDIF.
  ENDWHILE.
  GET RUN TIME FIELD t2.
  t1 = t2 - t1.
  tabix = LINES( gt_alvtab ).
  WRITE: /(25) 'Read .. binary search', t1, tabix.

  gt_alvtab = gt_alvtab2.
  GET RUN TIME FIELD t1.
  DELETE gt_alvtab WHERE is_null = 1.
  GET RUN TIME FIELD t2.
  t1 = t2 - t1.
  tabix = LINES( gt_alvtab ).
  WRITE: /(25) 'Delete', t1, tabix.

Слушай, спасибо очень помог, (держи кармы) я просто потрясен результатами, я не стал менять твою прогу, так добавил для себя комментарии в логе, но это веСЧ.

Тут есть подсказки не только как оптимизировать цикл с удалением, но и нашел для себя как оптимизировать еще один цикл ....

Мои результаты:
Рис1 и Рис2. странно что такой расброс в результатах для "Удаление. Loop w/o sort."
 между двумя запусками ..


Как вижу быстрее всего работает DELETE gt_alvtab WHERE is_null = 1.

Для циклов вижу нужно использовать сортировку, получается, время потраченное на сортировку, с лихвой компенсируется экономией на цикле.

« Последнее редактирование: Июнь 17, 2009, 09:14:43 pm от Паганель »
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн NachDenken

  • Newbie
  • *
  • Сообщений: 158
  • Reputation Power: 0
  • NachDenken has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #89 : Июнь 18, 2009, 10:04:00 am »

подскажите как средствами abap
сделать такой запрос только к внутренней itab

select p1 max(p2) sum(p3)
from blabla
group by p1

collect мне суммирует p2
Спасибо.

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #90 : Июнь 18, 2009, 10:09:55 am »
You are not allowed to view links. Register or Login
подскажите как средствами abap
сделать такой запрос только к внутренней itab

select p1 max(p2) sum(p3)
from blabla
group by p1

collect мне суммирует p2
Спасибо.

вроде бы только collect  или READ/LOOP c записью в еще одну табличку.

С  collect не работал, так как не очень понял как он работает и как выбирает поля по которым суммировать, но тут есть люди которые его наверняка юзали.

Выше в этой теме Уукрул приводил пример суммирования You are not allowed to view links. Register or Login

« Последнее редактирование: Июнь 18, 2009, 10:12:28 am от Паганель »
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #91 : Июнь 18, 2009, 10:52:09 am »
2Удав
You are not allowed to view links. Register or Login
Замени выборку данных на свою и посмотри результаты разных методов ;)
Код: You are not allowed to view links. Register or Login
REPORT  z_test_delete.

DATA: BEGIN OF gs_alvtab,
        belnr TYPE bkpf-belnr,
        is_null(1) TYPE c,
      END OF gs_alvtab,
      gt_alvtab LIKE STANDARD TABLE OF gs_alvtab,
      gt_alvtab2 LIKE STANDARD TABLE OF gs_alvtab,
      tabix TYPE sy-tabix,
      t1 TYPE i,
      t2 TYPE i.

FIELD-SYMBOLS: <fs_alvtab> LIKE gs_alvtab.

START-OF-SELECTION.

  SELECT belnr
  INTO CORRESPONDING FIELDS OF TABLE gt_alvtab
  FROM bkpf
  WHERE bukrs = '1100'.

  LOOP AT gt_alvtab ASSIGNING <fs_alvtab>.
    tabix = sy-tabix MOD 5.
    WRITE tabix TO <fs_alvtab>-is_null LEFT-JUSTIFIED.
  ENDLOOP.
  gt_alvtab2 = gt_alvtab.
  tabix = LINES( gt_alvtab ).
  WRITE: /(25) 'Count of records', tabix.
  GET RUN TIME FIELD t1.
  LOOP AT gt_alvtab ASSIGNING <fs_alvtab> WHERE is_null = 1.
    DELETE gt_alvtab INDEX sy-tabix.
  ENDLOOP.
  GET RUN TIME FIELD t2.
  t1 = t2 - t1.
  tabix = LINES( gt_alvtab ).
  WRITE: /(25) 'Loop w/o sort', t1, tabix.
  GET RUN TIME FIELD t1.
  SORT gt_alvtab2 BY is_null.
  GET RUN TIME FIELD t2.
  t1 = t2 - t1.
  WRITE: /(25) 'Sort', t1.
  gt_alvtab = gt_alvtab2.
  GET RUN TIME FIELD t1.
  LOOP AT gt_alvtab ASSIGNING <fs_alvtab> WHERE is_null = 1.
    DELETE gt_alvtab INDEX sy-tabix.
  ENDLOOP.
  GET RUN TIME FIELD t2.
  t1 = t2 - t1.
  tabix = LINES( gt_alvtab ).
  WRITE: /(25) 'Loop with sort', t1, tabix.
  gt_alvtab = gt_alvtab2.
  GET RUN TIME FIELD t1.
  READ TABLE gt_alvtab WITH KEY is_null = 1
    BINARY SEARCH
    TRANSPORTING NO FIELDS.
  tabix = sy-tabix.

  WHILE sy-subrc = 0.
    sy-subrc = 0.
    READ TABLE gt_alvtab ASSIGNING <fs_alvtab> INDEX tabix.
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.
    IF <fs_alvtab>-is_null <> 1.
      sy-subrc = 4.
    ELSE.
      DELETE gt_alvtab INDEX tabix.
*      ADD 1 TO tabix.
    ENDIF.
  ENDWHILE.
  GET RUN TIME FIELD t2.
  t1 = t2 - t1.
  tabix = LINES( gt_alvtab ).
  WRITE: /(25) 'Read .. binary search', t1, tabix.

  gt_alvtab = gt_alvtab2.
  GET RUN TIME FIELD t1.
  DELETE gt_alvtab WHERE is_null = 1.
  GET RUN TIME FIELD t2.
  t1 = t2 - t1.
  tabix = LINES( gt_alvtab ).
  WRITE: /(25) 'Delete', t1, tabix.

Можеш обьяснить этот кусок кода:
Код: You are not allowed to view links. Register or Login
READ TABLE gt_alvtab WITH KEY is_null = 1
BINARY SEARCH
TRANSPORTING NO FIELDS.
tabix = sy-tabix.

WHILE sy-subrc = 0.
  sy-subrc = 0.
  READ TABLE gt_alvtab ASSIGNING <fs_alvtab> INDEX tabix.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.
  IF <fs_alvtab>-is_null <> 1.
    sy-subrc = 4.
  ELSE.
    DELETE gt_alvtab INDEX tabix.
*      ADD 1 TO tabix.
  ENDIF.
ENDWHILE.
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #92 : Июнь 18, 2009, 11:15:41 am »
You are not allowed to view links. Register or Login
collect мне суммирует p2
Ну таки да... руками через LOOP AT ENDLOOP. разве что... я что-то никаких описаний типа отключения суммирования для цифровых полей не нашел  ::)

Оффлайн NachDenken

  • Newbie
  • *
  • Сообщений: 158
  • Reputation Power: 0
  • NachDenken has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #93 : Июнь 24, 2009, 11:20:12 am »
помните ?
1) call function селект ...new task и потом их ловить в процедурке on end task
2) запустить  job_open submit селект

1 пункт не фоновый получается, а просто параллельный
2) и фоновый и паралельный

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Reputation Power: 0
  • Удав has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #94 : Июль 27, 2009, 08:34:12 pm »
You are not allowed to view links. Register or Login
2Удав
Можеш обьяснить этот кусок кода:
Код: You are not allowed to view links. Register or Login
READ TABLE gt_alvtab WITH KEY is_null = 1
BINARY SEARCH
TRANSPORTING NO FIELDS.
tabix = sy-tabix.

WHILE sy-subrc = 0.
  sy-subrc = 0.
  READ TABLE gt_alvtab ASSIGNING <fs_alvtab> INDEX tabix.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.
  IF <fs_alvtab>-is_null <> 1.
    sy-subrc = 4.
  ELSE.
    DELETE gt_alvtab INDEX tabix.
*      ADD 1 TO tabix.
  ENDIF.
ENDWHILE.
Конечно :)
1.Сначала таблица сортируется по is_null по возрастанию (выше по коду)
2.Ищется 1-я запись с is_null = 1 по binary search
3.Удаляются записи, у которых is_null = 1.
Как только попадется запись, у которой is_null > 1 или достигнут конец таблицы - выход из цикла.

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Reputation Power: 0
  • Martha has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #95 : Июль 29, 2009, 11:52:49 am »
Цитата: Uukrul  link=topic=174.msg4062#msg4062 date=1244207259
Ну ты же сам написал... порядок полей в условии WHERE!!!, а какая разница есть справа значение для сравнения или нет?!

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


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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #96 : Июль 29, 2009, 11:55:43 am »
You are not allowed to view links. Register or Login
этот порядок полей должен соответствовать порядку следования полей в индексе, который вы предполагаете, здесь будет использован или чему-то другому



Это вопрос?

Если да, то порядок не знаю, но наличие полей и значений - да.
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #97 : Июль 29, 2009, 12:27:37 pm »
You are not allowed to view links. Register or Login
этот порядок полей должен соответствовать порядку следования полей в индексе
Причем в индексе если таблица мандантно-зависимая, то обязательно должно быть включено поле манданта. Или иначе надо в запросе явно указывать что мандант не использовать.

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #98 : Июль 29, 2009, 12:35:09 pm »
Цитата: Uukrul  link=topic=174.msg4566#msg4566 date=1248859657
Причем в индексе если таблица мандантно-зависимая, то обязательно должно быть включено поле манданта. Или иначе надо в запросе явно указывать что мандант не использовать.

Пример, или подробнее можно?
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Reputation Power: 0
  • Martha has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #99 : Июль 30, 2009, 01:33:42 pm »
You are not allowed to view links. Register or Login
Это вопрос?

Если да, то порядок не знаю, но наличие полей и значений - да.

У нас есть таблица  t1 в которой помимо ключа, есть индекс по полям f1, f3,f6, f7.

Есть
 select  *  from t1
where f7  = z7  and f1 = z1 and f6 = z6 and f3 = z3.

Есть ли разница в скорости работы в том, в какой последовательности перечислены поля в where, если в индексе они идут – см выше.

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #100 : Июль 30, 2009, 01:44:37 pm »
You are not allowed to view links. Register or Login
У нас есть таблица  t1 в которой помимо ключа, есть индекс по полям f1, f3,f6, f7.

Есть
 select  *  from t1
where f7  = z7  and f1 = z1 and f6 = z6 and f3 = z3.

Есть ли разница в скорости работы в том, в какой последовательности перечислены поля в where, если в индексе они идут – см выше.


По моим наблюдениям (т.е. это ИМХО), разницы нет, порядок и количество влияет только на выбор индекса, т.е. если у вас есть два индекса с полями f1, f2, f3 и f1,f3 то выбор идет как раз по порядку следования полей......
Хотя может на это влияет еще и используемая БД......

Кстати вы смотрели какой индекс используется (st05)?

У вас какая то конкретная проблема? Может приведете код и какие у вас индексы?
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #101 : Июль 30, 2009, 01:48:38 pm »
You are not allowed to view links. Register or Login
Пример, или подробнее можно?
Ну индекс желательно делать так... как на картинке, первое поле мандантик, так как при запросе
Код: You are not allowed to view links. Register or Login
SELECT * FROM EQUI
WHERE MATNR = xxx AND
      SERNR = zzzz AND
      WERK = yyy.
Будет работать индекс, так как на уровень запроса пойдут так же данные манданта.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #102 : Июль 30, 2009, 01:49:38 pm »
You are not allowed to view links. Register or Login
Хотя может на это влияет еще и используемая БД......
Ну для оракла порядок важен... если его не соблюдать, то индексы просто не используются в таком случае...

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Reputation Power: 0
  • Удав has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #103 : Август 05, 2009, 11:39:06 am »
Цитата: Uukrul  link=topic=174.msg4587#msg4587 date=1248950978
Ну для оракла порядок важен... если его не соблюдать, то индексы просто не используются в таком случае...
Это для какой версии Oracle?
Для 9-ки без разницы, в каком порядке идут поля в WHERE...
Оптимизатор подбирает один из индексов:
-с наибольшим количеством совпадающих с условием полей
-с полями, по которым селективность больше.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #104 : Август 05, 2009, 11:42:05 am »
You are not allowed to view links. Register or Login
Это для какой версии Oracle?
Для 9-ки без разницы, в каком порядке идут поля в WHERE...
У нас 10 с копейками, админы настаивают на соблюдении порядка следования индексов... хотя я тоже был уверен что оптимизатор типа умнее должен быть... в противном случае индекс почему-то не подхватывается.

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Reputation Power: 0
  • Удав has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #105 : Август 05, 2009, 11:49:20 am »
Вот примеры:
Код: You are not allowed to view links. Register or Login
SQL Statement                                                                   
                                                                               
SELECT                                                                         
  *                                                                             
FROM                                                                           
  mseg                                                                         
WHERE                                                                           
  bwart = :A1   and charg = :a2   and werks = :a3                               
                                                                               
Execution Plan                                                                 
                                                                               
 SELECT STATEMENT ( Estimated Costs = 1 , Estimated #Rows = 1 )                 
                                                                               
     5  2 TABLE ACCESS BY INDEX ROWID MSEG                                     
          ( Estim. Costs = 1 , Estim. #Rows = 1 )                               
                                                                               
            1 INDEX SKIP SCAN MSEG~ZZ2                                         
              ( Estim. Costs = 3 , Estim. #Rows = 1 )                           
              Search Columns: 3                                                 

NONUNIQUE  Index   MSEG~ZZ2                     
                                                 
Column Name                     #Distinct       
MANDT                                          1
CHARG                                    193 201
WERKS                                         58
BWART                                         63

Код: You are not allowed to view links. Register or Login
SELECT                                                                               
  *                                                                                 
FROM                                                                                 
  mseg                                                                               
WHERE                                                                               
  bwart = :A1   and werks = :a3                                                     
                                                                                     
Execution Plan                                                                       
 SELECT STATEMENT ( Estimated Costs = 1 916 , Estimated #Rows = 3 700 )             
                                                                                     
     5  2 TABLE ACCESS BY INDEX ROWID MSEG                                           
          ( Estim. Costs = 1 916 , Estim. #Rows = 3 700 )                           
                                                                                     
            1 INDEX SKIP SCAN MSEG~M                                                 
              ( Estim. Costs = 17 536 , Estim. #Rows = 3 700 )                       
              Search Columns: 2           

NONUNIQUE  Index   MSEG~M                       
                                                 
Column Name                     #Distinct       
MANDT                                          1
MATNR                                     17 533
WERKS                                         58
LGORT                                        729
BWART                                         63
SOBKZ                                          3                                           

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Reputation Power: 0
  • Удав has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #106 : Август 05, 2009, 11:53:44 am »
А вот что получается при добавлении условия с MANDT ;)
Код: You are not allowed to view links. Register or Login
SELECT                                                                            
  *                                                                              
FROM                                                                              
  mseg                                                                            
WHERE                                                                            
  mandt = :A4   and werks = :a3   and bwart = :A1                                
                                                                                  
                                                                                  
Execution Plan                                                                    
 SELECT STATEMENT ( Estimated Costs = 228 , Estimated #Rows = 3 700 )            
                                                                                  
     5  2 TABLE ACCESS BY INDEX ROWID MSEG                                        
          ( Estim. Costs = 228 , Estim. #Rows = 3 700 )                          
                                                                                  
            1 INDEX RANGE SCAN MSEG~ZZ5                                          
              ( Estim. Costs = 1 053 , Estim. #Rows = 3 700 )                    
              Search Columns: 3      

SELECT                                                                         
  *                                                                             
FROM                                                                           
  mseg                                                                         
WHERE                                                                           
  mandt = :A4   and bwart = :A1   and werks = :a3                               
                                                                               
                                                                               
Execution Plan                                                                 
 SELECT STATEMENT ( Estimated Costs = 228 , Estimated #Rows = 3 700 )           
                                                                               
     5  2 TABLE ACCESS BY INDEX ROWID MSEG                                     
          ( Estim. Costs = 228 , Estim. #Rows = 3 700 )                         
                                                                               
            1 INDEX RANGE SCAN MSEG~ZZ5                                         
              ( Estim. Costs = 1 053 , Estim. #Rows = 3 700 )                   
              Search Columns: 3                                                 

NONUNIQUE  Index   MSEG~ZZ5                    
                                                
Column Name                     #Distinct      
MANDT                                          1
WERKS                                         58
LGORT                                        729
BWART                                         63
SOBKZ                                          3
                                            

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #107 : Август 05, 2009, 11:54:21 am »
Код: You are not allowed to view links. Register or Login
SELECT                                                                          
  *                                                                            
FROM                                                                            
  mseg                                                                          
WHERE                                                                          
  bwart = :A1   and charg = :a2   and werks = :a3                              
Давай этот запрос со сменой порядка следования полей, т.е. количество полей тоже 3, но порядок разный.

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Reputation Power: 0
  • Удав has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #108 : Август 05, 2009, 04:33:21 pm »
С мандантом
Код: You are not allowed to view links. Register or Login
SQL Statement                                                                 
                                                                               
SELECT                                                                         
  *                                                                           
FROM                                                                           
  mseg                                                                         
WHERE                                                                         
  mandt = :a01   and charg = :a2   and werks = :a3   and bwart = :a4           
                                                                               
Execution Plan                                                                 
 SELECT STATEMENT ( Estimated Costs = 1 , Estimated #Rows = 1 )               
                                                                               
     5  2 TABLE ACCESS BY INDEX ROWID MSEG                                     
          ( Estim. Costs = 1 , Estim. #Rows = 1 )                             
                                                                               
            1 INDEX RANGE SCAN MSEG~ZZ2                                       
              ( Estim. Costs = 3 , Estim. #Rows = 1 )                         
              Search Columns: 4                                               
Без манданта
Код: You are not allowed to view links. Register or Login
SQL Statement                                                                     
                                                                                 
SELECT                                                                           
  *                                                                               
FROM                                                                             
  mseg                                                                           
WHERE                                                                             
  werks = :a3   and charg = :a2   and bwart = :a4                                 
                                                                                 
Execution Plan                                                                   
 SELECT STATEMENT ( Estimated Costs = 1 , Estimated #Rows = 1 )                   
                                                                                 
     5  2 TABLE ACCESS BY INDEX ROWID MSEG                                       
          ( Estim. Costs = 1 , Estim. #Rows = 1 )                                 
                                                                                 
            1 INDEX SKIP SCAN MSEG~ZZ2                                           
              ( Estim. Costs = 3 , Estim. #Rows = 1 )                             
              Search Columns: 3                                                   

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #109 : Август 05, 2009, 04:38:35 pm »
Ну судя по всему не влияет... надо будет посмотреть у себя. А то может зря поверил на слово админам ::)

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Reputation Power: 0
  • Martha has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #110 : Август 07, 2009, 08:35:54 am »
You are not allowed to view links. Register or Login
По моим наблюдениям (т.е. это ИМХО), разницы нет, порядок и количество влияет только на выбор индекса, т.е. если у вас есть два индекса с полями f1, f2, f3 и f1,f3 то выбор идет как раз по порядку следования полей......
Хотя может на это влияет еще и используемая БД......

Кстати вы смотрели какой индекс используется (st05)?

У вас какая то конкретная проблема? Может приведете код и какие у вас индексы?

как посмотреть какие индексы используются? в st05  я вижу только запрос

Оффлайн tav_48

  • Newbie
  • *
  • Сообщений: 3
  • Reputation Power: 0
  • tav_48 has no influence.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #111 : Август 07, 2009, 09:42:00 am »
You are not allowed to view links. Register or Login
как посмотреть какие индексы используются? в st05  я вижу только запрос

You are not allowed to view links. Register or Login

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #112 : Август 07, 2009, 09:43:45 am »
You are not allowed to view links. Register or Login
как посмотреть какие индексы используются? в st05  я вижу только запрос

Кнопка "Explain"
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #113 : Август 07, 2009, 05:57:04 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.

У bsis есть три индекса:
Первичный, включающий такие поля:
MANDT   
BUKRS   
HKONT   
AUGDT   
AUGBL   
ZUONR
GJAHR   
BELNR   
BUZEI   

1
MANDT
BUKRS
BELNR
GJAHR
BUZEI

и
"ZAN"
BUKRS
ZUONR
BEWAR

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

Но сие чудо, т.е. SAP чего-то использует последний индекс "ZAN".

Может кто то объяснит мне чего же так? А то моя вера в SAP пошатнулась .....  :)

« Последнее редактирование: Август 07, 2009, 05:59:13 pm от Паганель »
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #114 : Август 07, 2009, 06:06:09 pm »
Проблему решил, убрал из выборки поле "Присвоение" (zuonr), выборка срабатывает мнговенно, предидущая - минут 20 и больше и падала по таймауту ......

Выводы? .....
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #115 : Август 07, 2009, 06:09:07 pm »
You are not allowed to view links. Register or Login
Код: 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.

У bsis есть три индекса:
Первичный, включающий такие поля:
MANDT   
BUKRS   
HKONT   
AUGDT   
AUGBL   
ZUONR
GJAHR   
BELNR   
BUZEI   
А с чего ты взял что первичный должен использоваться? У тебя тут совпадает только  BUKRS и HKONT, дальше все мимо кассы так как значения AUGDT и AUGBL не заданы вообще, то до ZUONR оно вообще не доходит, так что правильно оно его не берет. Ну если ты конечно уверен что нужен именно этот индекс, тогда можно через %_HINTS его задать, если правильно синтаксис помню. Но я бы так не делал, оптимизатору виднее.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #116 : Август 07, 2009, 09:21:28 pm »
You are not allowed to view links. Register or Login
Проблему решил, убрал из выборки поле "Присвоение" (zuonr), выборка срабатывает мнговенно, предидущая - минут 20 и больше и падала по таймауту ......

Выводы? .....
Что и требовалось доказать, стал использоваться правильный индекс. Вообще выводы я могу сделать, но они не будут иметь никакого отношения к SAP, а скорее в теории баз данных, будет немного наверное непонятные слова, но это вообще-то не моя задача прочитать курс введение в базы данных  ;). Так вот постараюсь по очень простому. В общем случае если это не хеширование, то индекс это вариации построенные на тему B-дерева, так вот у тебя в ключе данные перечислены в таком порядке

MANDT   
BUKRS   
HKONT   
AUGDT   
AUGBL   
ZUONR
GJAHR   
BELNR   
BUZEI   

А в условии выборки, ты их зада в таком порядке
BUKRS   
HKONT   
<пропущено AUGDT>
<пропущено AUGBL>
ZUONR
<Остальное не важно>

Система при анализе дошла до того что поля AUGDT и AUGBL не заданы, поэтому индекс использоваться не может, а то что ты задал ZUONR, ей по барабану так как по дереву она до него дойти минуя вышестоящие и не определенные AUGDT и AUGBL, никак не может. Кстати твой следующий индекс "ZAN" и подхаватывается потому что идут поля которые есть в индексе и между ними нет пропусков:
BUKRS
ZUONR
<Последние поля не важны BEWAR>, так вот если бы в индексе было вот это BEWAR и оно стояло между BUKRS и ZUONR, но ты его не задавал бы как в предыдущем AUGDT и AUGBL, то у тебя бы и индекс "ZAN" вряд ли бы использовался, получил бы фулскан таблицы.

Поэтому когда ты убрал ZUONR, оно сравнило этих два индекса, в первом есть два поля, во втором только одно.. само собой искать надо по первому.

Про B-дерево для начала тут: You are not allowed to view links. Register or Login , хотя там тема большая и вариаций на его тему много.

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #117 : Август 07, 2009, 10:13:41 pm »
Спасибо, в принципе понятно, немного теории тут точно не помешает.....

You are not allowed to view links. Register or Login
Кстати твой следующий индекс "ZAN" и подхаватывается потому что идут поля которые есть в индексе и между ними нет пропусков:
BUKRS
ZUONR
<Последние поля не важны BEWAR>, так вот если бы в индексе было вот это BEWAR и оно стояло между BUKRS и ZUONR, но ты его не задавал бы как в предыдущем AUGDT и AUGBL, то у тебя бы и индекс "ZAN" вряд ли бы использовался, получил бы фулскан таблицы.

Поэтому когда ты убрал ZUONR, оно сравнило этих два индекса, в первом есть два поля, во втором только одно.. само собой искать надо по первому.

Про B-дерево для начала тут: You are not allowed to view links. Register or Login , хотя там тема большая и вариаций на его тему много.

Правда, так и не понял, почему все-таки при выборе индекса, рассматривалось поле zuonr, по моему ситуация в обеих случаях аналогична, в первом индексе есть два поля которые иду подряд, во втором тоже 2 поля, которые идут подряд..... далее идут поля которые присутствуют в условиях выбора но не входят в индекс..... И в первом и во втором случае - одно и тоже .... интересно, как повела бы себя система, если бы было наоборот - в первом индексе было бы поле zuonr, а во втором hkont, что система выбрала бы опять второй? не логично ..... у меня подозрение что тут играет роль еще и то что, поле zuonr больше по длине, естественно, и индекс тоже больше .... хотя первый индекс по количеству полей и может данных, больше ....

Хм, что ли почитать по теории баз данных? Что посоветуешь?  :)

Да точно, сразу после изучения BC400 (если честно и его не читал), надо начинающим абаперам, сразу же читать BC490 (Оптимизация)....
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #118 : Август 07, 2009, 10:41:28 pm »
You are not allowed to view links. Register or Login
Правда, так и не понял, почему все-таки при выборе индекса, рассматривалось поле zuonr, по моему ситуация в обеих случаях аналогична, в первом индексе есть два поля которые иду подряд, во втором тоже 2 поля, которые идут подряд..... далее идут поля которые
Ну что тебе сказать... так как слова B-Tree тебе ничего не говорят то как бы сложно объяснить почему оно так берет индексы, я вот попытался но похоже не получилось. Так что проехали.

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #119 : Август 07, 2009, 11:43:27 pm »
Ок, может на досуге почитаю про твои бе-три  :)
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #120 : Август 08, 2009, 12:13:51 am »
You are not allowed to view links. Register or Login
Ок, может на досуге почитаю про твои бе-три  :)
Да оно только зря время потратишь.. .читать надо что-то про то как строяться индексные файлы в базах данных и далее по нарастающей... а так оно все равно ничего не ясно будет.

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #121 : Август 08, 2009, 12:15:24 am »
Цитата: Uukrul  link=topic=174.msg4658#msg4658 date=1249679631
Да оно только зря время потратишь.. .читать надо что-то про то как строяться индексные файлы в базах данных и далее по нарастающей... а так оно все равно ничего не ясно будет.

Может и точно, зачем в такие дебри залазить  :)
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #122 : Август 10, 2009, 01:04:41 pm »
Опять я с теми же вопросами, делаю ту же выборку, только поменял № счета и вид документа, и снова выборка не отрабатывает за 20 мин.

Код: 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 = '0063109900' AND
      blart = 'WA'     AND
      budat IN so_budat         AND
      shkzg = 'H'
      GROUP BY bukrs hkont zuonr  budat shkzg  blart.

Уже все мозги сломал, где что не так?
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #123 : Август 10, 2009, 01:09:51 pm »
You are not allowed to view links. Register or Login
Опять я с теми же вопросами, делаю ту же выборку, только поменял № счета и вид документа, и снова выборка не отрабатывает за 20 мин.
Ну план запроса однако давай... какие индексы потянулись, какие есть?

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #124 : Август 10, 2009, 01:40:00 pm »
Не получается просмотреть трасировку, выборка падает по таймату, и в трассировке не видно данных про выборку с bsis..... очень странно .....

Самое странное, стоит поменять номер счета на такой же как в предидущем примере, и все работает очень быстро........ разница в данных только в том что для счета 0063109900 не заполняется поле zuonr

Так работает быстро (но не правильно)
Код: 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    
      blart = 'WA'           AND
      budat IN so_budat        AND
      shkzg = 'H'
      GROUP BY bukrs hkont zuonr  budat shkzg  blart.

А так сильно долго работает:
Код: 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 ='0063109900' AND
      blart = 'WA'           AND
      budat IN so_budat        AND
      shkzg = 'H'
      GROUP BY bukrs hkont zuonr  budat shkzg  blart.

Для первого запроса - трасировка на рис. ниже
« Последнее редактирование: Август 10, 2009, 01:56:18 pm от Паганель »
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #125 : Август 10, 2009, 02:21:07 pm »
Можно сказать что проблему решил, выборка валилась из-за очень больших объемов данных, данный счет у нас перерасчетный, и проводки по нему возникали по каждой позиции документа материала, определенного вида ......
Попробую сделать аналогичную выборку через faglflext

Спасибо за помощь и участие.
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Reputation Power: 0
  • Удав has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
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 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #127 : Август 10, 2009, 03:51:31 pm »
You are not allowed to view links. Register or Login
Большой объем данных никак не влияет на выбор индекса :)
Та ему не поможет... у него данных он же говорит по счету много, так что падать будет при любом раскладе для этого счета.

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #128 : Август 10, 2009, 04:50:03 pm »
Да вряд ли поможет  :(
..............................
Не помогло, но за советы все равно - Спасибо
« Последнее редактирование: Август 10, 2009, 04:54:58 pm от Паганель »
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Reputation Power: 0
  • Удав has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
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 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #130 : Август 10, 2009, 05:17:19 pm »
You are not allowed to view links. Register or Login
не факт :)
Да у него дамп из-за памяти, а не времени выборки, так что факт  ::) или есть способ динамического сжатия выбираемой информации  на леут  ;D

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Reputation Power: 0
  • Удав has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
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 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #132 : Август 10, 2009, 05:52:51 pm »
You are not allowed to view links. Register or Login
Это же сколько нужно записей выбрать, чтобы лимита памяти достичь :)
Ну так кто ж его знает какая у него там машинка стоит и сколько памяти на процесс выделено... и что у него еще в памяти крутиться кроме этого запроса. Кстати у него ритейл, так что... количество документов там может быть ну очень большим.

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Reputation Power: 0
  • Удав has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
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 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • 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, которая позволяет выгружать данные во внутреннюю таблицу порциями.
Вот сейчас автора запроса придет и узнаем что у него там на процесс выделено...

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #135 : Август 10, 2009, 09:34:46 pm »
Ага, узнаете  :)...... про.....возился  :)  с данным запросом ..... не получится, ну очень много документиков, реально берем 200 магазинов (отдельные заводы), половина продаж это как раз нужные мне (консигнация), данный счет содержит проводки по перерасчетному счету для сохранения себестоимости реализованного товара, представь выторг крупных торговых сетей,  по алкоголю, и на каждую позицию товара (материала) создается проводка по нужному мне счету .....  :), лучше можно было придумать только "полная выборка bseg" меня админы потом медленно четвертуют  :)

PS (Uukrul): Отредактировано по просьбе Паганеля.
« Последнее редактирование: Август 10, 2009, 10:21:57 pm от Uukrul »
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Reputation Power: 0
  • Martha has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
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  и если можно что-то похожее в качестве пояснения.
спасибо

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #137 : Август 11, 2009, 09:15:30 am »
Ну с помощью se30 можно производить поиск "узких мест" в программе, т.е. тех которые выполняются слишком долго  :)
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Reputation Power: 0
  • Martha has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
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
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
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 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • 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
  • Reputation Power: 0
  • Martha has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
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 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • 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
  • Reputation Power: 0
  • Martha has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
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 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • 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
  • Reputation Power: 0
  • Martha has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
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 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • 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
  • Reputation Power: 0
  • Удав has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
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 650
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • 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
  • Reputation Power: 0
  • Удав has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
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

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #150 : Сентябрь 10, 2009, 11:47:59 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 .

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

вообще стоит ли их куда-нибудь в отдельное место перемещать?
Собственно, варианты «устранения» хардкода уже перечислены, резюмируем...

1. Вынос на селекционный экран. Заполнение/изменение: сохранение варианта отчета и последующий его вызов запуском транзакции, или программно до вывода экрана (коррелирует с п.2). Поля можно сделать нередактируемыми или скрыть для обычных пользователей (выводить для редактирования только при наличии полномочий) и т.п., т.е. существуют вариации. Изменение константы может быть завязано как на ответственного ("избранного" ;D) пользователя, так и на абапера.
2. Вынос в константы. Изменение завязано исключительно на абапера.
3. Вынос в таблицу БД, генерация диалога её ведения, интерфейса загрузки из файла для первоначального заполнения, если данных много (пример: таблица "статья - счета" для баланса, отчета о ПиУ в бухгалтерии и др.), создание объекта полномочий для ответственных пользователей. Изменение завязано на ответственного пользователя.

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

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #151 : Сентябрь 12, 2009, 09:42:29 am »
Привет всем.

Извиняюсь что не так часто сейчас захожу теперь в эту интересную тему, тут просто проект стартанунл, тут и спать некогда :).

Спасибо за идеии, как только освобожусь, возьмусь снова за абапчик, задачу то сделать надо.

Теперь правда проблема не с bsis, а с первой выборкой по mkpf+mseg, не успевает зараза отработать.

Думаю попробовать пару идей подкинутых вами:

- SELECT .. PACKAGE SIZE - вдруг валится из-за памяти (хотя ошибка TIME_OUT)
- может попробовать SELECT .... ENDSELECT.


Кстати, тут уже говорили что можно сбрасывать время тайоута, используя commit work, как Вы думаете: можно ли использовать его в SELECT .... ENDSELECT, будет ли работать?


- попробую использовать mkol + mkolh - правда еще не копал, каким же образом юзать эту связку, нету ли у кого-то примера?
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Reputation Power: 0
  • Удав has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #152 : Сентябрь 17, 2009, 11:56:34 am »
Посмотри решения в нотах You are not allowed to view links. Register or Login и You are not allowed to view links. Register or Login.

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

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Reputation Power: 1
  • Паганель has no influence.
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #153 : Сентябрь 17, 2009, 03:48:01 pm »
You are not allowed to view links. Register or Login
Посмотри решения в нотах You are not allowed to view links. Register or Login и You are not allowed to view links. Register or Login.

Спасибо, почитаю
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Reputation Power: 0
  • darth has no influence.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #154 : Сентябрь 23, 2009, 09:54:50 am »
мои 20 тугриков  :)
--
select в sorted table намного быстрее, чем
select в standard (или не дай бог with header line) + sort
только что замерял:
sorted 1774,
standard+sort 75479,
замерял на AUFK (~15000 записей)
--
для чего сортировка? - что потом read....binary search
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #155 : Сентябрь 23, 2009, 10:24:46 am »
Welcome, darth!
Здрав будь, ждем от тебя дальнейших сообщений для ликбеза по матчасти. ;)

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Reputation Power: 0
  • darth has no influence.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #156 : Сентябрь 23, 2009, 11:21:28 am »
еще интересная фича...
в случае когда нам в цикле (например по fi-документам, очень много записей) нужно к каждому кредитору вытащить наименование (причем кредиторов заведомо намного меньше чем документов).
в принципе есть несколько вариантов реализации, наиболее быстрым мне кажется следующий:
Код: You are not allowed to view links. Register or Login
* Наименование кредитора
TYPES: BEGIN OF t_lfa1,
       lifnr TYPE lifnr,
       name1 TYPE name1_gp,
         END OF t_lfa1.
DATA: gs_lfa1 TYPE t_lfa1,
      gt_lfa1 TYPE SORTED TABLE OF t_lfa1
              WITH UNIQUE KEY lifnr.
DATA: gt_report TYPE TABLE OF bseg,
      gs_report TYPE bseg.
FIELD-SYMBOLS: <fs_lfa1> LIKE LINE OF gt_lfa1.
* --------------------------------------------
LOOP AT gt_report INTO gs_report.
* Какой-либо код
* ..............
* Какой-либо код
  IF report-lifnr IS NOT INITIAL.
* тут SELECT SINGLE заменим на хитрую конструкцию
    UNASSIGN <fs_lfa1>. " Dump off
    READ TABLE gt_lfa1 ASSIGNING <fs_lfa1> WITH KEY
                 lifnr = gs_report-lifnr BINARY SEARCH.
    IF sy-subrc <> 0.
* Не нашли однако! надо селектнуть и добавить по индексу,
* который определил read (он установил SY-TABIX именно в то место,
* где в сортированной таблице должна была быть запись)!
      IF <fs_lfa1> IS NOT ASSIGNED.
        ASSIGN gs_lfa1 TO <fs_lfa1>.
      ENDIF.
      SELECT SINGLE name1 INTO <fs_lfa1>-name1 FROM lfa1
       WHERE lifnr = gs_report-lifnr.
      IF sy-subrc = 0.
        <fs_lfa1>-lifnr = gs_report-lifnr.
        INSERT <fs_lfa1> INTO gt_lfa1 INDEX sy-tabix.
      ENDIF.
    ENDIF.
    gs_report-lifname = <fs_lfa1>-name1.
  ENDIF.
* Какой-либо код
* Модификация основной таблицы GT_REPORT
* Какой-либо код
ENDLOOP.
« Последнее редактирование: Сентябрь 23, 2009, 03:21:37 pm от Dmitriy »
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #157 : Сентябрь 23, 2009, 11:37:48 am »
Т.е. смысл в том, что мы не выбираем сразу всю таблицу LFA1 во внутреннюю gt_lfa1 (как этому учил нас ну ты помнишь кто ;)), а делаем это по необходимости, постепенно, в процессе цикла по позициям д-тов FI, экономя тем самым время и память, поскольку все кредиторы не понадобятся...

P.S. Уже не помню, писал или нет, что для экономии памяти после обработки делать FREE уже "ненужных" вн. таблиц со вспомогательными данными (наименования и пр.). Если, конечно, это критично.

Добавлено: надо будет откатать решение и подредактировать свой пост про это дело...
« Последнее редактирование: Сентябрь 23, 2009, 11:48:11 am от Dmitriy »

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Reputation Power: 0
  • darth has no influence.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #158 : Сентябрь 23, 2009, 11:46:09 am »
да, выбирать всю немного накладно - вдруг их там много (например у меня 40тысяч),
выбирать с for all enrtyes - тоже геморно, т.к. в таблице доков (по которой будет for all enrtyes)
например 200 тысяч позиций, да еще и ПОВТОРЯЮТСЯ кредиторы (это очень важно что они повторяются - вышеупомянутым кодом мы уходим от повторения!)
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Reputation Power: 0
  • darth has no influence.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #159 : Сентябрь 23, 2009, 11:59:43 am »
еще интересная возможность...
иногда берет сомнение какой вариант кода отработает быстрее...
можно довольно быстро и корректно замерить (например два варианта одного селекта)
в транзакции SE30,
заходим в нее и нажимаем сверху кнопку "советы",
видим два окошечка - в каждом можно написать (вставить из буфера) кусок кода,
нажав кнопку наверху "Измерить время выполнения" мы увидим над каждым из окон время выполнения.
--
причем можно сравнивать не только свои проги, но и выбрать в дереве слева примеры по быстродействия SAP...
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Reputation Power: 0
  • darth has no influence.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #160 : Сентябрь 23, 2009, 12:25:16 pm »
кхм... в коде косячок есть небольшой - а поправить свое сообщение я не могу - страннаааа...  ???

Dmitriy: подправил, структурировал немного. Просто время, отпущенное для редактирования своего сообщения ограничено. ;)
« Последнее редактирование: Сентябрь 23, 2009, 02:13:22 pm от Dmitriy »
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Reputation Power: 0
  • Удав has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #161 : Сентябрь 23, 2009, 04:00:05 pm »
You are not allowed to view links. Register or Login
еще интересная фича...
в случае когда нам в цикле (например по fi-документам, очень много записей) нужно к каждому кредитору вытащить наименование (причем кредиторов заведомо намного меньше чем документов).
Самым быстрым будет использование сортированной таблицы (SORTED TABLE) с уникальным ключом
Тогда не придется дополнительно искать, куда вставить запись. ;)

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Reputation Power: 0
  • darth has no influence.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #162 : Сентябрь 23, 2009, 04:29:33 pm »
она и так сортированная и с уникальным ключом (см код)...
при sy-subrc <> 0 после чтения из нее..
sy-tabix содежит тот индекс где должна была б находиться запись - это очень интересный момент (специально сегодня этот прикол проверял)! вставка по индексу быстрее просто вставки в сортированную таблицу.
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Reputation Power: 0
  • Удав has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #163 : Сентябрь 24, 2009, 10:27:45 am »
настолько, что выгоднее писать дополнительный код? :)

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Reputation Power: 0
  • darth has no influence.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #164 : Сентябрь 24, 2009, 10:39:36 am »
время будет - замеряю  ;)
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Reputation Power: 0
  • darth has no influence.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #165 : Сентябрь 25, 2009, 01:44:09 pm »
только что проверил:
1. insert без инекса в сортированную таблицу не работает!
2. append работает, но только в том случае, если данные выбираются в порядке сортировки,
   т.е. таблица по которой loop остортирована также как предполагается в sorted table,
   попробовав отсортировать gt_report descending (тогда как sorted gt_lifnr1 ascending) попал
   в дамп. (это связано с тем, что аппенд добавляет в конец таблицы, не смотря на то что она
   sorted, и байнари серч найдя значение 5, уже ек идет дальше в поиске нужного значения 4,
   и пото пытается вставить 4, сортировать же gt_report как раз не хочется - ибо он очень
   большой, так что insert по индексу мне видится наиболее разумным решением).
см код...
Код: You are not allowed to view links. Register or Login
REPORT  ZTEST_12                                .
                        .
* Наименование кредитора
TYPES: BEGIN OF t_lfa1,
       lifnr TYPE lifnr,
       name1 TYPE name1_gp,
         END OF t_lfa1.
DATA: gs_lfa1 TYPE t_lfa1,
      gt_lfa1 TYPE SORTED TABLE OF t_lfa1
              WITH UNIQUE KEY lifnr.
DATA: gt_lfa_main TYPE standard TABLE OF t_lfa1,
      gs_report TYPE t_lfa1.
FIELD-SYMBOLS: <fs_lfa1> LIKE LINE OF gt_lfa1.
* --------------------------------------------

select lifnr
  into table gt_lfa_main
  from lfa1
*  up to 10000 rows
.
sort gt_lfa_main by lifnr DESCENDING.

LOOP AT gt_lfa_main INTO gs_report.
* Какой-либо код
* ..............
* Какой-либо код
  IF gs_report-lifnr IS NOT INITIAL.
* тут SELECT SINGLE заменим на хитрую конструкцию
    UNASSIGN <fs_lfa1>. " Dump off
    READ TABLE gt_lfa1 ASSIGNING <fs_lfa1> WITH KEY
                 lifnr = gs_report-lifnr BINARY SEARCH.
    IF sy-subrc <> 0.
* Не нашли однако! надо селектнуть и добавить по индексу,
* который определил read (он установил SY-TABIX именно в то место,
* где в сортированной таблице должна была быть запись)!
      IF <fs_lfa1> IS NOT ASSIGNED.
        ASSIGN gs_lfa1 TO <fs_lfa1>.
      ENDIF.
      SELECT SINGLE name1 INTO <fs_lfa1>-name1 FROM lfa1
       WHERE lifnr = gs_report-lifnr.
      IF sy-subrc = 0.
        <fs_lfa1>-lifnr = gs_report-lifnr.
        append <fs_lfa1> TO gt_lfa1.
      ENDIF.
    ENDIF.
    gs_report-name1 = <fs_lfa1>-name1.
  ENDIF.
* Какой-либо код
* Модификация основной таблицы GT_REPORT
* Какой-либо код
ENDLOOP.
« Последнее редактирование: Сентябрь 25, 2009, 01:51:04 pm от darth »
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Reputation Power: 0
  • Удав has no influence.
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #166 : Сентябрь 25, 2009, 02:26:36 pm »
Я имел в виду, что нужно сразу работать с таблицей типа SORTED TABLE  :)
С такой INSERT .. INTO TABLE работает на "ура".

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Reputation Power: 0
  • darth has no influence.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #167 : Декабрь 14, 2009, 01:44:11 pm »
как правильнее организовать цикл по большой внутренней таблице с условиями:
Код:
Код: You are not allowed to view links. Register or Login
tables: bkpf.

data: itab type sorted table of bkpf