Текущее время: Пн, июл 28 2025, 21:21

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 47 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Пн, май 24 2010, 11:34 
Начинающий
Начинающий

Зарегистрирован:
Чт, ноя 22 2007, 18:23
Сообщения: 10
Откуда: Москва
Привет,

с чего бы это select с указанием FOR ALL ENTRIES по сортированной таблице (причём сортированную по полям, указанным во WHERE, т. е. по к-рым идёт join на внутреннюю таблицу) отрабатывает гораздо медленнее, чем тот же select с FOR ALL ENTRIES по той же таблице, но несортированной?

Или там не join вовсе, и FOR ALL ENTRIES по-другому организован?..
Где можно почитать про такие технические подробности FOR ALL ENTRIES и про интерпретацию планов с указанием внутр. таблиц?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Пн, май 24 2010, 11:54 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
1. Время выпролнения запроса FOR ALL ENTRIES не зависит от сортировки таблицы значений для WHERE.
2. F1.
3. Текст и план выполнения запроса всегда можно посмотреть в ST05.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Пн, май 24 2010, 15:48 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
somebody написал(а):
Или там не join вовсе, и FOR ALL ENTRIES по-другому организован?..


Воистину, ибо джойнить не с чем. Генерится довольно тупой код с перечислениями условий через OR. Если условий (то бишь записей внутр. таблицы) много, генерится несколько запросов.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Пн, май 24 2010, 17:12 
Начинающий
Начинающий

Зарегистрирован:
Чт, ноя 22 2007, 18:23
Сообщения: 10
Откуда: Москва
Пономарев Артем,

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

Parazit,

Про join я, конечно, ересь написал. Т. е. согласно документации, последовательно выполняются операторы с подставленными значениями и объединяются. И вот тут-то и вопрос. Происходит, возможно, рекомпиляция планов, что на больших наборах может приводить к замедлению (сам боролся с подобным в Oracle).

В общем, придётся планы изучать...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Пн, май 24 2010, 18:08 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Я потому и советовал ST05 посмотреть, что там этот "довольно тупой" текст запроса можно посмотреть. Т.е. увидеть, что сортировка ни при чем.
По поводу изменения плана запроса - тоже маловероятно. В этом смысле Oracle птица гордая, не пнешь - не полетит (либо сбор статистики, либо прямое указание оптимизатору запросов).
Так что разумного объяснения я не вижу.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Пн, май 24 2010, 20:43 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
А я вот вижу рациональное объяснение: расхождение возможно в случае если выполнялась сперва выборка по сортированной, а потом - по обычной таблице. Данные кэшируются на уровне того же оракла (раз Вы работали с ним, то про алгоритм LRU должны были слышать). Т.е., для чистоты эксперимента, имхо, следует несколько раз прогнать выборку по одному алгоритму и для измерения взять последние значения. Ну а потом повторить все тоже самое для второго. В случае если это не проясняет ситуацию, то надо ST05 в руки и просто просмотреть план запроса.

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Пн, май 24 2010, 23:07 
Специалист
Специалист

Зарегистрирован:
Ср, апр 29 2009, 07:08
Сообщения: 197
Откуда: AUS RUSSLAND
Пол: Мужской
Приведите свой запрос, тогда хоть будет понятно, что за буферизация и индексы у таблицы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Вт, май 25 2010, 09:29 
Почетный гуру
Почетный гуру
Аватара пользователя

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

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Вт, май 25 2010, 10:03 
Начинающий
Начинающий

Зарегистрирован:
Чт, ноя 22 2007, 18:23
Сообщения: 10
Откуда: Москва
Цитата:
Вообще FOR ALL ENTRIES лучше не использовать.

Parazit,

