Текущее время: Вт, июл 29 2025, 13:58

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Пт, ноя 16 2012, 16:06 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Parazit написал:
В общем то нормальный селект, переносить в абап - самое последнее дело, на то и SQL, чтобы данными ворочать.

Интересно, почему в R/3 применяется 3-х звенная архитектура клиент-сервер? :D

Насколько я понимаю, задача выбрать закупочные заказы, для которых выполняются условия:

1. Заказ создан определенным пользователем и/или имеет определенный номер
2. Есть хотя бы одна позиция с нужным заводом (EXISTS ... ekpo)
3. Есть запись о выходном документе (NAST):
- с видом выходного документа ZEDI
- сформированная в определенное время(?)
- со статусом "обработано" или
- со статусом "не обработано", если для документа не было любых(!) выходных документов со статусом "обработано" или
- со статусом "ошибка", если для документа не было любых(!) выходных документов со статусом "обработано" или "не обработано"

По-моему в постановке задачи или в реализации есть спорные моменты..Хотелось бы услышать, что в результате должно получиться. :roll:

По select:
1. Из NAST лучше выбирать с указанием KAPPL, чтобы было попадание в первичный индекс.
2. лучше разбить запрос на 2 части:
-выборка из EKKO, EKPO и NAST (без условий NOT EXIST). Цикл по выборке для удаления ненужных записей по NAST-VSTAT
-по полученным записям отдельные выборки из b027 и nach, v_user_name, lfa1.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Пт, ноя 16 2012, 16:25 
Модератор
Модератор
Аватара пользователя

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

Практически согласен с Удавом, разве что выбирал бы сразу с NACH, V_USER_NAME, LFA1. А вот BO27 там в целом непонятно для чего. Можно выбросить, мне кажется.


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

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Удав написал(а):
Parazit написал:
В общем то нормальный селект, переносить в абап - самое последнее дело, на то и SQL, чтобы данными ворочать.

Интересно, почему в R/3 применяется 3-х звенная архитектура клиент-сервер? :D

Потому же, что и везде. Сервер приложений реализует: бизнес-логику, безопасный доступ, целостность данных, кеширование данных и т.д. И точно не должен быть помойкой ненужных данных. В идеале приложение должно получать только те данные, которые влияют на результат. Поэтому для оптимизации необходимо максимум усилий прилагать на уровне СУБД - конструкция запроса, индексация, нормализация... Перенос проблемы на сервер приложения я рассматриваю как "привязывание костылей", и стараюсь использовать его в крайних случаях.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Пн, ноя 19 2012, 08:51 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Parazit написал:
Сервер приложений реализует: бизнес-логику, безопасный доступ, целостность данных, кеширование данных и т.д. И точно не должен быть помойкой ненужных данных. В идеале приложение должно получать только те данные, которые влияют на результат. Поэтому для оптимизации необходимо максимум усилий прилагать на уровне СУБД - конструкция запроса, индексация, нормализация... Перенос проблемы на сервер приложения я рассматриваю как "привязывание костылей", и стараюсь использовать его в крайних случаях.

Идеал практически недостижим :)
На практике нужно здраво распределять нагрузку между сервером БД и серверами приложений.
Как правило 3-х звенная архитектура легче масштабируется именно за счет серверов приложений, а не серверов БД.
Кроме этого, обработка данных в оперативной памяти быстрее, чем построение сложных выборок в БД.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Пн, ноя 19 2012, 10:36 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Мне ближе позиция Parazitа. Я стараюсь максимально сузить выборки на стороне сервера БД. Но не в такой категоричной форме. Иначе она становится внутренне противоречивой.

Parazit написал:
Сервер приложений реализует: ... кеширование данных ...

Parazit написал:
... переносить в абап - самое последнее дело, на то и SQL, чтобы данными ворочать ...


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


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

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Пономарев Артем написал:
...В реальной же жизни бывают ситуации, когда и на клиенте данные приходится кэшировать, не то что на сервере приложений.

