powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Немножко про эволюцию бейзлайнов
20 сообщений из 20, страница 1 из 1
Немножко про эволюцию бейзлайнов
    #39549775
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читал доку, но на некоторые вопросы ответы не нашел.

Как происходит эволюция, т.е. превращение бейзлайна из not-accepted в accepted? В доке написано, что для этого оракл запускает запрос с двумя планами и сравнивает их производительность. Вопрос

- с какими биндами он его запускает? Записывает ли он где-то бинды с которыми нужно сравнивать? Если да - то я не смог найти.
Если нет - то у меня в истории могут быть десятки планов с десятком наборов биндов, для какого он проделает сравнение планов.
Как он учитывает специфику времени.
- Предположим, в запросе участвуют темповые таблицы. Как он определит перформанс задним числом? И вообще , в случае если данные сильно меняются по ходу?
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39549817
Фотография kinky cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valergrad,

автор для этого оракл запускает запрос с двумя планами
Как то совсем дико звучит. Даже представаить страшно. Можно цитату откуда дровишки ?

Там вроде идет речь про "Plan verification"

авторWhen the optimizer finds a new plan for a SQL statement, the plan is added to the SQL plan baseline as an
unaccepted plan that needs to be verified before it can become an accepted plan.

Verification is the process of comparing the execution performances of the nonaccepted plan
and the best accepted plan (plan with the lowest cost). The execution is performed using the conditions (e.g., bind values, parameters, etc.) in effect at the time the unaccepted plan was added to the SQL plan baseline.

Т.е. получается просто считает cost нового и старого плана с биндами, с которыми новый unaccepted план попал в sql managment base.
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39549829
Фотография kinky cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valergrad,
execution тут, очевидно, в смысле execution performance of plan - эффективность плана выполнения, которая определяется как "plan with the lowest cost". Речь не идет о sql execution
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39549859
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kinky cat,

категорически не согласен. Кост нового плана будет конечно всегда меньше, иначе он и не попадет в бейзлайны.
Тут вся суть бэйзлайнов в том, чтобы не доверять новым планам даже если у меньший кост.
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39549866
Фотография kinky cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valergrad,
авторкатегорически не согласен. Кост нового плана будет конечно всегда меньше, иначе он и не попадет в бейзлайны.
С чего ты взял ? Пруф? Для чего evolve task по твоему ? Да и зачем сранивать cost на ходу с разными биндами ?
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39549871
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valergradkinky cat,

категорически не согласен. Кост нового плана будет конечно всегда меньше, иначе он и не попадет в бейзлайны.
Тут вся суть бэйзлайнов в том, чтобы не доверять новым планам даже если у меньший кост.
Ты почитай, как планы попадают в baseline, автоматически и ручками там, вопрос про меньший кост пропадет.
Суть baseline в ограничении выбора плана запроса.
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39549967
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kinky catValergrad,
авторкатегорически не согласен. Кост нового плана будет конечно всегда меньше, иначе он и не попадет в бейзлайны.
С чего ты взял ? Пруф? Для чего evolve task по твоему ? Да и зачем сранивать cost на ходу с разными биндами ?

Какой тебе нужен пруф? Почитай немножко про бэйзлайны и вопрос отпадет.

Или можно попробовать немножко подумать. Если бы процесс эволюции смотрел только на кост - то в нем никакого смысла не было бы. План с минимальным костом прекрасно выбирается CBO во время хардпарса, никаких дополнительных надстроек для и эволюшен тасок не нужно.

Давай я объясню на примере. Представь, что впервые ( на самом деле второй раз, бейзлайны начинают работать для запросов выполняющихся хотя бы два раза) выполняется запрос и у оптимизатор нашел план A с костом, скажем, 500. Этот план попадает в бейзлайны. Т.к. он первый - он будет accepted и будет все время выполняться.

Дальше ситуация изменилась - например мы создали индекс на таблицу из запроса. В следующий раз при хард парсе план A все еще валиден, но еще есть план B, использующий индекс. Если у этого плана будет кост больше, скажем, 800 - то ни в какие бейзлайны он, конечно же не попадет, CBO сам его забракует и возьмет план A. Но если у него кост меньше, скажем, 100, то он попадет в бейзлайны, но будет неаццепед.
Таким образом в обоих вариантах при следующем выполнении будет использоваться план A, но но если у B кост меньше, то он еще попадет в бейзлайны. Правда пока не будет использоваться, пока либо ручная таска, либо в 12с автоматическая, не заверифицирует его и не признает валидным. И именно о деталях этой верификации я и расспрашиваю.

