Как рассчитываются стоимости выполнения?
В главе 3 мы обсудили способы измерения производительности алгоритмов
баз данных. Мы рассказали о внутренних показателях и установили, что
стои мости алгоритмов измеряются количеством операций ввода-вывода
и циклов процессора. Теперь мы применим эту теорию на практике.
64
Планы выполнения
Стоимость каждого плана выполнения зависит от:
формул стоимости алгоритмов, используемых в плане;
статистических данных по таблицам и индексам, включая распреде-
ление значений;
системных настроек (параметров и предпочтений), таких как
join_col-
lapse_limit
или
cpu_index_tuple_cost
.
В главе 3 приведены формулы для расчета стоимости каждого алгорит-
ма. Каждая из них зависит от размера обрабатываемых таблиц, а также от
ожидаемого размера результирующего множества. И наконец, пользовате-
ли могут изменить стоимость по умолчанию для отдельных операций с по-
мощью системных настроек. Выбором оптимального плана можно неявно
управлять, изменяя параметры оптимизатора, которые используются при
оценке стоимости. Таким образом, при расчете стоимости выполнения пла-
нов учитываются все три пункта.
Это нелогично; часто у разработчиков SQL есть подсознательные ожида-
ния, что существует один «наилучший план» и, более того, он одинаков для
всех «похожих» запросов. Однако из-за перечисленных факторов оптими-
затор может создавать разные планы выполнения для почти идентичных
SQL-запросов или даже для одного и того же запроса. Как такое может быть?
Оптимизатор выбирает план с лучшей оценкой стоимости. Однако может
быть несколько планов с почти одинаковыми стоимостями. Оценка стоимо-
сти зависит от статистики базы данных, собранной на основе случайной вы-
борки. Статистика, собранная вчера, может незначительно отличаться от се-
годняшней статистики. Из-за этих небольших изменений план, который был
лучшим вчера, сегодня может занять второе место. Конечно, статистика также
может измениться в результате операций вставки, обновления и удаления.
Рассмотрим несколько примеров. В лис тингах 4.3 и 4.4 представлены два
запроса, которые почти идентичны. Единственная разница состоит в зна-
чении, по которому происходит фильтрация. Однако планы выполнения,
представленные на рис. 4.5 и 4.6, заметно отличаются.
Рис. 4.5
План выполнения для лис тинга 4.3
Чем вызвана эта разница? Рисунок 4.7 дает подсказку: первый запрос вы-
бирает значительную часть всех аэропортов, и использование индекса не
улучшит производительность. Второй запрос, напротив, выберет только один
аэропорт, и в этом случае доступ на основе индекса будет более эффективным.
Планы выполнения
Do'stlaringiz bilan baham: |