Абсолютно согласен, реальная жизнь вносит коррективы, я лишь говорю о приоритетах: 1 - СУБД, 2 - серв. пролож, 3 - клиент. А категоричен в такой степени потому, что наблюдаю сплошное нежелание большинства разработчиков хоть сколько-нибудь задуматься на 1-м уровне, сразу тянут во 2-й.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Пн, ноя 19 2012, 11:29 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Parazit написал:
я лишь говорю о приоритетах: 1 - СУБД, 2 - серв. пролож, 3 - клиент. А категоричен в такой степени потому, что наблюдаю сплошное нежелание большинства разработчиков хоть сколько-нибудь задуматься на 1-м уровне, сразу тянут во 2-й.

Так понятно, что во всем нужно соблюдать баланс: у нас например базисники регулярно выявляют "тяжелые" запросы к БД, которые написали разработчики.
И далеко не все запросы удается оптимизировать на 1-м уровне.
Оптимизация запросов на 1-м уровне зачастую требует глубоких знаний в конкретной СУБД, тогда как работа с внутренними таблицами интуитивно понятна практически любому программисту, знакомому с индексами.
upd:
Оптимизация программ кстати 3-х ступенчатая:
1. Оптимизация выполнения ABAP-кода
2. Оптимизация запросов к БД
3. Оптимизация памяти

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Пн, ноя 19 2012, 12:12 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Удав написал(а):
Parazit написал:
Сервер приложений реализует: бизнес-логику, безопасный доступ, целостность данных, кеширование данных и т.д. И точно не должен быть помойкой ненужных данных. В идеале приложение должно получать только те данные, которые влияют на результат. Поэтому для оптимизации необходимо максимум усилий прилагать на уровне СУБД - конструкция запроса, индексация, нормализация... Перенос проблемы на сервер приложения я рассматриваю как "привязывание костылей", и стараюсь использовать его в крайних случаях.

Идеал практически недостижим :)
На практике нужно здраво распределять нагрузку между сервером БД и серверами приложений.
Как правило 3-х звенная архитектура легче масштабируется именно за счет серверов приложений, а не серверов БД.
Кроме этого, обработка данных в оперативной памяти быстрее, чем построение сложных выборок в БД.

Так и думал, что кто-нибудь скажет про недостижимость идеала. :) На то и идеалы, чтобы к ним стремиться! А если априори забивать на них, значит нет вектора, топтание на месте.
Насчет здравого распределения нагрузки полностью поддерживаю, именно об этом и говорю всё время.

Насчет быстроты обработки данных в оперативной памяти можно поспорить.
1. В затратах надо рассматривать всю цепочку от БД до клиента, а если из СУБД передали лишние данные - уже потеряли.
2. У сервера СУБД тоже есть оперативная память! :)
3. СУБД пишут ассы, полагаю они не задают в форумах вопросы об оптимизации запросов. А как напишет конкретный ABAP-ер - еще вопрос, если он не в состоянии оптимизировать выборку, он и в остальном накосячит.

p.s.
Кстати, как раз надысь задачу решали по оптимизации чужой разработки. Разумеется сначала решали чисто технически, не ломая алгоритмы. Индексы, кеширование, в ход пошла даже стандартная буферизация таблиц типа EKKO, EKPO и т.д. С трудом удалось достичь 2-х кратного ускорения. Однако пришлось анализировать алгоритм. Основным затратчиком оказался простой Loop в котором тупо перекладывались 9000 позиций заказа из одной вн. таблицы в другую. Вроде мелочь. Но когда выяснилось, что эта процедура выполняется для каждой позиции, да еще и 3 раза, то получилось 9000 * 9000 * 3 = 243000000. А из 9000 позиций реально нужна только одна. В общем после правки ускорилось раз в 10.
Вот и быстрая работа с оперативной памятью! Причем "писатель" сего даже после этого не поверил, что этот код такой затратный.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Пн, ноя 19 2012, 12:21 
Модератор
Модератор
Аватара пользователя

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

1. Степень и направления оптимизации выбираются исходя из текущих реалий конкретной ситуации и квалификации разработчика
2. Чем ниже опыт и квалификация специалиста - тем хуже итоговый результат (безотносительно того, запрос ли это к БД или алгоритм на ABAP)