При этом, если бы эта таска, как ты утверждаешь, смотрела только на кост, то не было бы вообще никакого смысла в ней. Не было бы вообще смысла в бейзлайнах и эволюции - план с наименьшим костом CBO и так выбирает самостоятельно, безо всяких дополнительных надстроек и эволюшин тасок.

А смысл бейзлайна как раз в том, что иногда низкий кост не отражает хороший план. Если из ниоткуда появился новый план с маленьким костом - это часто подозрительно. Например, низкий кост наилучшего плана может быть потому, что кто-то забыл собрать статистику у новой партиции и кардиналити ключевой таблицы внезапно стало 1. Таким образом план B - который по-прежнему с наименьшим костом из возможных - так же попадет в бейзлайны, он так же будет неаццептед, но только он будет забракован эволвинг таской в момент верификации и никогда не станет аццептед.

Ты же сам мне скинул цитату в которой ясно написано:

авторVerification is the process of comparing the execution performances of the nonaccepted plan
and the best accepted plan (plan with the lowest cost). The execution is performed using the conditions (e.g., bind values, parameters, etc.) in effect at the time the unaccepted plan was added to the SQL plan baseline.


"execution performances ". Для этого, собственно должен быть execution. Более того, ты можешь запустить эволвинг таску для какого-то sql, и собственноручно убедиться что в репорте фигурирует время в секундах ( elapsed и cpu), буфер гетсы, и disk writes. Это опять же четко говорит о том, что запросы выполнялись реально, просто наблюдая за планами такую информацию никак не получить.
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39549969
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На всякий случай, если слова в доке
"execution performance" вам кажется недостаточно явно указывают на "execution", то вот цитата из Антогнини где это расписано немножко лучше:

автор To verify whether one of the nonaccepted execution plans will in fact perform better than the ones generated with the help of accepted SQL plan baselines, an evolution must be attempted. This is nothing other than asking the query optimizer to run the SQL statement with different execution plans and finding out whether a nonaccepted SQL plan baseline will lead to better performance than an accepted one. If this is in fact the case, the nonaccepted SQL plan baseline is set to accepted.

Полагаю, хотя бы фраза "run the SQL statement" читается однозначно?
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39549978
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Valergrad,

Код: plsql
1.
2.
3.
4.
5.
6.
select b.creator
      ,b.sql_handle,b.sql_text,b.plan_name
      ,ad.bind_data
      ,binds.*
from dba_sql_plan_baselines b, sys.sqlobj$auxdata ad, table(dbms_sqltune.extract_binds(ad.bind_data))(+) binds
where b.signature = ad.signature;
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39550161
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

спасибо, как обычно!
Жаль нет доступа к sys.sqlobj$auxdata, SQLOBJ$DATA и SQLOBJ$. Но хотя бы знаю, что хинты хранятся там.
А как разрешается вопрос с темповыми таблицами и другими трики кейсами вы не знаете? К сожалению не могу проверить на работе, т.к. нет прав на execute evolve процедуры.
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39550163
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если конкретно: у нас в базе включены автоматический захват и использование бейзлайнов, но нет автоматического механизма эволюции. Нужно аргументированно, с цифрами обосновать отчего это плохо.
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39550843
Фотография kinky cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valergrad,
Valergradkinky cat,

категорически не согласен. Кост нового плана будет конечно всегда меньше, иначе он и не попадет в бейзлайны.
Тут вся суть бэйзлайнов в том, чтобы не доверять новым планам даже если у меньший кост.

Зачем спрашивать на форуме, чтоб потом яро отстаивать свои измышления ?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select created, optimizer_cost, b.ACCEPTED 
from dba_sql_plan_baselines b where b.origin = 'AUTO-CAPTURE' and b.sql_handle = 'SQL_xxxxxxxxxxxxx'
order by 1  