это сильное утверждение! Хотя, судя по реализации FOR ALL ENTRIES... :(
А что можете предложить на замену?

Или же "правильный" алгоритм: всё нужное закачивать во внутренние таблицы и задействовать loop/provide/read, не сочетая выборки из словарных и внутренних таблиц?
По-моему, это не всегда возможно...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Вт, май 25 2010, 14:01 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
somebody написал(а):
Цитата:
Вообще FOR ALL ENTRIES лучше не использовать.

Parazit,

это сильное утверждение! Хотя, судя по реализации FOR ALL ENTRIES... :(
А что можете предложить на замену?

Или же "правильный" алгоритм: всё нужное закачивать во внутренние таблицы и задействовать loop/provide/read, не сочетая выборки из словарных и внутренних таблиц?
По-моему, это не всегда возможно...

Бывает так, что много быстрее сделать два отдельных селекта и потом соединить из по средствам loop + read table binary search.
Но это зависит от многих факторов, например какие таблицы, сколько записей, какие данные имеем для выборки, по каким полям и т.д.
Действительно, приведите Ваш запрос.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Вт, май 25 2010, 15:08 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
somebody написал(а):
Parazit,
это сильное утверждение! Хотя, судя по реализации FOR ALL ENTRIES... :(
А что можете предложить на замену?

Тут такой подход - если для выборки требуется FOR ALL ENTRIES (или вообще любые внутренние таблицы), значит вы делаете что то неправильно, например:
- создали кластерную таблицу и теперь пытаетесь считать из нее данные;
- используете составные ключи в одном поле (типа BKPF-AWKEY);
- используете вычисляемые поля, типа GLT0-TSL01, GLT0-TSL02...
К сожалению, SAP уже во многом об этом "позаботилась" и мы вынуждены использовать внутренние таблицы.

На замену, в собственных разработках, могу предложить только правильную нормализацию данных и проблем с JOIN не будет.

somebody написал(а):
Или же "правильный" алгоритм: всё нужное закачивать во внутренние таблицы и задействовать loop/provide/read, не сочетая выборки из словарных и внутренних таблиц?
По-моему, это не всегда возможно...

Это как раз пример самого неправильного алгоритма. В идеале нужно обходиться совсем без внутренних таблиц. Например, если ваш отчет фактически должен содержать 3 записи с агрегированными суммами по некой аналитике, то идеальным будет запрос, возвращающий готовый результат. Простейший вариант, использующий SELECT и WRITE вполне удовлетворяет этому требованию. На крайняк можно хранить во внутр. таблице готовый результат, т.е. те самые 3 строки.
Понятно, что идеалы недостижимы, но они для того и существуют, чтобы к ним стремиться. ;)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Вт, май 25 2010, 15:31 
Менеджер
Менеджер

Зарегистрирован:
Чт, янв 20 2005, 08:34
Сообщения: 573
Пол: Мужской
Parazit написал:
В идеале нужно обходиться совсем без внутренних таблиц.


Не быть такому. Это странный идеал.

_________________
Волю в кулак, мышцы в узду, работай себе и не ахай!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Вт, май 25 2010, 15:56 
Почетный гуру
Почетный гуру
Аватара пользователя

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


Не быть такому. Это странный идеал.

Разумеется не быть, САПа не даст. Данное утверждение касается только обращения с СУБД. Я исхожу из того, что SQL - очень мощный самодостаточный язык. По большей части внутренние таблицы используют из-за плохого понимания SQL (исключая вышеописанные случаи с класт. табл. и т.д.). Я сам прошел по этим граблям. :)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Вт, май 25 2010, 17:00 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Parazit написал:
По большей части внутренние таблицы используют из-за плохого понимания SQL (исключая вышеописанные случаи с класт. табл. и т.д.).

Да ладно, с вашим ли опытом быть таким категоричным? :)
Использование внутренних таблиц позволяет упростить запросы, а значит их проще отлаживать и оптимизировать.
Также нагрузка с сервера БД (который у нас один) переносится на сервера приложений (которых у нас много).
Сам САП так и рекомендует - запросы делать попроще, обработку данных по возможности переносить на сервер приложений - думаете это они с жиру бесятся? :)
Просто нужно меру во всем знать - деятели, которые читают весь bseg во внутреннюю таблицу также вредны, как и деятели, джоинящие десяток таблиц в запросе.
Понятно что есть случаи когда все проще и лучше сделать одним запросом - так на то голова и нужна, чтоб определить как в данном конкретном случае будет лучше. Главное не зацикливаться на какой то одной концепции :)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Вт, май 25 2010, 20:38 
Менеджер
Менеджер

Зарегистрирован:
Чт, янв 20 2005, 08:34
Сообщения: 573
Пол: Мужской
ArmAnn написал:
Parazit написал:
По большей части внутренние таблицы используют из-за плохого понимания SQL (исключая вышеописанные случаи с класт. табл. и т.д.).

Да ладно, с вашим ли опытом быть таким категоричным? :)
Использование внутренних таблиц позволяет упростить запросы, а значит их проще отлаживать и оптимизировать.
Также нагрузка с сервера БД (который у нас один) переносится на сервера приложений (которых у нас много).
Сам САП так и рекомендует - запросы делать попроще, обработку данных по возможности переносить на сервер приложений - думаете это они с жиру бесятся? :)
Просто нужно меру во всем знать - деятели, которые читают весь bseg во внутреннюю таблицу также вредны, как и деятели, джоинящие десяток таблиц в запросе.
Понятно что есть случаи когда все проще и лучше сделать одним запросом - так на то голова и нужна, чтоб определить как в данном конкретном случае будет лучше. Главное не зацикливаться на какой то одной концепции :)


Согласен

_________________
Волю в кулак, мышцы в узду, работай себе и не ахай!


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

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


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

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


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

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