Базы данных Oracle - статьи


Поддержка параллельных систем. - часть 4


Теперь поговорим о параллелизме при выполнении отдельных операций (прежде всего запросов, ибо это наиболее важно для задач типа DSS). Как всегда, оптимизатор выбирает один из возможных алгоритмов выполнения запросов (при этом важно, что в Oracle он с самого начала при оценке стоимости того или иного решения учитывает заданную для данного запроса степень параллелизма), затем каждый шаг алгоритма разбивается на несколько параллельных потоков. Т.н. координатор выполнения запроса запускает нужное число процессов (при этом используются все наличные процессоры - включая различные узлы кластера или MPP-системы) и обеспечивает как внутриоперационный (параллельные потоки внутри шага алгоритма), так и межоперационный параллелизм. В список операций, подлежащих распараллеливанию помимо просмотра таблиц включены также все алгоритмы соединения (и т.н. “антисоединения” - конструкции типа NOT IN) таблиц, сортировки, операции агрегирования (SUM, AVG, GROUP BY и пр.), вложенные подзапросы, объединения (UNION, UNION ALL) и некоторые другие. Кроме того возможно параллельное выполнение таких операций, как создание таблицы по результатам запроса (CREATE TABLE AS SELECT), загрузка данных, сброс и восстановление БД, выполнение операций тиражирования данных. В Oracle8 к этому списку добавятся операции INSERT, UPDATE и DELETE.

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

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




Начало  Назад  Вперед



Книжный магазин