Затраты в сравнении с Постоянными доходами
-
03-07-2019 - |
Вопрос
Что означает видеть запрос, который имеет низкую стоимость в плане объяснения, но высокое количество последовательных запросов в autotrace?В данном случае стоимость исчислялась сотнями долларов, а кредиты - миллионами.
Решение
Стоимость может представлять собой две разные вещи в зависимости от версии и от того, работаете ли вы в режиме расчета затрат на основе процессора или нет.
Вкратце, стоимость представляет собой то количество времени, в течение которого оптимизатор ожидает выполнения запроса, но выражается в единицах времени, которое занимает чтение одного блока.Например, если Oracle ожидает, что чтение одного блока займет 1 мс, а запрос - 20 мс, то стоимость равна 20.
Согласованные результаты не совсем совпадают с этим по ряду причин:стоимость включает в себя несогласованные (текущие) операции получения (например, чтение и запись временных данных), стоимость включает процессорное время, а согласованный процесс получения может быть многоблочным чтением вместо чтения одного блока и, следовательно, иметь разную продолжительность.Oracle также может получить совершенно неправильную оценку стоимости, и в конечном итоге может потребоваться гораздо более или менее последовательный результат, чем предполагалось в оценке.
Полезным методом, который может помочь объяснить несоответствия между прогнозируемым планом выполнения и фактической производительностью, является "обратная связь по мощности".Смотрите эту презентацию: http://www.centrexcc.com/Tuning%20by%20Cardinality%20Feedback.ppt.pdf
Другие советы
В лучшем случае стоимость - это оценка оптимизатором количества операций ввода-вывода, которые будет выполнять запрос.Таким образом, в лучшем случае стоимость, вероятно, будет точной только в том случае, если оптимизатор нашел очень хороший план - если оценка стоимости оптимизатором верна и план идеален, это обычно означает, что вы никогда не будете утруждать себя просмотром плана, потому что этот запрос будет выполняться достаточно хорошо.
Однако согласованные get-запросы - это фактическая мера количества get-запросов, фактически выполненных запросом.Так что это гораздо более точный ориентир для использования.
Хотя есть много-много факторов, которые могут повлиять на стоимость, и несколько факторов, которые могут повлиять на количество согласованных возвратов, вероятно, разумно ожидать, что при очень низкой стоимости и очень большом количестве согласованных возвратов оптимизатор, вероятно, работает с плохими оценками мощности различных шагов (столбец ROWS в таблице PLAN_TABLE сообщает вам ожидаемое количество строк, возвращаемых на каждом шаге).Это может указывать на то, что у вас отсутствуют или устарели статистические данные, что у вас отсутствуют некоторые гистограммы, что ваши параметры инициализации или системная статистика каким-то образом неверны, или что у CBO по какой-либо другой причине возникают проблемы с оценкой мощности ваших результатов.
Какую версию Oracle вы используете?