Oracle: влияют ли запросы, начинающиеся с комментариев, на производительность? - PullRequest
0 голосов
/ 12 сентября 2018

Я добавляю комментарии к началу моих запросов (в Oracle), чтобы предоставить метаданные о самом запросе.

Каждая информация, которую я узнал по этой теме, касается только подсказок, кроме этой: https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:93449400346099694.

Будет ли этот запрос одинаково интерпретироваться планом выполнения с комментариями и без комментариев?Повлияет ли мой комментарий на производительность или кеширование?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Добавление комментариев к запросам - разумная стратегия, на мой взгляд, в Oracle, как и в других СУБД. Но в Oracle действительно есть некоторые ситуации, в которых комментарий может оказать влияние на план выполнения: например, есть некоторые стратегии управления планом (например, базовые показатели sql), которые сопоставляют запрос с планом (или, скорее, набор подсказок) и сопоставление основано на sql_id - и этот sql_id изменяется, если добавляется другой комментарий.

Другая проблема состоит в том, что смешивание подсказок оптимизатора (/*+ ... */) с ведущими комментариями может привести к аннулированию подсказок - как показано в https://hoopercharles.wordpress.com/2011/01/15/adding-comments-to-sql-statements-improves-performance/.

Поэтому я бы всегда поощрял использование комментариев, но отделял их от подсказок и пытался выяснить, является ли данный запрос предметом управления планом (взгляните на v$sql и его столбцы SQL_PLAN_BASELINE - и, возможно, также SQL_PATCH, что является еще одним вариантом для объединения запросов с дополнительной информацией о выполнении).

0 голосов
/ 12 сентября 2018

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

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

Я помню, что на тренинге тренер показал нам «секретный» намек Oracle /*+ RUN_FASTER */ - на самом деле запрос выполнялся намного быстрее! Хитрость заключалась в том, что для исходного запроса он сохранял подготовленный план выполнения (см. Использование плана стабильности ), заставляя полное сканирование таблицы . С подсказкой /*+ RUN_FASTER */ у вас есть новый запрос, и оптимизатор оценил новый лучший план.

На самом деле подсказки типа /*+ RUN_SLOWER */ или /*+ drink a cup of tea */ делают то же самое, но без удивления со стороны студентов. : -)

Однако эта история происходит несколько лет назад. Я полагаю, что в настоящее время оптимизатор Oracle работает умнее, а комментарии (если не действительные подсказки) игнорируются. Но я никогда не тестировал его с последними версиями Oracle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...