powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Одинаковые запросы дают разную производительность (в 100 раз)
23 сообщений из 23, страница 1 из 1
Одинаковые запросы дают разную производительность (в 100 раз)
    #39656926
Сэмка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется: запрос, чужой, вызывается закрытой системой, выглядит как несколько соединенных иерархических подзапросов с 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
Одинаковые запросы дают разную производительность (в 100 раз)
    #39656986
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сэмка,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


СэмкаVadim Lejnin,

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


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


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