Технологии распределенных баз данных :


Источник:http://ami.nstu.ru/~vms/lecture/lecture10/lecture10.htm


I. Обработка и оптимизация запросов

Обработка запроса - это процесс трансляции декларативного определения запроса в операции манипулирования данными низкого уровня.

Оптимизация запроса - это процедура выбора "наилучшей" стратегии для реализации запроса из множества альтернатив.

Для централизованной СУБД весь процесс состоит обычно из двух шагов:

декомпозиции запроса (1) и

оптимизации запроса (2).

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

Примеры анализа предикатов:

where position="manager" and position="assistant" - предикат противоречив;

where (position="manager" and position="assistant") or salary >2000 может быть заменен на предикат where salary>2000, т.к. противоречивую фразу можно заменить на False.

(2) Для заданного SQL-запроса существует более чем одно алгебраическое представление, причем некоторые из них могут быть "лучше" других. "Качество" алгебраического выражения определяется исходя из объема затрат, необходимых для его вычисления. Традиционная процедура состоит в том, чтобы сначала оттранслировать SQL-запрос в какое-нибудь выражение, а затем, применяя правила эквивалентных алгебраических преобразований, получать из него другие алгебраические преобразования, пока не будет найдено "наилучшее". При поиске "наилучшего" выражения используется функция стоимости, в соответствии с которой вычисляется сумма затрат, необходимых для выполнения запроса.

В распределенной СУБД между шагами декомпозиции и оптимизации запроса включаются еще два действия:

локализация данных (1+) и

глобальная оптимизация запроса (2-).

(1+) Исходной информацией для локализации данных служит алгебраическое выражение, полученное на этапе декомпозиции запроса. В этом выражении фигурируют глобальные отношения без учета их фрагментации или распределения. Сущность данного шага заключается в том, чтобы локализовать участвующие в запросе данные, используя информацию об их распределении. При этом выявляются фрагменты, реально участвующие в запросе, а запрос преобразуется к форме, где операции применяются уже не к глобальным отношениям, а к фрагментам. Ранее отмечалось, что правила фрагментации выражаются посредством реляционных операций:

селекции для горизонтальной фрагментации и

проекции для вертикальной.

Распределенные отношения реконструируются путем применения инверсии правил фрагментации. Это называется программой локализации. Программа локализации для

горизонтально фрагментированного запроса есть объединение (union) его фрагментов;

вертикально фрагментированного запроса есть соединение (join) его фрагментов.

(2-) Исходной информацией для третьего шага является фрагментный запрос, т. е. алгебраическое выражение над фрагментами. Цель глобальной оптимизации - найти стратегию выполнения запроса, близкую к оптимальной (вычислительно трудноразрешимая задача). Стратегия выполнения распределенного запроса выражается в терминах операций реляционной алгебры и коммуникационных примитивов (операций "послать"/"получить"), описывающих пересылки данных между узлами. Ранее (1) запрос уже был в определенной мере оптимизирован, в частности, за счет удаления избыточных выражений. Однако проведенные оптимизации не зависели от характеристик фрагментов, например их мощности и не были учитывали коммуникационных операций. Путем перестановок операций в рамках фрагментного запроса можно получить множество эквивалентных планов его выполнения, среди которых ищется "наилучший".

Оптимизатор запросов обычно представляется в виде трех компонентов: пространство поиска (1), модель стоимости (2) и стратегия поиска (3).

Пространство поиска (1) - это множество альтернативных планов выполнения исходного запроса. Планы эквивалентны в том смысле, что они дают один и тот же результат, но различаются порядком и способами выполнения отдельных операций.

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

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

В распределенной среде функции стоимости определяется в единицах времени и оценивает затраты таких ресурсов, как

дисковое пространство,

число обменов с дисками,

время CPU,

коммуникации и т. д. (обычно это некоторая взвешенная сумма затрат ввода-вывода, CPU и коммуникаций).

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

Важнейший аспект оптимизации запросов - это порядок выполнения соединений (самая дорогостоящая операция), поскольку его изменение может привести к ускорению до нескольких порядков. Базовая методика для оптимизации последовательности соединений заключается в применении оператора полусоединений (semijoin).

Операция полусоединения отношений R и S определяет отношение, которое содержит кортежи отношения R, которые входят в соединение отношений R и S.
II. Управление одновременным доступом

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

Алгоритмы управления одновременным доступом обеспечивают:

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

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

Наиболее популярные алгоритмы управления одновременным доступом основаны на механизме блокировок. В такой схеме всякий раз, когда транзакция пытается получить доступ к какой-либо единице памяти (как правило, странице), на эту единицу накладывается блокировка в одном из режимов - разделяемом или исключительном. Блокировки накладываются в соответствии с правилами совместимости блокировок, исключающими конфликты чтение-запись, запись-чтение и запись-запись. Существует теорема, что сериализуемость транзакций заведомо гарантируется, если блокировки, относящиеся к одновременно выполняемым транзакциям, удовлетворяют правилу: "Ни одна блокировка от имени какой-либо транзакции не должна устанавливаться, пока не будет снята ранее установленная блокировка". Это правило известно под названием двухфазового блокирования (транзакция сначала устанавливает блокировки, а потом блокировки снимает).

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