CREATED	OPTIMIZER_COST	ACCEPTED
22-JUL-16 02.28.24.000000 PM	41423	YES
04-NOV-16 02.32.01.000000 PM	60225	NO
13-NOV-16 02.32.07.000000 PM	51938	NO
20-NOV-16 02.32.16.000000 PM	52185	NO
22-NOV-16 02.32.21.000000 PM	52232	NO
02-DEC-16 02.32.27.000000 PM	53348	NO
03-DEC-16 02.32.26.000000 PM	52912	NO
04-DEC-16 02.32.26.000000 PM	65805	NO
07-DEC-16 02.32.29.000000 PM	65813	NO
15-FEB-17 02.35.03.000000 PM	68130	NO
22-FEB-17 02.35.07.000000 PM	69685	NO
12-MAR-17 02.35.27.000000 PM	70820	NO
05-APR-17 02.36.02.000000 PM	72998	NO
08-APR-17 02.36.05.000000 PM	73234	NO
14-APR-17 02.36.11.000000 PM	73522	NO
15-APR-17 02.36.13.000000 PM	73555	NO
16-JUN-17 02.44.30.000000 PM	67147	NO
.... итд


Чего это они auto captured с большим cost ? Неувязочка товарисч ?
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39551244
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kinky catValergrad,
Valergradkinky cat,

категорически не согласен. Кост нового плана будет конечно всегда меньше, иначе он и не попадет в бейзлайны.
Тут вся суть бэйзлайнов в том, чтобы не доверять новым планам даже если у меньший кост.

Зачем спрашивать на форуме, чтоб потом яро отстаивать свои измышления ?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select created, optimizer_cost, b.ACCEPTED 
from dba_sql_plan_baselines b where b.origin = 'AUTO-CAPTURE' and b.sql_handle = 'SQL_xxxxxxxxxxxxx'
order by 1  

CREATED	OPTIMIZER_COST	ACCEPTED
22-JUL-16 02.28.24.000000 PM	41423	YES
04-NOV-16 02.32.01.000000 PM	60225	NO
13-NOV-16 02.32.07.000000 PM	51938	NO
20-NOV-16 02.32.16.000000 PM	52185	NO
22-NOV-16 02.32.21.000000 PM	52232	NO
02-DEC-16 02.32.27.000000 PM	53348	NO
03-DEC-16 02.32.26.000000 PM	52912	NO
04-DEC-16 02.32.26.000000 PM	65805	NO
07-DEC-16 02.32.29.000000 PM	65813	NO
15-FEB-17 02.35.03.000000 PM	68130	NO
22-FEB-17 02.35.07.000000 PM	69685	NO
12-MAR-17 02.35.27.000000 PM	70820	NO
05-APR-17 02.36.02.000000 PM	72998	NO
08-APR-17 02.36.05.000000 PM	73234	NO
14-APR-17 02.36.11.000000 PM	73522	NO
15-APR-17 02.36.13.000000 PM	73555	NO
16-JUN-17 02.44.30.000000 PM	67147	NO
.... итд


Чего это они auto captured с большим cost ? Неувязочка товарисч ?

Так вы покажите запрос, планы, подсмотренные бинды, ддл объектов и их статистику - и я вам отвечу на ваш вопрос. А телепатов, извините, на форуме не присутствует. То, что такое в принципе возможно - это очевидно. Вы что, правда никогда не видели как кост плана пляшет от значений биндов? Или как кост плана пляшет от статистики? Т.е. например кост первого плана был меньше на том наборе биндов, но на этом наборе - он больше. Или кост первого плана был меньше на момент попадания в бейзлайны, но теперь-то он уже может быть больше. Или первый план стал невалидным по какой-то причине. Миллион возможных причин.

И да, вы на мои вопросы так и не ответили. Откуда эволвинг таска берет cpu_elapsed_time и disk_reads если она не запускает запрос? Зачем оракл документации и уважаемым людям вроде Антогнини писать об execution если его нет?
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39551419
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValergradИ да, вы на мои вопросы так и не ответили. Откуда эволвинг таска берет cpu_elapsed_time и disk_reads если она не запускает запрос? Зачем оракл документации и уважаемым людям вроде Антогнини писать об execution если его нет?
Заканчивайте уже.
kinky cat облажался с выполнением запросов при эволюции, ты - с "Кост нового плана будет конечно всегда меньше, иначе он и не попадет в бейзлайны".
Вам обоим нечем гордится.
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39551457
Фотография kinky cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|,
Не ошибается тот кто ничего не делает) Будет бд под рукой сниму трейс. Интересно прям посмотреть как он будет делать суточный merge с темповыми таблицами в parallel 64, а потом его откатывать, когда time limit закончится)
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39551538
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|ValergradИ да, вы на мои вопросы так и не ответили. Откуда эволвинг таска берет cpu_elapsed_time и disk_reads если она не запускает запрос? Зачем оракл документации и уважаемым людям вроде Антогнини писать об execution если его нет?
Заканчивайте уже.
kinky cat облажался с выполнением запросов при эволюции, ты - с "Кост нового плана будет конечно всегда меньше, иначе он и не попадет в бейзлайны".
Вам обоим нечем гордится.

