Оптимизация SQL запросов в реляционных СУБД

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

»нения запроса. В любом случае тот компонент стоимости выполнения запроса, который связан с ресурсами устройств внешней памяти, монотонно зависит от числа блоков внешней памяти, доступ к которым потребуется при выполнении запроса.

Перейдем теперь к рассмотрению предложений, позволяющих более точно оценивать стоимости выполнения планов запроса. Эти предложения можно разбить на два класса. В соответствии с предложениями первого класса оптимизатор сохраняет жесткую структуру, аналогичную структуре оптимизатора System R, но при произведении оценок используются не предположения System R о равномерности распределений значений полей отношений и независимости распределений значений разных полей отношений, а на более точной статистической информации, характеризующей реальные распределения значений. Предложения второго класса более революционны и исходят из того, что для произведения планов выполнения запросов и их оценок оптимизатор должен снабжаться некоторой информацией, характерной для конкретной области приложений.

Естественно, что если отказаться от предположения о равномерности распределения значений поля отношения, то необходимо каким-то образом уметь установить реальное распределение значений. Подход System R является тривиальным частным случаем метода параметрической оценки распределения - любое распределение оценивается как равномерное. Более развитый подход был предложен Христодолакисом. Он предложил использовать для оценки реального распределения значений поля отношения серию распределений Пирсона, в которую входят распределения от равномерного до нормального. Выбор распределения из серии производится путем вычисления нескольких параметров на основе выборок реально встречающихся значений.

Метод оценки распределения на основе сигнатур в общих словах можно описать следующим образом. Область значений поля разбивается на несколько интервалов. Для каждого интервала некоторым образом устанавливается число значений поля, попадающих в этот интервал. Внутри интервала значения считаются распределенными по некоторому фиксированному закону (как правило, принимается равномерное приближение). Рассмотрим теперь более точно два альтернативных подхода, связанных с сигнатурным описанием распределений.

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

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

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

 

4Оптимизация запросов в Oracle 9.2

 

.1 Постановка задачи

 

База данных, с которой мы будем работать имеет следующую структуру. Имеется два сервера, которые расположены в различных частях города. Между ними имеется прямая связь по двухмегабитному выделенному каналу. В данной РСУБД вся база данных полностью репликацирована по двум серверам. База данных состоит из множества таблиц с различными данными по энергии области. В ней имеются как маленькие таблицы (например, список станций), так и очень большие (почти 200 млн. записей). На обоих серверах установлена одинаковая СУБД - Oracle 9.2.

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

 

4.2 Построение запроса

 

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

 

select st_name as name_of_station,e_name as name_of_seti,fg_name as name_of_group,f_name as name_of_fider, p_value as znachenie_moshnosti from pyr.stations@orcl_sbyt,refbus.ets,pyr.fgroups@orcl_sbyt,pyr.fiders,pyr.power where st_id=fg_station and st_ets=e_id and fg_station=f_station and f_id=p_fider and p_value>'40' and p_hhnumber>'119000'

Данный запрос является распределённым, так как выборка идёт из таблиц, расположенных на различных серверах. Результатом данного запроса является выборка из 2 428 479 строк. Время выполнения его составило 344 секунды. Это довольно длительное время. План выполнения данного запроса представлен на рисунке 1.

 

Рисунок 1 - План выполнения распределённого запроса

 

Из данного плана выполнения запроса видно, основная стоимость запроса уходит не на переток данных с сервера на сервер, а на выборку из таблиц. Если мы составим аналогичный запрос, но с выборкой только с одного сервера, то мы сможем в этом убедиться. Время выполнения этого запроса составило 327 секунд, что незначитель?/p>