|
|
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
Имеется: запрос, чужой, вызывается закрытой системой, выглядит как несколько соединенных иерархических подзапросов с 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2018, 21:23 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
Сэмка, схему-клон выкатываете в тот же самый инстанс? статистики по объектам, участвующим в запросе, сравнивали? физические характеристики сегментов сравнивали (размер, фрагментация, "разряженность данных" в блоках, сцепленные строки, уровни HWM)? Попробуйте в исходной схеме реорганизовать сегменты хранения (move table, rebuild index). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 04:25 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
Сэмка, По описанию похоже на то что в старой схеме сидит Бейзлайн/ профиль для этого запроса. Проверяли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 05:04 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
ValergradСэмка, По описанию похоже на то что в старой схеме сидит Бейзлайн/ профиль для этого запроса. Проверяли? Также убедитесь что бинды одинаковые в частности одинаковые типы. Типичная ошибка которую я наблюдал - биндят тип данных "date" с помощью ide (toad/plsql developer ), забывая про то что они это делают неправильно ( реально создастся бинд типа varchar2 и в плане могут появиться дополнительные преобразования типов) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 05:12 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
Сэмка, Может, поможет - Четыре способа корректировки планов запросов по образцу без изменения кода. http://www.fors.ru/upload/magazine/05/http_texts/russia_ruoug_deev_sql_plans.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 09:08 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
Спасибо. Инстанс тот же, база та же, все виртуализировано. Бейзлайна/профиля нет. Байнды одинаковые, выполняется все с одной машины с одного тестового скрипта pl/sql Developer, хотя тут типы не особо важны, собственно работа с базой нареканий не вызывает, доступ к таблицам идентичен, проблема со связыванием в памяти. За статью спастбо, на днях практически такой же запрос вылечили профилем, но причина так и не ясна, а значит, сидим на бомбе. Попробую, не мудрствуя лукаво, применить план с "хорошей" схемы, но советы продолжают приветствоваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 09:19 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
Параметры сессии посмотрите. Всякие db_file_multiblock_read_count, index_cost_adj, *_size, *_target, parallel_* Как-то наблюдал, как клон на ~половине процессоров прода выполнял некий запросище в несколько раз быстрее оригинала. Единственная заметная разница - прод parallel32, а на клоне было parallel 16. Снижения parallel degree хватило для переоценки некоторых соединений и построения более эффективного плана. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 09:48 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, v$sql_optimizer_env говорит, что ВСЕ одинаковое. Нет причин не верить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 10:39 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
Сэмка, что-то вы куда-то не туда приседания делаете... что мешает просто получить 10053? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 10:55 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
Я бы в таком случае посмотрел на различающиеся строки плана - раз их всего 4, и вычленил бы простейший запрос из 1-2 таблиц, у которого различаются планы. После чего все станет гораздо проще, и сравнение двух 10053 как тут верно заметили даст ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 12:43 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
xtender, Поясните мне, как тут 10053 поможет? Что делается, я и так знаю, но почему? Хоть намекните ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 13:16 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
Сэмкаxtender, Поясните мне, как тут 10053 поможет? Что делается, я и так знаю, но почему? Хоть намекните 10053 показывает все расчеты которые оракл делает для построения плана. Раз у вас другой план строится, то где-то в расчетах другие цифры ( или опции ), и сравнивая эти расчеты вы увидите почему у вас разные планы. Другое дело, что для плана с 144 строчками сгенерится имхо слишком большая трасса, чтобы она была читабельной, поэтому я бы начал все-таки с вычленения проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 14:54 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
ValergradДругое дело, что для плана с 144 строчками сгенерится имхо слишком большая трасса, чтобы она была читабельной, поэтому я бы начал все-таки с вычленения проблемы. Трасса начинается с детального перечисления параметров, иногда можно поймать проблему уже на этом этапе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 15:17 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
Тогда другой вопрос: сделал alter system flush shared_pool, выполнил запрос и вижу в v$sqlarea свой запрос со старым first_load_time. DBMS_SHARED_POOL.PURGE тоже не помогло. Причем до выполнения его в v$sqlarea не было! Нашел коммнтарий Кайта по поводу того, что он флашит, что может, но может кто подскажет, что еще нужно очистить, чтобы уничтожить его следы ? Ребут хоть поможет или оно где-то персистится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 15:29 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, Еще раз: выполняется скрипт, с одними и теми же параметрами, из одного клиентского приложения, права, профайл у пользователей одинаковые. Эффект воспроизводится даже при вызове "чужого" запроса через current_schema. Есть ощущение, что там план "залип", когда еще не было данных, но этого не показывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 15:32 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
Сэмкаandrey_anonymous, Еще раз: Еще раз: снимаете 10053 для "хорошего" и "плохого" планов. Берете первые секции трассы, где он дампит параметры. Сравниваете. Если различий не обнаружено - лезете дальше, шаг за шагом, пока не обнаружите разницу. Сравнительный анализ в Вашей ситуации должен быть достаточно эффективен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 15:38 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, Да у меня доступа на файловую систему нет, я не админ, просто у пользователя прав больше, чем нужно, вот я и делаю, что могу, траблшутю по старой памяти :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 16:02 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
Сэмкаandrey_anonymous, Да у меня доступа на файловую систему нет, я не админ, просто у пользователя прав больше, чем нужно, вот я и делаю, что могу, траблшутю по старой памяти :) Значит это не нужно Вашему руководству Это уже не проблема разработчика, проблема - административная ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 16:15 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
без 10053 гадать можно бесконечно, например паблик синоним какой-то на вьюху... смысла это не имеет, хочешь знать причину - делай 10053 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 16:52 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
СэмкаТогда другой вопрос: сделал alter system flush shared_pool, выполнил запрос и вижу в v$sqlarea свой запрос со старым first_load_time. DBMS_SHARED_POOL.PURGE тоже не помогло. Причем до выполнения его в v$sqlarea не было! Нашел коммнтарий Кайта по поводу того, что он флашит, что может, но может кто подскажет, что еще нужно очистить, чтобы уничтожить его следы ? Ребут хоть поможет или оно где-то персистится? Из шаред пула не удаляется запрос если он выполняется в данный момент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 19:30 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
Valergrad, Да я как раз об этом на Кайта сослался, но не мой случай, активных сессий не было. Он из sqlarea ушел, но не насовсем, а где-то переждал и вернулся :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 09:42 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
Vadim Lejnin, Это неправильный подход, если это нужно пользователю, то неважно, кто решает вопрос, у разработчика в плане performance tuning зачастую больше опыта, по крайней мере так было, когда я был разработчиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 09:46 |
|
||
|
Одинаковые запросы дают разную производительность (в 100 раз)
|
|||
|---|---|---|---|
|
#18+
Сэмкаактивных сессий не былоих может и не быть, но курсор может оставаться не закрытым, например, сессия недофетчила до конца и оставила курсор открытым. Тогда при flush shared_pool, parent cursor останется, но планы вылетят. Это легко увидеть по увеличению invalidations и часто по изменению адреса child курсора. Но это все оффтопик, то что нужно делать, ты так и не делаешь... СэмкаVadim Lejnin, Это неправильный подход, если это нужно пользователю, то неважно, кто решает вопрос, у разработчика в плане performance tuning зачастую больше опыта, по крайней мере так было, когда я был разработчиком.это вообще полный оффтоп... да и кому судить-то... СэмкаДа у меня доступа на файловую систему нетдостаточно иметь грант на create directory... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 10:01 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39657052&tid=1883878]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
195ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 549ms |

| 0 / 0 |