Естественно, я понимаю, что кост будет не всегда меньше старого - что возможны исключения, о которых я тремя комментами выше и написал. Так категорично было написано только для того, чтобы объяснить коту что смотреть на кост нет особого смысла, т.к. CBO уже на него посмотрел. Иногда, знаете, достает писать всюду "почти всегда", "почти наверное", "в большинстве случае", "в нормальной ситуации" и подобное - в разговоре об оракле это придется писать "почти наверное" в каждом предложении.

kinky cat , а у вас 12-й оракл? Или 11-й оракл, до ДБА настроил эволвинг? Если есть права на SPM, то можно самому провести простейший эксперимент: запустить запрос дважды, создать более удобный индекс, запустить запрос еще раз, запустить эволюшен таску и оттрассировать ее. Я бы давно это сделал, но у меня недостает прав на рабочем энве.
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39551576
Фотография kinky cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valergrad,

авторчто кост будет не всегда меньше старого - что возможны исключения
тут не возможны исключения, потому что нет такого правила и не надо юлить.
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39551600
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kinky catValergrad,

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

Как раз правило есть: CBO при хардпарсе выбирает всегда план с наименьшей стоимостью из доступных ( и из этого правила уже есть исключения, типа max_permutations и т.д. и т.п. )
И дальше уже компонент отвечающия за бейзлайны смотрит - а accepted этот план или нет? а fixed ли он? Можно было бы подумать, что
гораздо эффективней было бы сначала посмореть какие планы у нас accepted, а уже потом делать перебор тысяч различных планов - но Oracle сделал по-другому, на что еще Льюис жаловался.

В общем, kinky cat, пока что все ваши сообщения в этой теме - это какие-то вбросы, которые вместо того чтобы пролить на что-то свет
или дать какую-то новую информацию - провоцируют на срач. Вам реально больше делать нечего? Если вы не можете помочь и сказать что-то по теме - может просто помолчите?

Единственное полезное сообщение было от xtender, он показал, где хранятся бинды с которыми вызывается запрос при верификации.
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39551626
oracloud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ValergradЧитал доку, но на некоторые вопросы ответы не нашел.

Как происходит эволюция, т.е. превращение бейзлайна из not-accepted в accepted? В доке написано, что для этого оракл запускает запрос с двумя планами и сравнивает их производительность. Вопрос

- с какими биндами он его запускает?
Вот тут похожие вопросы. Получается либо из STS, либо (если автоматически) те бинды, которые были в момент захвата плана в unaccepted статус.

C temp таблицами, вероятно, работает Dynamic Sampling
...
Рейтинг: 0 / 0
Немножко про эволюцию бейзлайнов
    #39553733
Фотография kinky cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valergrad,
Что то ты запутался в показаниях. Давай по порядку.
авторКост нового плана будет конечно всегда меньше, иначе он и не попадет в бейзлайны.
Что явно не верно. И я привел пример.
Потом ты подменил понятия и стал доказывать
авторКак раз правило есть: CBO при хардпарсе выбирает всегда план с наименьшей стоимостью из доступных ( и из этого правила уже есть исключения, типа max_permutations и т.д. и т.п. )
И дальше уже компонент отвечающия за бейзлайны смотрит - а accepted этот план или нет? а fixed ли он?
Что вобщем-то совсем другое. И снова какая-то глупость, какие-то доступные планы при хардпарсе, а потом еще бейслайны ? Что за доступные планы при хардпарсе из которых CBO выбирает?

Хотя забей, скипуем, не за этим зашел.

Погонял трейсы evolve.
Итого
- parallel не поддерживается ORA-16958
- evolve DML'ей реально данные не меняет, и ничего не откатывает. Т.е. в данном случае не совсем честный и точный excecution получается.
- с темп таблицами все просто, берет как есть т.е. пустые. Результаты verify и его выводы соответствующие.
Можно конечно попытаться их наполнить в этой же сессии и сделать evolve, но тогда уже проще ручками все проверить.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Немножко про эволюцию бейзлайнов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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