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

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

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


Вступление в Клуб: 03.09.2007
СообщениеЧт Окт 08, 2009 14:52   План выполнения запросов Ответить с цитатой
Полезность: Нет оценки
Добрый день!

Подскажите как можно поменять план выполнения запроса в IBSO?
IBSO
Профи


Вступление в Клуб: 20.08.2009
СообщениеЧт Окт 08, 2009 14:58    Ответить с цитатой
Полезность: Нет оценки
Если вы по поводу кнопки План запросав Представлении, то она информативная и строится анализируя запрос. Меняете запрос - меняется план.
Kozyrev
Участник - экстремал


Вступление в Клуб: 03.09.2007
СообщениеЧт Окт 08, 2009 15:01    Ответить с цитатой
Полезность: Нет оценки
Нет, речь идет о выполнении запроса, выполняемого при вызове дистрибутивной операции "Исполнить" из типа "Финансовые распоряжения".

У нас выполнение этой операции происходит недопустимо долго.
IBSO
Профи


Вступление в Клуб: 20.08.2009
СообщениеЧт Окт 08, 2009 15:10    Ответить с цитатой
Полезность: Нет оценки
Надо посмотреть закладку Компиляция. Там свойства операции можно менять. Но обычно мы просим админа мониторить какой запорос именно "тянет" и если причину не можем отыскать и эта операция дистрибутивная, то просим ЦФТ разобраться, если операция наша, то сами отлаживаем и оптимизируем.
Kozyrev
Участник - экстремал


Вступление в Клуб: 03.09.2007
СообщениеЧт Окт 08, 2009 15:15    Ответить с цитатой
Полезность: Нет оценки
IBSO, ситуация такая, что операция дистрибутивная и в ЦФТ сказали что все хорошо и что проблема только у нас (хотя проблема есть у нас на двух базах: на боевой и тестовой).

Как такового администратора у нас нет. Пытаемся разобраться сами.
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеЧт Окт 08, 2009 15:23    Ответить с цитатой
Полезность: Нет оценки
Попробуйте в Администратор словаря данных - Сессии посмотреть, какой select чаще или дольше висит. Потом вытащить его и посмотреть план.
Kozyrev
Участник - экстремал


Вступление в Клуб: 03.09.2007
СообщениеЧт Окт 08, 2009 15:25    Ответить с цитатой
Полезность: Нет оценки
Вот этот запрос:
Код:
SELECT /*+ INDEX(a1 IDX_Z#PLAN_OPER_COL_DATE) */ B1.ID, 'FACT_PLAN_OPER',
  B1.COLLECTION_ID, '', B1.C_SUM, B1.C_FACT, '0'
FROM
 Z#FACT_PLAN_OPER B1, Z#PLAN_OPER A1 WHERE A1.COLLECTION_ID = :B1 AND
  A1.C_FACT_OPERS = B1.COLLECTION_ID AND A1.C_OPER IS NOT NULL ORDER BY
  B1.COLLECTION_ID

Вот его план:
Код:
Rows     Row Source Operation
-------  ---------------------------------------------------
      6  TABLE ACCESS BY INDEX ROWID Z#PLAN_OPER (cr=1929811 pr=0 pw=0 time=10899744 us)
6808449   NESTED LOOPS  (cr=440463 pr=0 pw=0 time=6840535 us)
 212764    TABLE ACCESS BY INDEX ROWID Z#FACT_PLAN_OPER (cr=14933 pr=0 pw=0 time=425558 us)
 212764     INDEX FULL SCAN IDX_Z#FACT_PLAN_OPER_COLL_ID (cr=1126 pr=0 pw=0 time=23 us)(object id 10234)
6595684    INDEX RANGE SCAN IDX_Z#PLAN_OPER_COL_DATE (cr=425530 pr=0 pw=0 time=1380604 us)(object id 13549)
IBSO
Профи


Вступление в Клуб: 20.08.2009
СообщениеЧт Окт 08, 2009 15:27    Ответить с цитатой
Полезность: Нет оценки
Ну да у нас тоже ок. Ну тогда может кто здесь что подскажет, или по договору на разовую работу поискать толкового админа, умеющего понять в базе что "тянет".
Kozyrev
Участник - экстремал


Вступление в Клуб: 03.09.2007
СообщениеЧт Окт 08, 2009 15:30    Ответить с цитатой
Полезность: Нет оценки
Нашли что нужно добавить hint ALL_ROWS в запрос. Получится вот так:

Код:
SELECT /*+ INDEX(a1 IDX_Z#PLAN_OPER_COL_DATE) ALL_ROWS */ B1.ID, 'FACT_PLAN_OPER',
  B1.COLLECTION_ID, '', B1.C_SUM, B1.C_FACT, '0'
FROM
 Z#FACT_PLAN_OPER B1, Z#PLAN_OPER A1 WHERE A1.COLLECTION_ID = :B1 AND
  A1.C_FACT_OPERS = B1.COLLECTION_ID AND A1.C_OPER IS NOT NULL ORDER BY
  B1.COLLECTION_ID;


После добавления запрос стал выполняться в разы быстрее!!!

Вопрос куда это вписать в IBSO?
IBSO
Профи


Вступление в Клуб: 20.08.2009
СообщениеЧт Окт 08, 2009 16:13    Ответить с цитатой
Полезность: Нет оценки
-- begin pl/sql
обычный текст PL
-- end pl/sql

Другое дело, что при накате все это исчезнет
r00st
Эксперт


Вступление в Клуб: 14.09.2007
СообщениеЧт Окт 08, 2009 16:42    Ответить с цитатой
Полезность: 1
1. Компилятор PL+ распознает хинты непосредственно в ввыражении.
2. Можно и принудительно перед запросом указать
Код:
pragma hint ('+ INDEX(a1 IDX_Z#PLAN_OPER_COL_DATE) ALL_ROWS');

Однако, лучше разобраться в причине, пересобрать статистику по таблицам, индексы проверить.
Kozyrev
Участник - экстремал


Вступление в Клуб: 03.09.2007
СообщениеПт Окт 09, 2009 09:14    Ответить с цитатой
Полезность: Нет оценки
Спасибо всем, кто откликнулся!
Добавили hint. Все работает как надо!
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

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