Режимы оптимизации в базах данных


Когда выбираются низкоуровневые процедуры и генерируется план, здесь учитываются цели, которых хотим достичь.

На сегодня существует 3 режима оптимизации (по большому счету 2, поскольку 3-ий выбирает из этих двух):
1) продукционный оптимизатор Rule: использует продукционную оптимизацию, формально говоря продукционный оптимизатор, был разработан первым, появился он в Oracle, до сих пор он работает там и модернизируется. Суть продукционного оптимизатора: формально говоря, различные виды выборки имеют разные веса (например: доступ к одной строке – вес (ранг) r=1, доступ к одиночной строке по кластерному соединению (когда формально выбирается одна, но соединение с другой) r=2, к одиночной строке по ключу с уникальным или первичным ключом r=3).

Обычно бывает от 1 до 12 весов на разные варианты выборки данных. В зависимости от того, как написан запрос и сколько там считывать формально, ставиться этот ранг. Цель получить минимальный ранг.

2) Стоимостной оптимизатор Cost: использует стоимостную оптимизацию. Стоимостная оптимизация преследует достижение максимальной производительности (с учетом требований к вводу-выводу, центральному процессору, памяти и т.д.). здесь в полной мере при стоимостном оптимизаторе используются статистики (при продукционном статистика не нужна). При этом обычно выбирается одна из двух целей: первая – обеспечение наилучшей общей производительности (возвращение всех строк в максимально короткое время) недостаток этого подхода в том, что в таком случае чащё всего выполняется полный, а не индексный просмотр таблицы, такую цель лучше ставить для выполнения отчётов в фоновом режиме, выполнение процессов в ночное время и различного рода пакетные задания; вторая – обеспечение минимального времени выполнение выборки первых строк. (это хорошо, т.к. человек видит, что система работает, запрос написан правильно и что-то стало появляться). Это хороший вариант при интерактивном режиме, человек получает ответ относительно быстро и психологически для него это лучше.

3) Выборочный (алгоритм) оптимизатор Chose: фактически выбирает между стоимостным и продукционным. Правила здесь просты: всегда использовать стоимостной режим, если есть статистика (в некоторых базах данных типа InterBase нет продукционного, есть только стоимостной); использовать продукционный режим, если нет статистики или других вспомогательных данных для работы в стоимостном режиме. Оптимизатор в зависимости от того стоимостной или продукционный режим перестраивает запрос немножко по-разному, там правила будут, разними.

Большинство СУБД позволят просматривать план выполнения запроса в интерактивном режиме. (после того как Вы сделали запрос можно нажать соответствующую кнопочку и увидеть план выполнения запроса на экране).

В любом SQL Server-е, начиная с InterBase-а, это возможность предоставляется.

Все большие базы данных предоставляют эту возможность. Например, в InterBase

Есть специальные утилиты Explain, который позволяет всё это дело пояснять.

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

В стоимостном режиме оптимизатор Oracle часто вместо индексов использует полный просмотр таблиц. Для этого есть специальные встроенные команды или ключевые слова. Этих слов-подсказок порядка 26 в Oracle. Их можно вставлять внутрь команды Select /*…*/-в общем случае они интерпретируются как комментарии, в СУБД Oracle, если в нужном месте эти вставки вставить, то можно перестраивать оптимизатор по-разному.

Microsoft делает немножко по-другому. Он в другой части команды Select предусматривает около 6 специальных ключевых слов, как там работать оптимизатору.

Так или иначе, большие СУБД вставляют в общепринятую команду Select свои подсказки, свои дополнительные слова, чтобы иметь возможность влиять на работы оптимизатора.

Работа оптимизатора видна при большом числе записей (миллионы записей).

При работе с 5-10 работа оптимизатора не видна, оптимизировать нечего. (оптимизатор сработает, но этого не видно).


Комментарии запрещены.




Статистика