2016-03-17 4 views
3

У нас есть наши витрины/хранилища данных на Oracle 11g, реализованные в виде звездной схемы. Бизнес-отчеты создаются с использованием OBIEE. Я исхожу из опыта ETL и имею очень мало знаний в OBIEE.Настройка OBIEE сгенерированных запросов SELECT

После разработки OBIEE RPD я вижу, что OBIEE начинает генерировать запросы SELECT в фоновом режиме для подачи данных в отчеты. Во многих случаях я заметил, что запросы SELECT не оптимизированы (большая таблица фактов полностью сканируется более одного раза в отдельных предложениях WITH).

Когда производительность отчета плохая, запросы OBIEE отправляются в команду ETL для настройки производительности. Я смущен тем, как я могу их настроить, потому что они сгенерированы автоматически. Я знаю, что есть возможность писать пользовательский sql в OBIEE (без прохождения через RPD) для каждого отчета, но наши стандарты этого не позволяют, и я также думаю, что он не использует преимущества OBIEE.

У кого-нибудь возникли проблемы, как указано выше? Как настроить такие запросы?

ответ

1

Если у вас есть лицензии на диагностику и тюнинг, вы можете запустить SQL Tuning Advisor. Советник по настройке SQL запускает оптимизатор в режиме настройки, и он может генерировать SQL-профиль с лучшим планом выполнения. Иногда советчик рекомендует индексы для настройки. Оба SQL-профили и индексы не требуют изменения приложения.

+0

Thanks Roger. Да, я понимаю, что план выполнения может быть проанализирован, и любой индекс может быть добавлен для повышения производительности. Что делать, если OBIEE сгенерированный запрос плох, есть ли способ справиться с этим? – museshad

+0

Я не знаком с OBIEE, но я сделал много реляционного сопоставления объектов из Java в Oracle. В этом случае сопоставитель O-R иногда генерирует плохой исполняемый SQL со сложными условиями соединения. Чтобы решить в этих случаях, я обычно создавал настроенное представление соединения на стороне Oracle, а затем сопоставлял его. Преимущество стороны заключалось в том, что если бы мне нужно было настроить запрос в будущем, мне не нужно было касаться стороны приложения, только стороны Oracle. Я думаю, что одна и та же концепция может быть использована в OBIEE, где пользовательский запрос создается против представления, а не из базовых таблиц. –

+0

Спасибо Роджер. Существует способ написать собственный SQL (как и ваши представления) в OBIEE, но это, как правило, не является хорошей практикой, поскольку после этого вы можете делать другие оптимизации RPD (например: применение статистических функций) в OBIEE. – museshad

2

Во-первых, вы правы, что пользовательский SQL (известный как прямой запрос к базе данных) не является хорошей идеей в принципе, хотя иногда это полезно. Но это не решение вашей проблемы.

Настройка запросов OBI, сгенерированных, является задачей OBD RPD для разработчика OBI; настройка базы данных для генерируемых запросов OBI - это задача базы данных/ETL. Но вы не можете сделать это без другого - OBI должен быть спроектирован так, чтобы генерировать подходящие запросы, и база данных должна быть сконструирована таким образом, чтобы подходящие полезные могут быть сгенерированы для ответа на заданный вопрос ,

OBI в основном генератор SQL, и если модель РПД является плохо неоптимальным, то результирующий запрос будет плохо неоптимальным. OBI будет генерировать SQL на основе информации, имеющейся в RPD, о макете и структуре данных и базы данных.

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

+0

Спасибо за комментарии. Я понимаю вашу мысль. Я пытаюсь выяснить, могу ли я получить более конкретную информацию - есть ли какие-либо индикаторы, чтобы сказать, что RPD недостаточно хорошо разработан для генерации оптимальных запросов OBI? Точно так же есть индикаторы, которые звездообразная схема не хорошо спроектирована для оптимального выполнения OBI-запросов. – museshad

+0

@museshad На самом деле нет индикаторов, это сводится к знанию данных и навыкам с базой данных RPD /. – jackohug

2

Как говорит глагов, OBIEE является генератором SQL, а общий подход - попытаться оптимизировать запрос, сгенерированный OBIEE, а не пытаться изменить этот запрос. Так или иначе, в зависимости от проблемы с производительностью, вы можете попробовать некоторые трюки. Во-первых, ваш стол разделен, и ваши отчеты могут извлечь выгоду из участия? Во-вторых, добавьте индексы в таблицу фактов, чтобы любой фильтр по измерениям мог получить доступ к таблице фактов. В-третьих, создание таблиц агрегирования, возобновление таблицы фактов, поэтому, когда в отчетах нет подробных сведений, вы сначала получаете доступ к таблице agregate с гораздо меньшим количеством данных и только по мере того, как пользователи разворачивают структуру (и при этом они применяют фильтры к интересующим их данным), что они получают доступ к таблице подробных фактов, но применяют фильтры, чтобы избежать полного сканирования. Вы также можете сказать, что OBIEE использует подсказки при доступе к таблице, хотя, как и в случае с прямым запросом базы данных, я бы не рекомендовал его, я бы попытался сначала оптимизировать, используя первые три aproaches. С уважением

+0

Спасибо Ana. Я проверю подходы, о которых вы упомянули. – museshad

0

Я еще не имел большого успеха с советником по настройке SQL. Некоторый опыт настройки SQL и немного исследований могут, как правило, давать гораздо лучший план.

Если все слои построены хорошо, и все, что вам нужно, это окончательная настройка, затем добавьте скрытый столбец в начало отчета (ответ/анализ) с помощью подсказки SQL.

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