Индексы на базе В*-деревьев



бет10/10
Дата01.11.2022
өлшемі239.92 Kb.
#463783
1   2   3   4   5   6   7   8   9   10
Все лекции (1) (1) (1)

Оптимизация по стоимости


Для улучшения качества оптимизации SQL-запросов в состав СУБД Oracle начиная с версии 7 входит оптимизатор по стоимости. Как следует из названия, его задача - не только простой выбор правил из за-

Рис. 4.4. Выбор плана выполнения запроса оптимизатором
данного набора. Он выбирает путь выполнения, требующий наименьшего количества логических операций ввода/вывода. Такой подход позволяет избежать потенциальных проблем, рассмотренных выше. В конечном итоге оптимизатор разберется, какая таблица больше, и нач- нет чтение с нее независимо от синтаксиса SQL-запроса.
В Oracle8 и следующих версиях для выбора наилучшего плана выполнения по умолчанию применяется оптимизатор по стоимости. А начиная с версии Oracle Database 10g* только он и поддерживается. Оптимизатор оценивает стоимость плана выполнения с помощью статистики, относящейся к нужным ему структурам данных. В версии Oracle Database 10# статистика собирается по умолчанию и сохраняется в автоматическом репозитории нагрузки (Automatic Workload Repository, AWR). Статистические данные содержат информацию о доступе к сегментам базы, статистику временной модели, статистику системы и сеансов, сведения об SQL-командах, приведших к наибольшей нагрузке, и статистику истории активных сеансов (Active Session History, ASH).

Как используется статистика


Оптимизатор по стоимости находит оптимальный план выполнения, присваивая оценку каждому потенциальному плану. При этом он исходит из собственных внутренних правил и логики, а также из статистики, отражающей состояние структур данных в базе. Учитывается статистика для таблиц, столбцов и индексов, участвующих в плане выполнения запроса. В табл.
4.1 перечислены статистики для каждого вида структур данных.


Таблица 4.1. Статистики базы данных
В Oracle Database 10g* и более поздних версиях собирается также статистика о работе системы в целом, в том числе по производительности и использованию ЦП и подсистемы ввода/вывода. Эта статистика хранится в словаре данных.
Эти статистические данные можно использовать по отдельности или в сочетании для определения полной стоимости плана выполнения в терминах количества операций ввода/вывода. Статистики отражают как размер таблицы, так и объем неиспользованного пространства в блоках; последний показатель позволяет оценить, сколько операций ввода/вывода потребуется для выборки строк. Статистика индексов отражает не только глубину и ширину дерева индекса, но и степень уникальности хранящихся в нем значений - от этого зависит, насколько просто будет отобрать строки с помощью данного индекса.
Точность работы оптимизатора по стоимости зависит от точности используемых им статистик, поэтому своевременное обновление статистики было необходимо всегда. Раньше для оценки статистических данных приходилось пользоваться SQL-коман- дой ANALYZE. В более старых версиях многие администраторы баз данных применяли также встроенный PL/SQL-пакет DBMS_STATS, в котором имеется ряд процедур, помогающих автоматизировать сбор статистики.
Неактуальная статистика может вызвать снижение производительности, поэтому процедура сбора статистики была полностью автоматизирована. Активизировать этот механизм можно избирательно. Например, в Oracle Database 10g можно включить автоматический сбор статистики для таблицы, который
начинается, если статистика устарела (то есть с момента последнего сбора изменилось более 10 процентов строк в таблице) или отсутствует вовсе.
Статистика помогает оптимизатору принимать гораздо более осмысленные решения по выбору оптимального плана выполнения. Например, иногда оптимизатору приходится выбирать между двумя индексами, в которых можно было бы искать значение. Оптимизатор по синтаксису мог бы поставить обоим индексам одинаковые оценки и выбрать план выполнения исходя из порядка их появления в условии WHERE. Но оптимизатор по стоимости знает, что в одном индексе 1000 записей, а в другом 10 000. Он знает даже, что в первом индексе только 20 уникальных значений, а во втором - 5000. Стало быть, селективность большего индекса гораздо выше, поэтому именно он получит более высокую оценку и будет использован для выполнения запроса.

Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   10




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет