Затраты против Консистента получает - PullRequest
3 голосов
/ 01 октября 2008

Что значит видеть запрос, который имеет низкую стоимость в плане объяснения, но имеет высокую непротиворечивость, получает счетчик в автотрассировке? В этом случае стоимость была в сотнях, а ЧР - в миллионах.

Ответы [ 2 ]

3 голосов
/ 01 октября 2008

Стоимость может представлять две разные вещи в зависимости от версии и от того, работаете ли вы в режиме калькуляции на основе процессора.

Вкратце, стоимость представляет собой количество времени, в течение которого оптимизатор ожидает выполнения запроса, но оно выражается в единицах времени, которое занимает чтение одного блока. Например, если Oracle ожидает, что чтение одного блока займет 1 мс, а запрос - 20 мс, тогда стоимость равна 20.

Согласованные запросы не совпадают точно с этим по ряду причин: стоимость включает несогласованные (текущие) значения (например, чтение и запись временных данных), стоимость включает время процессора, а согласованное получение может быть мультиблочным читать вместо одного блока читать и, следовательно, имеют другую продолжительность. Oracle также может получить неверную оценку стоимости, и может потребоваться более или менее последовательная оценка, чем предлагаемая оценка.

Полезный метод, который может помочь объяснить несоответствия между прогнозируемым планом выполнения и фактической производительностью, - это «обратная связь по количеству элементов». Посмотреть эту презентацию: http://www.centrexcc.com/Tuning%20by%20Cardinality%20Feedback.ppt.pdf

3 голосов
/ 01 октября 2008

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

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

Хотя есть много, много вещей, которые могут повлиять на стоимость, и несколько вещей, которые могут повлиять на количество последовательных выпусков, вероятно, разумно ожидать, что если у вас очень низкая стоимость и очень большое количество непротиворечивых Получается, что оптимизатор, вероятно, работает с плохими оценками мощности различных шагов (столбец ROWS в PLAN_TABLE сообщает ожидаемое количество строк, возвращаемых на каждом шаге). Это может указывать на то, что у вас отсутствует или устарела статистика, что вам не хватает некоторых гистограмм, что ваши параметры инициализации или системная статистика каким-то образом неверны, или что CBO имеет проблемы по какой-то другой причине, оценивая количество ваших результатов.

Какую версию Oracle вы используете?

...