powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как привязать свой хинт к sql-запросу в _чужой_ БД.?
25 сообщений из 26, страница 1 из 2
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39314396
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у нас есть огромная база от стороннего разработчика в которой иногда появляются всех нервирующие тормоза. Я поднял statpack соответствующий времени жалоб и убедился, что один за sql-запросов сжирает более 90% ресурсов! Так же я установил, что добавление в запрос одного хинта ( /*+ use_nl(A,B) */ ) в сотни раз уменьшает время его выполнения!

Кто подскажет: _как именно_ можно было бы (если вообще возможно?) привязать такой хинт к _чужому_ запросу ( с разработчиком которого контакта нет!)? (ну типа технологии outlines? baselines? и т.п. У меня с ними опыта нет вообще! )
У нас Оracle Enterprise Edition 11g, но увы без платного компонента Diagnostic-Pack!
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39314405
ORA__SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikКто подскажет: _как именно_ можно было бы (если вообще возможно?)А статистика по объектам актуальна?
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39314409
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnik,

Тупо пересоберите статистику для начала.
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39314420
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39314468
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
статистика актуальная!
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39314469
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быдло___кодерПопробуй SQL Patch
https://blogs.oracle.com/optimizer/entry/how_can_i_hint_a

а этот самый dbms_sqldiag_internal - он cлучайно не часть платного DIAGN-пакета? ;-)
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39314515
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnik_как именно_ можно было бы (если вообще возможно?) привязать такой хинт к _чужому_ запросу
Ну во времена 8i sys-оские объекты правили, подменяя outlin-ы, затем механизма эволюционировала и сегодня вся эта кинематика не только имеет кнопки-рукоятки, но даже обзавелась автоматикой... платной, разумеется :)
Еще можно атакой man-in-the-middle лепить хинты в запросы - размещать по вкусу, от клиентской прокси-библиотеки до самого до сервера - под ответственность разработчика.

Но лучше всего - все-таки найти причину, по которой строится не устраивающий план (трасса 10053 в помощь) и устранить - изменив optimizer_goal, параметры сессии или к примеру, кастомизировав статистику (dbms_stats.SET_%_stats).
Кстати, на версиях до 12с иногда помогает волшебная команда
Код: plsql
1.
comment on table <имя_таблицы> is 'fast=true'


...и это не совсем шутка, иногда реально помогает.
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39314556
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это чтобы курсор инвалидировать ? ну так оно и выстрелить library cache lock наплодить может, dbms_shared_pool.purge поточнее будет.

Насчет sql patch -
здесь пишут вроде бы не надо денег
https://blogs.oracle.com/optimizer/entry/additional_information_on_sql_patches

Best regards

Maxim
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39314564
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Demenko
...
Maxim

да, денег не надо! Это я уже тоже прочитал!

andrey_anonymous! Спасибо за интересный ответ, но практически мне из него ничего не получится применить.

Быдло___кодер - спасибо огромное!!! Вроде то что надо! ещё и тут описано:
http://www.dba-oracle.com/t_dbms_sqldiag_internal.htm

Но, увы, у меня пока не работет, как ни стараюсь. То есть пэтч создаётся (он виден в DBA_SQL_PATCHES) но запрос его (хинт) не берёт!
Не пойму - почему??? :-(
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39314580
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikandrey_anonymous! Спасибо за интересный ответ, но практически мне из него ничего не получится применить.

Жаль. Я надеялся склонить Вас к варианту "разобраться что ему мешает".
К примеру, NL-ю может "мешать" большая hash_area в сочетании с all_rows, большим db_file_multiblock_read_count, завышенной optimizer_index_cost_adj или даже просто неудачная гистограмма на индексированной колонке.

DBAshnikне берёт!
Не пойму - почему??? :-(
Потому что... тщательнее надо, тщательнее!
YouTube Video
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39314582
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousПосмотрите комменты к ссылке, особенно последний.
Имеется ввиду, естественно, ссылка от Быдло___кодер 19701187
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39314590
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DBAshnik,
Хинт должен быть представлен во внутреннем системном виде, как в outline
Можно взглянуть на https://iusoltsev.wordpress.com/2015/02/22/sql-patch-notes/
и комментарии к этой заметке, там приведен скрипт применения полного набора хинтов.
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39316345
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так и не получилось у меня научиться приклеивать хороший execution-план на плохой запрос. :-(
вот попытался через baselines
тоже не работает почему-то. Мне кажется там у них какая-то ошибка в описании. Но не могу разобраться, опыта в этом мало.
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39316353
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деев И.DBAshnik,
Хинт должен быть представлен во внутреннем системном виде, как в outline
Можно взглянуть на https://iusoltsev.wordpress.com/2015/02/22/sql-patch-notes/
и комментарии к этой заметке, там приведен скрипт применения полного набора хинтов.


спасибо, но я абсолютно не понимаю,


1. что значит "Хинт должен быть представлен во внутреннем системном виде, как в outline" ?
(статья вообще то про ограничение длинны хинта в 500 байт)


2. что вообще такое скрипты и откуда они взялись?:

SQL> @sqlpatch_hints
SQL> @shared_cu12
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39316404
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikвот попытался через baselines
Молодец )

DBAshnikМне кажется там у них какая-то ошибка в описании. Но не могу разобраться, опыта в этом мало.
Ну так опубликуй свои изыскания.
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39316412
Фотография djeday84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO пока уже в HOW-TO добавить и где нибудь в шапке чата закрепить ))

http://www.fors.ru/upload/magazine/05/http_texts/russia_ruoug_deev_sql_plans.html
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39316465
DBAshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
djeday84IMHO пока уже в HOW-TO добавить и где нибудь в шапке чата закрепить ))

http://www.fors.ru/upload/magazine/05/http_texts/russia_ruoug_deev_sql_plans.html

ой спасибо огромнейшее! После добавление магической строчки авторl_hints := replace( l_hints, 'IGNORE_OPTIM_EMBEDDED_HINTS' ); в вариант с SQL-Patch-ами всё отлично заработало! )) ;-)
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39316762
Фотография kinky cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBAshnikв вариант с SQL-Patch-ами всё отлично заработало! )) ;-)
советуя SQL-Patch стоит напоминать, что это недокументированная возможность. В некоторых организациях есть политика запрещающая использовать недокументированные возможности на прод системах.
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39316985
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
kinky catDBAshnikв вариант с SQL-Patch-ами всё отлично заработало! )) ;-)
советуя SQL-Patch стоит напоминать, что это недокументированная возможность. В некоторых организациях есть политика запрещающая использовать недокументированные возможности на прод системах.Сама возможность - документированная: How to Create a SQL Patch to add Hints to Application SQL Statements (Doc ID 1931944.1)
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39316990
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderСама возможность - документированная: How to Create a SQL Patch to add Hints to Application SQL Statements (Doc ID 1931944.1)
А средство - нет ;)
Код: plaintext
The SQL patch allows a user to "insert hints" into a query whose text cannot be edited due to the application constraints using an undocumented API called DBMS_SQLDIAG_INTERNAL.I_CREATE_PATCH()
Тем более, что использование рекомендуется в случае
авторIn a critical situation, where a SQL Plan Baseline is not possible,
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39316996
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AlexFF__|,

то, что не документировали API этого пакета, не означает, что создание патчей не документировано.
Грубо говоря, фактически разрешили использовать только одну процедуру оттуда и только в определенном случае.
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39317004
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderAlexFF__|,

то, что не документировали API этого пакета, не означает, что создание патчей не документировано.
Грубо говоря, фактически разрешили использовать только одну процедуру оттуда и только в определенном случае.
Я бы сказал, что документированность определяется присутствием функционала в официальной документации.
А в данном случае мы имеет официально рекомендованный костыль с оговорками.
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39317008
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AlexFF__|,

Забавно, а я всегда считал MOS приоритетнее публичной доки и многие вещи документированы только на нем.
в принципе, хинты/аутлайны/профили/патчи/бейслайны - уже сами по себе "костыли с оговорками"...
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39317027
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderЗабавно, а я всегда считал MOS приоритетнее публичной доки
Ага, а поддержка приоритетнее MOS =)
Но это не сделает ее советы документированней.
...
Рейтинг: 0 / 0
как привязать свой хинт к sql-запросу в _чужой_ БД.?
    #39317056
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AlexFF__|,

Т.е. по-вашему даже трасса 10053 недокументирована и ее использовать нельзя? И советы поддержки тем более нельзя выполнять?
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как привязать свой хинт к sql-запросу в _чужой_ БД.?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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