Текущее время: Пн, авг 04 2025, 13:32

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Производительность и план запроса
СообщениеДобавлено: Пн, май 05 2008, 14:20 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Может такое быть, что select, записанный в st05, позже по кнопке Explain показывает не тот же план запроса, что было в момент записи? Может кто замечал, если часто пользовался st05? Это явно не тот случай, когда между двумя этими событиями успела поменяться статистика в БД, потому что ситуация стабильно воспроизводится.

БД = Oracle


Последний раз редактировалось sibrin Вт, май 06 2008, 15:16, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Производительность и план запроса
СообщениеДобавлено: Вт, май 06 2008, 10:47 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, авг 04 2006, 20:56
Сообщения: 1006
Откуда: 37 МИКРОРАЙОН
Пол: Мужской
sibrin написал:
Может такое быть, что select, записанный в st05, позже по кнопке Explain показывает не то, что было в момент записи? Может кто замечал, если часто пользовался st05? Это явно не тот случай, когда между двумя этими событиями успела поменяться статистика в БД, потому что ситуация стабильно воспроизводится.

БД = Oracle


Ради интереса снял трассу запроса. Затем через некоторое время посмотрел и у меня отслаось все без изменения. Oracle 9.2.0.7.0.
А если не секрет, зачем нужна трасса по прошествии времени ? Лично я смотрю трассу сразу и потом забываю......


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 06 2008, 10:51 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, май 26 2005, 11:36
Сообщения: 651
Откуда: Киев-Москва
Может хинтами явно подсказать Ораклу как план строить?

_________________
Рисую потоки данных.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 06 2008, 11:06 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
а как ты узнал что не то что на самом деле ?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 06 2008, 11:08 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Период между двумя измерениями большой? Индексы поменяться/добавиться не могли?

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 06 2008, 11:46 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 07 2004, 10:39
Сообщения: 610
мне казалось st05 и план запроса записывает. В принципе, можно проверить - оттрасировать нажатие Explain=)

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

_________________
полный SAPец


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Производительность и план запроса
СообщениеДобавлено: Вт, май 06 2008, 13:31 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
ROKO написал:
А если не секрет, зачем нужна трасса по прошествии времени ? Лично я смотрю трассу сразу и потом забываю......

Так речь идёт о промежутке времени в 5 секунд.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 06 2008, 15:07 
Менеджер
Менеджер

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

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 06 2008, 15:15 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
slash написал(а):
мне казалось st05 и план запроса записывает. В принципе, можно проверить - оттрасировать нажатие Explain=)

Оттрассировал - лезет в Oracle c EXPLAIN'ом.
Ну это и понятно - в реалтайме как из БД статистику получить? Не сопровождать же каждый SELECT ещё и EXPLAIN'ом.

slash написал(а):
если запросы в целевые таблицы будут - сто пудово план перестраивается, и может не совпадать с тем, что было.

Sergo написал:
А не мог статистику перестроить другой запрос?
Так через 30 сек я снова эксперимент повторяю. Потом ещё через минуту.

Короче говоря, вопрос в том, что может ли БД по команде EXPLAIN одно показать, а когда ей реальный SELECT даётся, то передумать и по-другому отработать, причём стабильно при многократном чередовании EXPLAIN и SELECT в течении короткого времени, так что внешние факторы влиять не должны.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 06 2008, 15:21 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Два селекта отличаются на одну строчку.
В тесте оба селекта выполняются быстро.
В продуктиве время исполнения второго в 400 раз больше,
в то время как планы запросов одинаковы.

БД = Oracle
Индекс CDHDR~Z01 = (MANDANT, OBJECTCLAS, UDATE)

Время исполнения 10 мс.:
Code:
select cdhdr~objectid
  into table lt_hdr
  from cdhdr
  inner join konh
     on konh~KNUMH = cdhdr~objectid
    and konh~kvewe = 'A'
    and konh~kappl = 'V'
  where cdhdr~objectclas = 'COND_A'
    AND cdhdr~udate >= '20070401'
    AND cdhdr~udate >= '20070401'.

SELECT STATEMENT ( Estimated Costs = 83 , Estimated #Rows = 395 )

       6 FILTER
       | Filter Predicates
       |
       |-- 5 NESTED LOOPS
           | ( Estim. Costs = 83 , Estim. #Rows = 395 )
           | Estim. CPU-Costs = 866.576 Estim. IO-Costs = 83
           |
           |-- 2 TABLE ACCESS BY INDEX ROWID CDHDR
           |   | ( Estim. Costs = 4 , Estim. #Rows = 395 )
           |   | Estim. CPU-Costs = 187.852 Estim. IO-Costs = 4
           |   |
           |   |-- 1 INDEX RANGE SCAN CDHDR~Z01
           |         ( Estim. Costs = 3 , Estim. #Rows = 71 )
           |         Search Columns: 3
           |         Estim. CPU-Costs = 181.354 Estim. IO-Costs = 3
           |         Access Predicates = "T_00"."OBJECTCLAS"=:A4 AND "T_00"."UDATE">=:A5
           |         Filter Predicates = "T_00"."UDATE">=:A6
           |
           |-- 4 TABLE ACCESS BY INDEX ROWID KONH
               | ( Estim. Costs = 1 , Estim. #Rows = 1 )
               | Estim. CPU-Costs = 1.718 Estim. IO-Costs = 1
               | Filter Predicates
               |
               |-- 3 INDEX UNIQUE SCAN KONH~0
                     ( Estim. Costs = 1 , Estim. #Rows = 1 )
                     Search Columns: 2
                     Estim. CPU-Costs = 220 Estim. IO-Costs = 1
                     Access Predicates Filter Predicates


Время исполнения 3776 мс.:
Code:
select cdhdr~objectid
  into table lt_hdr
  from cdhdr
  inner join konh
     on konh~KNUMH = cdhdr~objectid
    and konh~kvewe = 'A'
    and konh~kappl = 'V'
  where cdhdr~objectclas = 'COND_A'
    AND cdhdr~udate >= '20070401'.

SELECT STATEMENT ( Estimated Costs = 910 , Estimated #Rows = 7.897 )

       6 FILTER
       | Filter Predicates
       |
       |-- 5 HASH JOIN
           | ( Estim. Costs = 910 , Estim. #Rows = 7.897 )
           | Estim. CPU-Costs = 48.647.828 Estim. IO-Costs = 904
           | Access Predicates
           | 
           |-- 2 TABLE ACCESS BY INDEX ROWID CDHDR
           |   | ( Estim. Costs = 10 , Estim. #Rows = 7.897 )
           |   | Estim. CPU-Costs = 290.863 Estim. IO-Costs = 10
           |   | 
           |   |-- 1 INDEX RANGE SCAN CDHDR~Z01
           |         ( Estim. Costs = 3 , Estim. #Rows = 1.421 )
           |         Search Columns: 3
           |         Estim. CPU-Costs = 167.139 Estim. IO-Costs = 3
           |         Access Predicates = "T_00"."OBJECTCLAS"=:A4 AND "T_00"."UDATE">=:A5
           |         Filter Predicates
           | 
           |-- 4 TABLE ACCESS BY INDEX ROWID KONH
               | ( Estim. Costs = 898 , Estim. #Rows = 38.091 )
               | Estim. CPU-Costs = 39.109.602 Estim. IO-Costs = 893
               | Filter Predicates
               | 
               |-- 3 INDEX RANGE SCAN KONH~0
                     ( Estim. Costs = 295 , Estim. #Rows = 152.363 )
                     Search Columns: 1
                     Estim. CPU-Costs = 24.777.102 Estim. IO-Costs = 292
                     Access Predicates Filter Predicates



Можно предположить, что при сканировании индекса CDHDR~Z01 условие >= игнорируется.
Понятно, что где-то по этому условию данные всё-таки фильтруются,
но из плана запроса это не видно. Как будто во втором случае сначала идёт
FULL SCAN для cdhdr, потом JOIN, а потом FILTER по дате.
В чём тут прикол?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 06 2008, 15:42 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Я бы предложил для начала пересобрать статистику для таблиц CDHDR и KONH

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 06 2008, 15:46 
Менеджер
Менеджер

Зарегистрирован:
Чт, янв 20 2005, 08:34
Сообщения: 573
Пол: Мужской
sibrin написал:
Два селекта отличаются на одну строчку.
В тесте оба селекта выполняются быстро.
В продуктиве время исполнения второго в 400 раз больше,
в то время как планы запросов одинаковы.


Статистики в тесте и в продуктиве разные.
Можно попробовать собрать их по новой и там, и там, и по новой посмотреть.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 06 2008, 15:55 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, авг 04 2006, 20:56
Сообщения: 1006
Откуда: 37 МИКРОРАЙОН
Пол: Мужской
sibrin написал:
Короче говоря, вопрос в том, что может ли БД по команде EXPLAIN одно показать, а когда ей реальный SELECT даётся, то передумать и по-другому отработать, причём стабильно при многократном чередовании EXPLAIN и SELECT в течении короткого времени, так что внешние факторы влиять не должны.

Была такая проблема вот с этим запросом. Вроде и индекс брал такой какой надо, а крутился сволочь 5 минут. Моск ломал неделю. Потом плюнул позвонил базиснику :D . Базисник ломал голову ещо один день и затем мне выдал такую фразу: "Когда ты смотришь в ST05 ты видишь одну трассу, но реально когда запрос лезет в БД он лезет совсем по другой трассе. Таковы уж особенности Oracle ". Причем такая вещь наблюдалась только в одном манданте. Базисник поставил какую-то заплатку и жизнь у меня наладилась :D .


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 06 2008, 16:22 
Менеджер
Менеджер

Зарегистрирован:
Чт, янв 20 2005, 08:34
Сообщения: 573
Пол: Мужской
sibrin написал:
...
Короче говоря, вопрос в том, что может ли БД по команде EXPLAIN одно показать, а когда ей реальный SELECT даётся, то передумать и по-другому отработать, причём стабильно при многократном чередовании EXPLAIN и SELECT в течении короткого времени, так что внешние факторы влиять не должны.


Таблица то CDHDR глобальная, так что на нее в продуктиве могут влиять внешние факторы, а в тесте как раз никто если к ней не обращается, план и не перестраивается.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 06 2008, 16:23 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
ArmAnn написал:
Я бы предложил для начала пересобрать статистику для таблиц CDHDR и KONH

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

Да пересобирал, конечно. Инвариантно.

ROKO написал:
"Когда ты смотришь в ST05 ты видишь одну трассу, но реально когда запрос лезет в БД он лезет совсем по другой трассе. Таковы уж особенности Oracle ".

Спасибо! Вопрос был как раз про это.


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

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


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

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


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

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