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

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


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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