CftClub.ru
Клуб специалистов ЦФТ-Банк

План выполнения запроса

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
German
Профи


Вступление в Клуб: 25.06.2007
СообщениеСр Июн 20, 2007 19:29   План выполнения запроса Ответить с цитатой
Полезность: Нет оценки
Какие средства для просмотра планов выполнения запросов существуют в IBSO?

Создание эффективных запросов во многих случаях требует анализа планов их выполнения. Администратор словаря данных IBSO предоставляет следующие возможности просмотра планов
существующих представлений для просмотра и представлений для отчетов на закладке "Отладка" в редакторе представлений
произвольных запросов в диалоговом окне "Планы выполнения SQL запросов", вызываемом из меню "Сервер -> Проверки".

По материалам базы знаний сайта сопровождения ЦФТ-Банк http://supportobject.cft.ru/
German
Профи


Вступление в Клуб: 25.06.2007
СообщениеСр Июн 20, 2007 19:30   Планы каких запросов и представлений анализировать Ответить с цитатой
Полезность: Нет оценки
Планы каких запросов и представлений имеет смысл анализировать?

Если Вы намерены получить пользу от анализа плана – необходимо помнить, что план конечного запроса, непосредственно выполняемого для построения отчета или формирования набора записей в Навигаторе, будет отличаться от плана на закладке "Отладка" редактора представлений. Различия могут быть минимальными для представлений для просмотра и кардинальными в отношении отчетов.
Конечный план запроса для представления для просмотра можно получить следующим образом. Устанавливаем флаг "Служебный интерфейс" в диалоговом окне Навигатора "Настройка параметров работы", вызываемого через "Управление -> Настройка". В любом вновь открытом представлении теперь отображается кнопка "SQL" - предоставляющая возможность просмотра текста SQL-запроса. В зависимости от настроек представления и клиентского места – запрос накладывает дополнительные условия, сортировку, ограничение на число экземпляров в выборке из представления для просмотра, что может существенно повлиять на план выполнения запроса. Планы могут кардинально различаться при использовании пользовательских фильтров в Навигаторе или создании к представлению операций типа "Фильтр".
Конечный план запроса, выполняемого во время выполнения отчета, следует всегда брать из самого шаблона и анализировать в диалоговом окне "Планы выполнения SQL запросов". План самого представления для отчета в Администраторе практически всегда будет кардинально отличаться, поскольку обычно не содержит основных условий, ограничивающих выборку.
Используя диалоговое окно "Планы выполнения SQL запросов" можно также анализировать запросы, полученные в результате трансляции операции на Pl/Plus в пакеты Oracle.

По материалам базы знаний сайта сопровождения ЦФТ-Банк http://supportobject.cft.ru/
German
Профи


Вступление в Клуб: 25.06.2007
СообщениеСр Июн 20, 2007 19:32   Использование константных значений и переменных Ответить с цитатой
Полезность: Нет оценки
Как влияет использование константных значений и переменных на планы выполнения запросов?

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

Пример 1
Код:
select *
from Z#MAIN_DOCUM
where STATE_ID = :S
and C_DATE_PROV >= to_date('01/01/2006')

CRIT_RPT_PLAN SELECT STATEMENT Cost=1
2.1 TABLE ACCESS(BY INDEX ROWID) - Z#MAIN_DOCUM
3.1 INDEX(RANGE SCAN) - IDX_Z#MAIN_DOCUM_DATE_PROV(NON-UNIQUE)
или
select *
from Z#MAIN_DOCUM
where STATE_ID = :S
and C_DATE_PROV >= :SD

CRIT_RPT_PLAN SELECT STATEMENT Cost=1
2.1 TABLE ACCESS(BY INDEX ROWID) - Z#MAIN_DOCUM
3.1 INDEX(RANGE SCAN) - IDX_Z#MAIN_DOCUM_STATE(NON-UNIQUE)


Пример 2
Код:
select *
from Z#AC_FIN
where C_MAIN_V_ID like '%1'

CRIT_RPT_PLAN SELECT STATEMENT Cost=64
2.1 TABLE ACCESS(FULL) - Z#AC_FIN
или
select *
from Z#AC_FIN
where C_MAIN_V_ID like :A

CRIT_RPT_PLAN SELECT STATEMENT Cost=1
2.1 TABLE ACCESS(BY INDEX ROWID) - Z#AC_FIN
3.1 INDEX(RANGE SCAN) - IDX_Z#AC_FIN_MNUM(NON-UNIQUE)


В примере 1 разница обусловлена тем, что использование константных значений позволяет оптимизатору использовать гистограммы значений (см. 1, раздел 7 страница 4) и таким образом создавать планы с большей избирательной способностью (см. 2, раздел 20 страница 59-60). Что наглядно демонстрируется в следующем примере, отличающемся от примера 1 только датой:

Пример 3
Код:
select *
from Z#MAIN_DOCUM
where STATE_ID = :S
and C_DATE_PROV >= to_date('01/01/1800')

CRIT_RPT_PLAN SELECT STATEMENT Cost=1
2.1 TABLE ACCESS(BY INDEX ROWID) - Z#MAIN_DOCUM
3.1 INDEX(RANGE SCAN) - IDX_Z#MAIN_DOCUM_STATE(NON-UNIQUE)


Видно, что индекс по дате проводки больше не используется, поскольку данное условие не обладает избирательной особенностью.
Отличия в планах в примере 2 обусловлено тем, что условие вида "column LIKE ‘%pattern’" в принципе не позволяет использовать индекс по column (см. 2, раздел 20 страница 57).
Резюмируем:

в ходе разработки необходимо учитывать отличия в использовании константных значений и переменных;
если Вы желаете увидеть реальный план выполнения запроса – не следует подставлять константы вместо переменных и наоборот.

В тексте ответа присутствуют ссылки на:
1) Oracle8 Tuning Release 8.0 December, 1997 Part No. A58246-01
2) Oracle8 Concepts Release 8.0 December, 1997 Part No. A58227-01

По материалам базы знаний сайта сопровождения ЦФТ-Банк http://supportobject.cft.ru/
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru