Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Одинаковые запросы дают разную производительность (в 100 раз) / 23 сообщений из 23, страница 1 из 1
06.06.2018, 21:23
    #39656926
Сэмка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
Имеется: запрос, чужой, вызывается закрытой системой, выглядит как несколько соединенных иерархических подзапросов с WITH. Сам материализованный подзапрос возвращает 600000 строк, быстро (0.5 сек). Общий запрос выедает Temp и валится после 15 минут работы, вычитывая логически в районе 1TB и загрузив 4 проца до еквозможности работать других. Это начало истории. Через экспорт/импорт клонирую пользователя, по обеим схемам собираю статистику. В "новой" схеме запрос без проблем сортируетса в памяти, в темп не пишет, выполняется за 2 секунды.

Оптимизационная среда (по v$sql_optimizer_env) одинаковая
Пробовал очищать shared_pool, точечно и гамузом. Почему-то старый запрос чудным образом возрождается.

Посмотрел планы - разные, на "быстром" cpu_cost в 4 раз больше, io_cost - в полтора. Разница в 4-х строчках из 144, фильтрация перед соединением, что логично, хоть и не по костам.

Планы из 142 (144) строк не привожу, но может кто-то подкинет идею, куда хоть копать?
База 11.2.0.4, Oracle Linux
...
Рейтинг: 0 / 0
07.06.2018, 04:25
    #39656986
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
Сэмка,

схему-клон выкатываете в тот же самый инстанс?
статистики по объектам, участвующим в запросе, сравнивали?
физические характеристики сегментов сравнивали (размер, фрагментация, "разряженность данных" в блоках, сцепленные строки, уровни HWM)?

Попробуйте в исходной схеме реорганизовать сегменты хранения (move table, rebuild index).
...
Рейтинг: 0 / 0
07.06.2018, 05:04
    #39656989
Valergrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
Сэмка,
По описанию похоже на то что в старой схеме сидит
Бейзлайн/ профиль для этого запроса. Проверяли?
...
Рейтинг: 0 / 0
07.06.2018, 05:12
    #39656991
Valergrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
ValergradСэмка,
По описанию похоже на то что в старой схеме сидит
Бейзлайн/ профиль для этого запроса. Проверяли?

Также убедитесь что бинды одинаковые в частности одинаковые типы. Типичная ошибка которую я наблюдал - биндят тип данных "date" с помощью ide (toad/plsql developer ), забывая про то что они это делают неправильно ( реально создастся бинд типа varchar2 и в плане могут появиться дополнительные преобразования типов)
...
Рейтинг: 0 / 0
07.06.2018, 09:08
    #39657045
Рогафип
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
Сэмка,

Может, поможет -

Четыре способа корректировки планов запросов по образцу без изменения кода.

http://www.fors.ru/upload/magazine/05/http_texts/russia_ruoug_deev_sql_plans.html
...
Рейтинг: 0 / 0
07.06.2018, 09:19
    #39657052
Сэмка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
Спасибо.
Инстанс тот же, база та же, все виртуализировано. Бейзлайна/профиля нет. Байнды одинаковые, выполняется все с одной машины с одного тестового скрипта pl/sql Developer, хотя тут типы не особо важны, собственно работа с базой нареканий не вызывает, доступ к таблицам идентичен, проблема со связыванием в памяти.
За статью спастбо, на днях практически такой же запрос вылечили профилем, но причина так и не ясна, а значит, сидим на бомбе.

Попробую, не мудрствуя лукаво, применить план с "хорошей" схемы, но советы продолжают приветствоваться.
...
Рейтинг: 0 / 0
07.06.2018, 09:48
    #39657077
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
Параметры сессии посмотрите.
Всякие db_file_multiblock_read_count, index_cost_adj, *_size, *_target, parallel_*

Как-то наблюдал, как клон на ~половине процессоров прода выполнял некий запросище в несколько раз быстрее оригинала.
Единственная заметная разница - прод parallel32, а на клоне было parallel 16.
Снижения parallel degree хватило для переоценки некоторых соединений и построения более эффективного плана.
...
Рейтинг: 0 / 0
07.06.2018, 10:39
    #39657135
Сэмка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
andrey_anonymous,

v$sql_optimizer_env говорит, что ВСЕ одинаковое. Нет причин не верить :)
...
Рейтинг: 0 / 0
07.06.2018, 10:55
    #39657161
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
Сэмка,

что-то вы куда-то не туда приседания делаете... что мешает просто получить 10053?
...
Рейтинг: 0 / 0
07.06.2018, 12:43
    #39657305
Valergrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
Я бы в таком случае посмотрел на различающиеся строки плана - раз их всего 4, и вычленил бы простейший запрос из 1-2 таблиц, у которого различаются планы.
После чего все станет гораздо проще, и сравнение двух 10053 как тут верно заметили даст ответ.
...
Рейтинг: 0 / 0
07.06.2018, 13:16
    #39657329
Сэмка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
xtender,

Поясните мне, как тут 10053 поможет? Что делается, я и так знаю, но почему? Хоть намекните
...
Рейтинг: 0 / 0
07.06.2018, 14:54
    #39657442
Valergrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
Сэмкаxtender,

Поясните мне, как тут 10053 поможет? Что делается, я и так знаю, но почему? Хоть намекните

10053 показывает все расчеты которые оракл делает для построения плана.
Раз у вас другой план строится, то где-то в расчетах другие цифры ( или опции ), и сравнивая эти расчеты вы увидите почему у вас разные планы.
Другое дело, что для плана с 144 строчками сгенерится имхо слишком большая трасса, чтобы она была читабельной, поэтому я бы начал все-таки с вычленения проблемы.
...
Рейтинг: 0 / 0
07.06.2018, 15:17
    #39657464
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
ValergradДругое дело, что для плана с 144 строчками сгенерится имхо слишком большая трасса, чтобы она была читабельной, поэтому я бы начал все-таки с вычленения проблемы.
Трасса начинается с детального перечисления параметров, иногда можно поймать проблему уже на этом этапе.
...
Рейтинг: 0 / 0
07.06.2018, 15:29
    #39657489
Сэмка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
Тогда другой вопрос:
сделал alter system flush shared_pool, выполнил запрос и вижу в v$sqlarea свой запрос со старым first_load_time. DBMS_SHARED_POOL.PURGE тоже не помогло. Причем до выполнения его в v$sqlarea не было! Нашел коммнтарий Кайта по поводу того, что он флашит, что может, но может кто подскажет, что еще нужно очистить, чтобы уничтожить его следы ? Ребут хоть поможет или оно где-то персистится?
...
Рейтинг: 0 / 0
07.06.2018, 15:32
    #39657495
Сэмка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
andrey_anonymous,

Еще раз: выполняется скрипт, с одними и теми же параметрами, из одного клиентского приложения, права, профайл у пользователей одинаковые. Эффект воспроизводится даже при вызове "чужого" запроса через current_schema. Есть ощущение, что там план "залип", когда еще не было данных, но этого не показывает.
...
Рейтинг: 0 / 0
07.06.2018, 15:38
    #39657505
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
Сэмкаandrey_anonymous,
Еще раз:
Еще раз: снимаете 10053 для "хорошего" и "плохого" планов.
Берете первые секции трассы, где он дампит параметры.
Сравниваете.
Если различий не обнаружено - лезете дальше, шаг за шагом, пока не обнаружите разницу.
Сравнительный анализ в Вашей ситуации должен быть достаточно эффективен.
...
Рейтинг: 0 / 0
07.06.2018, 16:02
    #39657528
Сэмка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
andrey_anonymous,

Да у меня доступа на файловую систему нет, я не админ, просто у пользователя прав больше, чем нужно, вот я и делаю, что могу, траблшутю по старой памяти :)
...
Рейтинг: 0 / 0
07.06.2018, 16:15
    #39657551
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
Сэмкаandrey_anonymous,

Да у меня доступа на файловую систему нет, я не админ, просто у пользователя прав больше, чем нужно, вот я и делаю, что могу, траблшутю по старой памяти :)

Значит это не нужно Вашему руководству
Это уже не проблема разработчика, проблема - административная
...
Рейтинг: 0 / 0
07.06.2018, 16:52
    #39657611
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
без 10053 гадать можно бесконечно, например паблик синоним какой-то на вьюху... смысла это не имеет, хочешь знать причину - делай 10053
...
Рейтинг: 0 / 0
07.06.2018, 19:30
    #39657871
Valergrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
СэмкаТогда другой вопрос:
сделал alter system flush shared_pool, выполнил запрос и вижу в v$sqlarea свой запрос со старым first_load_time. DBMS_SHARED_POOL.PURGE тоже не помогло. Причем до выполнения его в v$sqlarea не было! Нашел коммнтарий Кайта по поводу того, что он флашит, что может, но может кто подскажет, что еще нужно очистить, чтобы уничтожить его следы ? Ребут хоть поможет или оно где-то персистится?

Из шаред пула не удаляется запрос если он выполняется в данный момент.
...
Рейтинг: 0 / 0
08.06.2018, 09:42
    #39658096
Сэмка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
Valergrad,

Да я как раз об этом на Кайта сослался, но не мой случай, активных сессий не было. Он из sqlarea ушел, но не насовсем, а где-то переждал и вернулся :)
...
Рейтинг: 0 / 0
08.06.2018, 09:46
    #39658097
Сэмка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
Vadim Lejnin,

Это неправильный подход, если это нужно пользователю, то неважно, кто решает вопрос, у разработчика в плане performance tuning зачастую больше опыта, по крайней мере так было, когда я был разработчиком.
...
Рейтинг: 0 / 0
08.06.2018, 10:01
    #39658107
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одинаковые запросы дают разную производительность (в 100 раз)
Сэмкаактивных сессий не былоих может и не быть, но курсор может оставаться не закрытым, например, сессия недофетчила до конца и оставила курсор открытым. Тогда при flush shared_pool, parent cursor останется, но планы вылетят. Это легко увидеть по увеличению invalidations и часто по изменению адреса child курсора. Но это все оффтопик, то что нужно делать, ты так и не делаешь...


СэмкаVadim Lejnin,

Это неправильный подход, если это нужно пользователю, то неважно, кто решает вопрос, у разработчика в плане performance tuning зачастую больше опыта, по крайней мере так было, когда я был разработчиком.это вообще полный оффтоп... да и кому судить-то...


СэмкаДа у меня доступа на файловую систему нетдостаточно иметь грант на create directory...
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Одинаковые запросы дают разную производительность (в 100 раз) / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]