Как-то так :)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Пн, ноя 19 2012, 14:59 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Parazit написал:
Кстати, как раз надысь задачу решали по оптимизации чужой разработки. Разумеется сначала решали чисто технически, не ломая алгоритмы. Индексы, кеширование, в ход пошла даже стандартная буферизация таблиц типа EKKO, EKPO и т.д. С трудом удалось достичь 2-х кратного ускорения. Однако пришлось анализировать алгоритм. Основным затратчиком оказался простой Loop в котором тупо перекладывались 9000 позиций заказа из одной вн. таблицы в другую. Вроде мелочь. Но когда выяснилось, что эта процедура выполняется для каждой позиции, да еще и 3 раза, то получилось 9000 * 9000 * 3 = 243000000. А из 9000 позиций реально нужна только одна. В общем после правки ускорилось раз в 10.
Вот и быстрая работа с оперативной памятью! Причем "писатель" сего даже после этого не поверил, что этот код такой затратный.

Очень показательный пример что важна в первую очередь голова, а использовать для обработки данных БД или сервер приложений - это уже вторично :)

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Пн, ноя 19 2012, 17:08 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Parazit написал:
СУБД пишут ассы, полагаю они не задают в форумах вопросы об оптимизации запросов.

В рамках оффтоп - сейчас изучаю книжку "Основы стоимостной оптимизации СУБД Oracle".
Автор как раз говорит о том, что о работе стоимостного оптимизатора Oracle с уверенностью ничего сказать нельзя :shumlol:
И приводит различные примеры (на основе 8, 9 и 10 версий Oracle), какие запросы работают хорошо, а какие - не очень.

ЗЫ: Думаю, что книжки хватит минимум на месяц :roll:

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Пн, ноя 19 2012, 17:34 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
В рамках оффтопа же:
Удав, мне кажется, несколько некорректный вывод.
Перед тем, как оптимизатор построит план выполнения, - конечно нельзя. Можно только предполагать. Но не из-за непредсказуемости оптимизатора, а из-за нашей заведомой неполноты знаний (черный ящик же).
После того, как оптимизатор построил неэффективный план выполнения, обычно не так сложно разобраться откуда ветер дует. Более того, в подавляющем большинстве случаев виноватой окажется протухшая статистика. Хотя ввести оптимизатор в заблуждение можно, но обычно это запросы не из того разряда, что используются в SAP ;)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Пн, ноя 19 2012, 17:58 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Пономарев Артем написал:
Но не из-за непредсказуемости оптимизатора, а из-за нашей заведомой неполноты знаний (черный ящик же).

Именно поэтому такие книги и пишутся. Я привел этот пример к тому, что разработчику легче научиться оптимизировать сложный ABAP-код(без черного ящика), а не сложный запрос к БД(с черным ящиком).
Пономарев Артем написал:
После того, как оптимизатор построил неэффективный план выполнения, обычно не так сложно разобраться откуда ветер дует.

Если рядом есть грамотный базисник, то да. Хотел бы я посмотреть на проект, где разработчики имеют доступ к тонкой настройке СУБД ;)
Пономарев Артем написал:
но обычно это запросы не из того разряда, что используются в SAP

Например, запрос из этого топика :D

А лучше всего, когда разработчик хорошо разбирается как в работе с БД, так и в работе ABAP-кода :pivo:

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Пн, ноя 19 2012, 19:00 
Модератор
Модератор
Аватара пользователя

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Вт, ноя 20 2012, 09:04 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, май 12 2008, 09:07
Сообщения: 334
Откуда: Tbilisi, GE
Пол: Мужской
Баш #413959 написал(а):
Словно умудренные жизненным опытом стервятники в пустыне, они смотрят вслед проползающим путникам.
На вопрос, где можно напиться, они долго обсуждают, нужна ли тебе вода и неизменно приходят к выводу, что нет, тебе, брат, вода ни к чему.
Неспешно перечисляют причины, по которым тебе лучше жить без воды.
И ни один из них не покажет в какой стороне колодец.


А в целом, я бы не был так критичен к вопросу переноса нагрузки от/к СУБД - у каждой из Продуктивных систем свое "узкое горло" и когда начинаются проблемы с производительностью отчетов, приходится эту проблему искать. В нашей нынешней Продуктивной системе наибольшую нагрузку дает трафик между базой данных и апликейшенами. Вот в результате огромного множества тестов с разными вариантами обработки выбрали самый оптимальный для нашего случай подход - максимальный перенос обработки запроса в СУБД. И самый заумный "select .... inner join..." отрабатывает намного быстрее, чем любая из распределенных выборок.


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

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


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

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


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

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