Вы находитесь на странице: 1из 186

Серия

Супер компь ютерн ое


Образование

Л. Б. Соколинский

Параллельные системы
баз данных

Суперкомпьютерный
консорциум
университетов России
Серия
Суперкомпьютерное
О бразование
Координационный совет
Системы научно-образовательных центров
суперкомпьютерных технологий
Председатель Координационного совета
В. А. Садовничий,
ректор МГУ имени М. В. Ломоносова,
академик
Зам естители председателя совета
Е. И. Моисеев,
декан факультета вычислительной математики и кибернетики
МГУ имени М. В. Ломоносова,
академик
А. В.Тихонравов,
директор Научно-исследовательского вычислительного центра
МГУ имени М. В. Ломоносова,
профессор

Члены совета
В. Н. Васильев , ректор Санкт-Петербургского национального исследова­
тельского государственного университета информационных технологий, механики
и оптики, чл.-корр. РАН, профессор; В. Г. Захаревич , ректор Южного феде­
рального университета, профессор; Н. Н. Кудрявцев , ректор Московско­
го физико-технического института, чл.-корр. РАН, профессор; Г. В. М айер ,
ректор национального исследовательского Томского государственного уни­
верситета, профессор; А. А. Фаткулин , проректор по науке и инновациям
Дальневосточного федерального университета, профессор; Е. В. Чупрунов,
ректор националь ного исследовательского Ниже городского го су дарственного
университета, профессор; А. Л. Шестаков , ректор национального иссле­
довательского Южно-Уральского государственного университета, профессор;
В. Н. Чубариков , декан механико-математического факультета МГУ имени
М. В. Ломоносова, профессор; М. И. Панасюк , директор Научно-исследо­
вательского института ядерной физики МГУ имени М. В. Ломоносова, профес­
сор; Вл. В. Воеводин , заместитель директора Научно-исследовательского
вычислительного центра МГУ имени М. В. Ломоносова, исполнительный директор
НОЦ «СКТ-Центр», член-корреспондент РАН.
Национальный исследовательский
Южно -Уральский государственный университет

Л.Б.Соколинский

Параллельные системы
баз данных

Допущено
УМО по классическому университетскому образованию
в качестве учебного пособия для студентов высших учебных заведений,
обучающихся по направлениям ВПО
010400 «Прикладная математика и информатика»
и 010300 «Фундаментальная информатика
и информационные технологии»

Издательство Московского университета


2013
УДК 007 (075)
ББК 32.973.2
С59

Соколи нский Л. Б.
С59 Параллельные системы баз данных: Учебное пособие / Предисл.:
В. А. Садовничий. - М.: Издательство Московского университета,
2013. - 184 с., илл. - (Серия «Суперкомпьютерное образование»)
ISBN 978-5-211-06482-9
Цель учебного пособия состоит в изложении основ технологий параллель­
ных систем баз данных. Особое внимание уделяется вопросам реализации
СУБД для кластерных систем. Дается классификация известных форм парал­
лельной обработки транзакций. Приводится сравнительный анализ различ­
ных архитектур параллельных систем баз данных. Рассматриваются возмож­
ные технологические подходы к организации параллельной обработки за­
просов. Обсуждается итерационная модель, синхронный и асинхронный
конвейеры. Излагаются методы фрагментации данных и способы организа­
ции межпроцессорных обменов. Предлагается подход к автоматическому пре­
образованию последовательного плана выполнения запроса в параллельный.
Большое внимание уделяется вопросам моделирования параллельных систем
баз данных и организации эффективной буферизации в условиях использова­
ния фрагментного параллелизма.
Книга ориентирована на студентов, аспирантов и научных работников, спе­
циализирующихся в области разработки технологий параллельных систем
баз данных и их применения для обработки сверхбольших объемов данных на
современных многоядерных и многопроцессорных системах с кластерной ар­
хитектурой.
Ключевые слова: параллельные системы баз данных, фрагментный парал­
лелизм, асинхронный конвейер, балансировка загрузки, моделирование па­
раллельной обработки транзакций, алгоритм LFU-K.
УДК 007 (075)
ББК 32.973.2

© Соколинский Л. Б., 2012


© Издательство Московского
ISBN 978-5-211-06482-9 университета, 2012
Уважаемый читатель!

Вы держите в руках одну из книг серии «Суперкомпьютерное об­


разование», выпущенную в рамках реализации проекта комиссии
Президента РФ по модернизации и технологическому развитию эко­
номики России «Создание системы подготовки высококвалифици­
рованных кадров в области суперкомпьютерных технологий и спе­
циализированного программного обеспечения». Инициатором
издания выступил Суперкомпьютерный консорциум университетов
России.
Серия включает более 20 учебников и учебных пособий, подго­
товленных ведущими отечественными специалистами в области
суперкомпьютерных технологий. В книгах представлен ценный опыт
преподавания суперкомпьютерных технологий в таких авторитет­
ных вузах России, как МГУ, ННГУ, ТГУ, ЮУрГУ, СПбГУ ИТМО
и многих других. При подготовке изданий были учтены рекоменда­
ции, сформулированные в Своде знаний и умений в области супер­
компьютерных технологий, подготовленном группой экспертов
Суперкомпьютерного консорциума, а также международный опыт.
Современный уровень развития вычислительной техники и мето­
дов математического моделирования дает уникальную возможность
для перевода промышленного производства и научных исследова­
ний на качественно новый этап. Эффективность такого перехода на­
прямую зависит от наличия достаточного числа высококвалифици­
рованных специалистов. Данная серия книг предназначена для
широкого круга студентов, аспирантов и специалистов, желающих
изучить и практически использовать параллельные компьютерные
системы для решения трудоемких вычислительных задач.
6

Издание серии «Суперкомпьютерное образование» наглядно де­


монстрирует тот вклад, который внесли участники Суперкомпью­
терного консорциума университетов России в создание националь­
ной системы подготовки высококвалифицированных кадров в области
суперкомпьютерных технологий, а также их четкое понимание ответ­
ственности за подготовку высококвалифицированных специалистов
и формирование прочного научного фундамента, столь необходимого
для эффективного использования суперкомпьютерных технологий
на практике.
Ректор Московского университета,
Президент Суперкомпьютерного консорциума
университетов России,
академик РАН В. А. Садовничий
Оглавление

Введение............................................................................................................ 9
ЧАСТЬ I. АРХИТЕКТУРА ПАРАЛЛЕЛЬНЫХ СИСТЕМ БАЗ ДАН­
НЫХ.................................................................................................................. 13
Глава 1. Базисные концепции........................................................................ 15
§ 1.1. Введение в параллельную обработку запросов......................... 15
§ 1.2. Формы параллельной обработки транзакций........................... 21
§ 1.3. Определение параллельной системы баз данны х..................... 27
Глава 2. Классификация параллельных архитектур................................... 33
§ 2.1. Структурно-функциональная классификация......................... 34
§ 2.2. Виртуально-иерархическая классификация.............................. 37
Глава 3. Требования к параллельной системе баз данных.......................... 45
§ 3.1. Масштабируемость.......................................................................... 45
§ 3.2. Производительность ...................................................................... 47
§ 3.3. Доступность данных....................................................................... 52
§ 3.4. Сравнительный анализ архитектур параллельных систем баз
данных .............................................................................................. 53
ЧАСТЬ II. ТЕХНОЛОГИИ ПАРАЛЛЕЛЬНЫХ СИСТЕМ БАЗ ДАН­
Н Ы Х ................................................................................................................. 57
Глава 4. Выполнение запросов....................................................................... 59
§ 4.1. Итераторы......................................................................................... 59
§ 4.2. Синхронный конвейер................................................................... 61
§ 4.3. Асинхронный конвейер ................................................................. 75
Глава 5. Распределение данных..................................................................... 81
§ 5.1. Фрагментация данны х................................................................... 81
§ 5.2. Пересылка данных .......................................................................... 86
§ 5.3. Оператор обмена exchange............................................................. 89
Глава 6. Модель параллельной системы баз данных.................................. 94
§ 6.1. Определения из теории графов..................................................... 94
8 Оглавление

§ 6.2. Модель аппаратной платформы.................................................. 95


§ 6.3. Модель операционной среды ........................................................ 103
§ 6.4. Стоимостная модель....................................................................... 106
§ 6.5. Модель транзакций.......................................................................... 107
Глава 7. Балансировка загрузки...................................................................... 115
§ 7.1. Сегментация и репликация данны х............................................. 115
§ 7.2. Зеркалирование в симметричных DM-деревьях........................ 117
§ 7.3. Функция зеркалирования............................................................... 122
§ 7.4. Алгоритм балансировки загрузки................................................. 128
Глава 8. Буферизация в параллельных СУБД............................................... 132
§ 8.1. Буферизация и замещение страниц.............................................. 132
§ 8.2. Требования к стратегии замещения.............................................. 134
§ 8.3. Стратегии LR U и LFU...................................................................... 140
§ 8.4. Специальные стратегии замещения............................................. 142
§ 8.5. Общие стратегии замещения......................................................... 145
§ 8.6. Алгоритм LFU-2................................................................................ 155
§ 8.7. Формальное описание стратегии LFU-K..................................... 157
§ 8.8. Аналитическая оценка параметра m алгоритма LFU-K............ 160
§ 8.9. Реализация алгоритма LFU-K........................................................ 170
Литература........................................................................................................ 175
Предметный указатель.................................................................................... 177
Введение

Комплекс сложных научно-технических проблем, связанных


с созданием высокопроизводительных и надежных систем баз
данных, в условиях перехода общества от индустриальной эры
к инф орм ационной не только сохраняет, но и усиливает свою
актуальность. Об этом свидетельствуют интенсивны е научные
исследования в области баз данных, проводимые в России и за
рубежом.
В н асто ящ ее вр ем я си стем ы у п р авл ен и я б азам и д ан н ы х
(СУБД) используются практически во всех сферах человеческой
деятельности, связанных с хранением и переработкой инф орм а­
ции. Прогресс, достигнутый в области технологий баз данных,
в значительной мере базируется н а реляционной модели, пред­
лож енной Э. Коддом н а рубеже 60—70-х годов ХХ века. За свою
тридцатилетнюю историю реляционны е СУБД прош ли путь от
научно-исследовательских прототипов, наиболее значительными
из которых являю тся System R и Ingres, до коммерческих п ро­
дуктов, способных хранить и обрабатывать терабайты и н ф ор­
мации. Однако научная и практическая деятельность человека
выдвигает все новые масштабные задачи, требующие обработки
сверхбольших баз данных. Возникновение сверхбольших баз д ан ­
ных связано с расш ирением видов и сфер прим енения СУБД.
П рим ерами прилож ений, характеризую щ ихся сверхбольш им
объемом хранимых данных, являю тся электронная коммерция,
электронные библиотеки, геоинформ ационны е системы, муль­
тим едийны е архивы, социальны е сети, поисковы е системы ,
научные базы данных и др.
О дной из самых больших и быстро наполняем ы х научных
баз данны х является база данны х проекта W LC G (Worldwide
Large H adron Collider Computing Grid). Главной целью проекта
W LCG является использование грид-среды для обработки экс-
10 Введение

периментальны х данных, получаемых с Больш ого адронного


коллайдера (Large H adron Collider, LHC) Европейского центра
ядерны х исследований (C E R N ). П оток эксперим ентальны х
данных, который необходимо обрабатывать, составляет около
15 петабайт в год.
Другим примером сверхбольших баз данных являю тся базы
данных, хранящ ие обзоры звездного неба, полученные различ­
ны м и телескопами мира. Так, например, база данных системы
SkyServer проекта SDSS (Sloan Digital Sky Survey) хранит обзор
одной четвертой части звездного неба, полученный с помощью
2,5-м етрового ш и рокоугольного тел ескоп а в О бсерватории
Апачи-П ойнт, Н ью -М ексико. Суммарный объем данных, н а ­
копленных к 2008 году в результате первой и второй фаз проекта,
составил 40 терабайт. Третья фаза проекта SDSS, начатая в 2008
году, предусматривает ввод в строй еще четырех телескопов. К
моменту ее завершения в 2014 году общ ий объем данных, постав­
ляемых телескопами, будет составлять несколько петабайт в год.
Н овая парадигма «синоптической», или временно-зависимой,
астрономии реализуется в рамках проекта Pan-STARRS и LSST.
Проект Pan-STARRS предусматривает строительство системы из
четырех панорамных телескопов н а верш ине вулкана М ауна-Кеа
н а острове Гавайи. Этой системе телескопов будет доступно 3/4
всего неба. Одна и та же область неба будет повторно сниматься
с интервалом в несколько десятков минут. Основная задача —
обнаружение объектов, меняю щ ихся во времени. Примерами
таких объектов служат сверхновые звезды или астероиды. П о­
сле каждого сканирования будет получено несколько терабайт
данных. К настоящему моменту запущен в эксплуатацию первый
Pan-STARRS телескоп, который генерирует 2 терабайта данных за
одну ночь, что составляет 800 терабайт в год. Второй Pan-STARRS
телескоп планируется запустить в 2013 году. После запуска всех
четырех телескопов, объем генерируемых данных составит около
4 петабайт в год. Проект L S S T (Large Synoptic Survey Telescope)
предусматривает строительство в Ч или ш ирокоугольного об­
Введение 11

зорного телескопа-рефлектора, предназначенного для съемки


доступной области неба каждые три ночи. LSST будет генериро­
вать 30 терабайт инф орм ации в сутки. Предполагается, что база
данных проекта будет содержать архив изображ ений объемом в
65 петабайт и каталог астрономических объектов объемом в 70
петабайт. Работы по созданию виртуальной обсерватории ведутся
также и в России. В настоящ ее время начаты работы по двум
масш табным косм ическим эксперим ентам «Лира» и «Свеча»,
целью которых является вы сокоточны й м ногоцветны й ф ото­
метрический обзор звезд всего неба вплоть до 16—17 звездной
величины. В обзор войдут около 400 миллионов звезд. И зм ере­
ни я будут вестись в 10 спектральных полосах от 0,2 до 1,0 мкм с
борта Российского сегмента М КС. Д ля хранения базы данных
проекта «Лира» потребуется дисковое пространство суммарным
объемом до 1 петабайта. Д ля хранения данных проекта «Свеча»
потребуется дисковое пространство размером несколько экза­
байт. Д ля сравнения заметим, что суммарный объем текста в
книгах, которые были когда-либо опубликованы н а Земле, со­
ставляет 30 терабайт.
Еще одним прим ером сверхбольш их баз данны х являю тся
базы данных проекта EO S/D IS (Earth Observation System /D ata
Information System), разрабатываемого агентством NASA в США.
Система наблю дения земли EOS вклю чает в себя множество
спутников, которы е собираю т и н ф о р м ац и ю , необходим ую
для изучения долгосрочных тенденций состояния атмосферы,
океанов, земной поверхности. Н ачиная с 1998 года, спутники
поставляю т информацию в объеме 1/3 петабайт в год.
Крупные корпорации, такие как AT&T, Walmart, eBay, Facebook
и некоторы е другие, уже сегодня обрабатывают базы данных
объемом в десятки петабайт. Поисковые системы ранга Yahoo!
и Google работают с базами данных в сотни петабайт.
Ф актически единственны м эф ф екти вн ы м реш ением п р о ­
блемы хранения и обработки сверхбольших баз данных является
использование параллельных систем баз данных, обеспечиваю­
12 Введение

щ их параллельную обработку запросов н а многопроцессорных


вычислительных системах. В области технологий параллельной
обработки запросов для реляционны х баз данных достигнуты
значительные успехи, воплощ енные в целом ряде исследователь­
ских и коммерческих СУБД. В качестве примеров успешных ком ­
мерческих проектов создания параллельных систем баз данных
можно привести DB2 Parallel Edition, N onStop SQL и Teradata.
Подобные системы объединяют ты сячи процессоров и жестких
дисков и способны обрабатывать петабайтные базы данных.
Данное учебное пособие посвящ ено изложению фундамен­
тальных основ архитектуры и технологий параллельных систем
баз данных. Рассматриваются различны е формы параллельной
обработки транзакций. Дается классиф икация архитектур п а ­
раллельных систем баз данных. Излагаются базовые принципы
фрагментного параллелизма. Больш ое вним ание уделяется во­
просам интеграции параллелизма в последовательные СУБД.
О свещ аю тся проблем ы , связанны е с вы бором эф ф ективны х
стратегий замещ ения дисковы х страниц в буферном пуле п а ­
раллельной системы баз данных. Предлагаются подходы к ре­
ш ению проблемы балансировки загрузки процессорных узлов
при параллельной обработке запросов к базе данных. О писы­
вается математическая модель параллельной системы баз д ан ­
ных, позволяю щ ая моделировать и исследовать произвольные
иерархические многопроцессорные конфигурации в контексте
прилож ений баз данных.
К нига будет п ол езн а научны м работникам , аспирантам и
студентам старших курсов, специализирую щ имся в области баз
данных.
Д ля поним ания материала книги необходимо знание стан­
дартного университетского курса по базам данных и спецкурса
по компиляции, оптимизации и вы полнению запросов. Весь н е ­
обходимый материал заведомо содержится в фундаментальном
учебнике [1]. Оттуда же мы заимствуем символы реляционных
операций и другие обозначения.
Часть 1

Архитектура
параллельных систем
баз данных
Глава 1

Базисные концепции

Историю технологий баз данных принято отсчитывать с н а ­


чала 1960-х гг., когда появились первые попы тки создания спе­
циальных программных средств управления базами данных. За
прошедшие десятилетия возникали и использовались различные
подходы к организации баз данных. Д ля описания и сравнения
этих подходов используется понятие модели данных [11]. Од­
н им и из первых были иерархическая и сетевая модели данных.
В 1970 г. была опубликована известная статья Эдгара Кодда [6],
в которой была описана новая реляционная модель данных. Н е­
смотря н а то, что с этого момента появились и другие модели
данных, реляционная модель по-преж нему лежит в фундаменте
архитектуры больш инства современных СУБД. Во время раз­
работки реляционной модели Кодд н е думал о проблемах п а ­
раллельной обработки транзакций, однако, как обнаружилось
позже, реляционная модель по своей природе оказалась очень
хорошо приспособленной для распараллеливания. В силу этих
причин практически все параллельные системы баз данных в
своей основе опираются на реляционную модель. Поэтому в этой
книге мы ограничимся реляционной моделью данных.

§ 1.1. Введение в параллельную обработку


запросов
В этом параграфе н а простых примерах мы рассмотрим основ­
ны е аспекты, связанные с организацией параллельного вы пол­
н ен и я запросов. В примерах мы будем использовать учебную
базу данных «Поставки», изображенную н а рис. 1. База данных
16 Глава 1. Базисные концепции

Рис. 1. Учебная база данных «Поставки»

«Поставки» состоит из трех таблиц: П, Д и ПД. Таблица Д со­


держит информацию о деталях, необходимых для производства
некоторых устройств, собираемых н а некотором предприятии.
Таблица П содержит информацию о поставщиках, поставляющих
эти детали. Таблица П Д содержит записи о том, какой постав­
щ и к какие детали поставляет. Символом * помечены первичные
ключи. Символом # помечены внеш ние ключи.
Пример 1. Предположим, что нам необходимо найти в базе
данны х им ена всех поставщ иков, зарегистрированных в М о­
скве. Реализация этого запроса н а язы ке SQL будет выглядеть
следующим образом.
/ * Имена поставщ иков, за реги стриров ан н ы х в Москве * /
SELECT Имя_П
FROM П
WHERE Г ор о д = ' М о с к в а ';
П осле ком пиляции запроса мы получим последовательный
план вы полнения запроса, изображ енный на рис. 2.
Допустим, мы хотим ускорить вы полнени е наш его запро­
са путем использования дополнительных процессорных узлов
(серверов). Предположим, что в наш ем распоряж ении имеется
Глава 1. Базисные концепции 17

Рис. 2. Последовательный план

10 узлов. Разобьем таблицу П на


10 частей (фрагментов) П0, ..., П 9
следующим образом: П . = {t | t е П,
t. К о д _ п ш оё10 = /} (0,...,9). Раз­
м естим каж ды й фрагм ент н а от­
дельном процессорном узле, как
это показано н а рис. 3.
Преобразуем последовательный
план вы полнения запроса в параллельны й, как это показано
н а рис. 4. Параллельный план представляет собой набор п о ­
следовательных планов A0, . , A 9, назы ваем ы х параллельны м и
агентами. К аж ды й параллельный
агент представляет собой копию
исходного последовательного пла-
на, у которого входное отношение
заменено н а фрагмент с соответ­
ствующим индексом. Количество
агентов совпадает с количеством
фрагментов и с количеством про­
цессорны х узлов, используемы х
для распараллеливания запроса.
Выполнение параллельного плана
заключается в одновременном вы ­
полнении параллельных агентов на
соответствующих узлах-серверах.
В итоге н а каждом узле-сервере бу­
дет получен частичны й результат.

Рис. 3. Разбиение (фрагментация)


таблицы П по отдельным процессор­
ным узлам
18 Глава 1. Базисные концепции

t *!>
i
гг ■ %
i
x «.

I %

/
'1[ ^----- V
Г И - Г /Н Г ,1 ]

И м я II.

) х [Ц>
Параллельный агент А „
приц 'М1ЧЖ1М!'.

Е г
#t ^чч

Последовательный план

Рис. 4. Преобразование по­ ULSpa.i.K'.ihuutl агент Л,


следовательного плана в
параллельный I liapisxriMF.Huii план

Очевидно, что для примера, изображенного н а рис. 4, слияние


частичных результатов в одну таблицу даст правильны й ответ
н а исходный SQL-запрос. П ри этом время вы полнения запроса
ускорится примерно в 10 раз!
Таким об разом ,н а основе приведенного п ри м ера, мож но
сделать вывод о том, что п ри вы полнении операции выбора над
большой таблицей, равномерно распределенной по узлам много­
процессорной системы, можно получить ускорение, практически
пропорциональное количеству процессорных узлов. Возможно
ли применить подход, проиллю стрированный н а рис. 5 к другим
Глава 1. Базисные концепции 19

Рис. 5. Общая схема параллельной обработки запроса

реляционны м операциям с тем же эффектом? Рассмотрим более


сложный пример.
Пример 2. Предположим, что нам необходимо найти в базе
данных им ена всех поставщ иков, поставляю щих хотя бы одну
красную деталь. Реализация этого запроса н а язы ке SQL будет
выглядеть следующим образом.
/ * Имена п о с т а в щ и к о в , поставляю щ их
красные д е т а л и . */
SELECT Имя_П
FROM П, ПД
WHERE П.Код_П = ПД.Код_П
AND ПД.Код_Д = Д.К од_Д
AND Цвет = 'К р а с н ы й ' ;
П араллельн ы й агент этого запроса и зоб раж ен н а рис. 6.
Этот агент не предполагает обменов данны м и между процес­
сорны м и узлами. Предположим, что база данных «Поставки»
фрагментирована между двумя процессорны ми узлами так, как
это изображено н а рис. 7. Очевидно, что параллельный план,
сформ ированны й из агентов вида, изображенного на рис. 6, для
указанной фрагментации будет работать неправильно! Это связа­
но с тем, что в части базы данных, располож енной на одном узле
20 Глава 1. Базисные концепции

Рис. 6. Неправильный (без обме­


нов) агент для запроса «Имена по­
ставщиков, поставляющих красные
детали»

нарушается целостность ссылок по


внеш нему ключу.
Так, например, поставка с клю ­
чом К о д _ п д = 5 в таблице ПД 0
с с ы л а е т с я н а д етал ь с к л ю ч о м
К о д _ Д = 1 , отсутствующую в таб­
лице Д 0. Поэтому ПД XI д ^ П Д 0 N
Д 0 и ПД 1 d Д 1. Таким образом, мы
можем сделать вывод, что для правильной работы параллельной
СУБД необходимо обеспечить возможность пересылки кортежей
между параллельными агентами, работаю щ ими на разных про-

Рис. 7. Фрагментация базы данных «Поставки»


Глава 1. Базисные концепции 21

цессорны х узлах. М етоды организации ком м уникаций между


процессорны ми узлами будут рассмотрены в главе 5.

§ 1.2. Формы параллельной обработки


транзакций

П араллельная обработка данны х в том и ли и н ом виде п р и ­


сутствует во всех соврем енны х полноф ункциональны х СУБД.
Это означает, что в некотором смы сле все СУБД являю тся п а ­
раллельными! Однако формы параллелизма в различны х СУБД
могут значительно отличаться друг от друга. В этом параграф е
м ы дадим классиф икацию и обзор основны х ф орм параллель­
н ой обработки запросов над базой данных. П ри этом мы будем
опираться н а понятие транзакции SQL, представляю щ ей собой
последовательность операторов SQL, обладающую свойством
атомарности относительно восстановления непротиворечивого
состоян и я базы данны х. К аж ды й SQ L-оператор определяет
н еко то р о е д ей стви е над базой д ан н ы х, к о то р о е м ы будем
назы вать запросом. Таким образом , м ы м ож ем считать, что
тран закц и я состоит из последовательности запросов. В свою
очередь, запрос состоит из операций реляц и он н ой или, более
точно, ф изической алгебры, формирую щ их план вы полнения
запроса.
П ри обсуждении различных ф орм параллельной обработки
транзакций мы будем использовать понятие «степень паралле­
лизма». Степень параллелизма — это максимальное количество
элементарных операционных объектов, составляющих вы чис­
лительную процедуру, которые могут выполняться параллельно.
Н априм ер, степень параллелизм а процедуры слож ения двух
n-мерных векторов равна п. Роль операционных объектов в этом
случае играют арифметические операции.
К лассиф икация различны х форм параллельной обработки
транзакций представлена н а рис. 8. Прежде всего, можно вы-
22 Глава 1. Базисные концепции

Рис. 8. Классификация форм параллельной обработки транзак­


ций

делить межтранзакционную и внутритранзакционную формы


параллелизма.
Межтранзакционный параллелизм подразумевает параллельное
выполнение множества независимых транзакций над одной и той
же базой данных. Степень меж транзакционного параллелизма
теоретически является неограниченной. Д анны й вид паралле­
лизма присутствует уже в однопроцессорных системах баз дан­
ных в виде так называемого многозадачного режима и основан
н а перекрытии задержек ввода-вывода. П ока одна транзакция
ожидает заверш ения обмена с диском, другая транзакция может
выполнять операции с данны м и, размещ енны м и в оперативной
пам яти. М еж транзакционны й параллелизм п озволяет сущ е­
ственно увеличить суммарную производительность системы баз
данных в режиме оперативной обработки транзакций (OLTP).
Режим OLTP характеризуется наличием большого количества
Глава 1. Базисные концепции 23

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


ственно для бизнес-прилож ений систем баз данных. М ежтран­
закционны й параллелизм такж е долж ен поддерж иваться и в
мультипроцессорных системах (в рамках одного процессора), так
как в противном случае м ы получим очень плохое соотнош ение
цена-производительность для режима OLTP. Однако для дости­
ж ения более вы сокой производительности мультипроцессорной
системы в приложениях баз данных мы должны использовать
внутритранзакционный параллелизм. В нутритранзакционны й
параллелизм подразумевает параллельное выполнение отдельной
транзакции. Этот вид параллелизма может быть реализован либо
в форме межзапросного параллелизма, либо в форме внутриза­
просного параллелизма.
Межзапросный параллелизм предполагает параллельное выпол­
нение запросов, соответствующих различны м SQL-операторам
одной и той же транзакции. Степень межзапросного параллелиз­
ма ограничена как количеством SQL-операторов, составляющих
данную транзакцию , так и ограничениям и предш ествования
между отдельными SQL-операторами. М ежзапросный паралле­
лизм не поддерживается большинством современных СУБД, так
как это потребовало бы от программиста явной специф икации
межзапросных зависимостей с помощью некоторых специальных
языковых конструкций.
Внутризапросный параллелизм предполагает параллельное вы ­
полнение запроса, соответствующего отдельному SQL-оператору.
Данная форма параллелизма характерна для реляционных систем
баз данных. Это обусловлено тем, что реляционные операции над
наборами кортеж ей по своей природе хорошо приспособлены
для эф ф ективного распараллеливания. Внутризапросны й п а ­
раллелизм реализуется в параллельной СУБД прозрачны м для
пользователя образом. Д ля каждого запроса СУБД генерирует
последовательный план его вы полнения в виде дерева (ацикли­
ческого ориентированного графа), узлы которого соответствуют
реляционны м операциям, дуги - потокам данных между опе­
24 Глава 1. Базисные концепции

рациями, а в качестве листьев фигурируют отнош ения. Затем


последовательный план преобразуется в параллельны й путем
конструирования параллельных агентов. Каждый агент испол­
няется на отдельном процессорном узле. П ри этом параллельная
СУБД обеспечивает их взаимодействие и синхронизацию. Эти
процессы скрыты от конечного пользователя, для которого все
происходит так, как если бы он работал на последовательной
маш ине баз данных. Внутризапросный параллелизм может реа­
лизовываться либо в виде межоперационного параллелизма, либо
в виде внутриоперационного параллелизма.
Межоперационный параллелизм предполагает параллельное
вы полнение операций, принадлежащ их одному и тому же плану
вы полнения запроса. М еж операционны й параллелизм может
реализовываться либо в виде кустового (горизонтального) паралле­
лизма, либо в виде конвейерного (вертикального) параллелизма.
Кустовой ( горизонтальный) параллелизм предполагает парал­
лельное вы полнение независимы х поддеревьев дерева, пред­
ставляющего план вы полнения запроса. В силу того, что планы
вы полнения запросов всегда представляются в виде бинарных
деревьев, степень кустового параллелизма ограничена величиной
2h, где h —высота дерева. Н а практике высота дерева, представля­
ющего план вы полнения запроса, редко превыш ает 4. Основная
проблема, связанная с кустовым параллелизмом, заключается в
том, что очень трудно обеспечить, чтобы два подплана одного
плана начали генерировать выходные данные в правильное время
и в правильном темпе. П ри этом правильное время далеко не
всегда означает одинаковое время (например, для входных п о ­
токов операции хеш -соединения), а правильны й темп далеко не
всегда означает одинаковый темп (например, для случая, когда
входные потоки соединения слиянием имею т различны е раз­
меры). В силу указанных причин кустовой параллелизм редко
используется на практике.
Конвейерный (вертикальный) параллелизм предполагает орга­
низацию параллельного выполнения различных операций плана
Глава 1. Базисные концепции 25

запроса н а базе механизма конвейеризации. В соответствии с


данны м механизмом, операции физической алгебры оф ормля­
ются как легковесные процессы (нити), образующие иерархию,
соответствую щ ую дереву п л ан а запроса. М ежду см еж ны м и
операциями в дереве запроса организуется поток данных в виде
конвейера, по которому кортеж и передаю тся от поставщика к
потребителю. Для передачи между поставщ иком и потребителем
используется буфер размером в один кортеж. Традиционный
подход к организации конвейерного параллелизма заключается в
использовании абстракции итератора для реализации операций в
дереве запроса. Подобный подход получил называние синхронного
конвейера. Основным недостатком синхронного конвейера явля­
ется блокирующий характер операций конвейерной обработки
отдельных кортежей. Если некоторая операция задерживается с
обработкой очередного кортежа, то она блокирует работу всего
конвейера. Для преодоления указанного недостатка может быть
использован асинхронный конвейер, в котором поставщ ик и п о ­
требитель работают независимо друг от друга, а данны е пере­
даю тся через склад, им ею щ ий структуру очереди. П оставщ ик
помещает производимые кортежи в склад, а потребитель забирает
кортеж и из склада в соответствии с дисциплиной FIFO . П ри
этом необходимо определенное управление потоком данных,
которое препятствовало бы переполнению склада в случае, ког­
да потребитель работает медленнее, чем поставщ ик. Подробно
вопросы организации конвейера обсуждаются в главе 4. Следует
отметить, что степень конвейерного параллелизма в любом слу­
чае ограничена количеством операций, вовлекаемых в конвейер.
П ри этом для реляционны х систем баз данных длина конвейера
редко превыш ает 10 операций. Поэтому для достижения более
вы сокой степени распараллеливания наряду с конвейерны м
параллелизмом необходимо использовать внутриоперационный
параллелизм.
Внутриоперационный параллелизм реализуется в основном в
форме фрагментного параллелизма, предполагающего разбиение
26 Глава 1. Базисные концепции

входных отношений на фрагменты, которые могут обрабатывать­


ся независимо на разных узлах многопроцессорной системы. Мы
можем рассматривать и другие формы внутриоперационного
параллелизм а, базирую щ иеся н а делении реляционной опе­
рации н а подоперации. Однако данны е формы параллелизма
концептуально ничем не отличаются от рассмотренных выш е и
на практике большого значения не имеют.
Фрагментный параллелизм, к а к м ы уже сказали, п р ед п о ­
лагает фрагментацию (разбиение н а непересекаю щ иеся части)
отнош ения, являю щ егося аргументом реляционной операции.
Одиночная реляционная операция выполняется в виде несколь­
ких параллельны х процессов (агентов), каж ды й из которы х
обрабаты вает отдельны й ф рагм ент отнош ения. Получаемые
результирующие фрагменты сливаются в общее результирующее
отнош ение. Схематично этот процесс изображен н а рис. 9. В ре­
ляционны х системах баз данных фрагментация подразделяется
н а вертикальную и горизонтальную. Вертикальная фрагментация
подразумевает разбиение отнош ения на фрагменты по столб­
Глава 1. Базисные концепции 27

цам (атрибутам). Горизонтальная фрагментация подразумевает


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

§ 1.3. Определение параллельной системы


баз данных
О сновы ваясь н а приведенной вы ш е класси ф и кац и и ф орм
параллельной обработки транзакций, мы можем дать следующее
неформальное определение параллельной системы баз данных.
Параллельная система баз данных —это СУБД, реализованная
на многопроцессорной системе с высокой степенью связности.
Под многопроцессорной системой с высокой степенью связности
м ы поним аем систему, включающую в себя много процессоров
28 Глава 1. Базисные концепции

и много дисков, в которой процессоры объединены между со­


бой с помощ ью некоторой соединительной сети, причем время
обмена данными по сети сравнимо со временем обмена данными
с диском. Приведенное определение исключает из рассмотрения
распределенные СУБД, реализуемые н а нескольких независимых
компьютерах, объединенных локальной и (или) глобальной се­
тями, для которых характерны свои специфические проблемы,
такие как географическая удаленность, локальная автономность,
программ ная и аппаратная гетерогенность, и применительно к
которым не рассматривается комплекс важных проблем, связан­
ных с большим количеством процессорных узлов. Однако данное
определение включает в себя ш ирокий спектр систем, начиная
с традиционных последовательных СУБД, портированных на
симметричные мультипроцессорные системы и использующих
только м еж транзакционный параллелизм, и кончая сложными
параллельными системами, реализованными на кластерах или
мультипроцессорах с массовым параллелизмом, использующими
ф рагментный параллелизм.
Как мы увидим далее, существует тесная связь между внутрен­
ней архитектурой параллельной СУБД и архитектурой многопро­
цессорной системы, служащей для нее аппаратной платформой.
Эта связь настолько тесная, что мы не можем рассматривать в
отдельности аппаратную и программную архитектуры параллель­
ной системы баз данных. В соответствии с этим, для описания и
классиф икации параллельных систем баз данных мы введем аб­
страктное понятие виртуальной параллельной машины баз данных.
Виртуальная параллельная машина баз данных строится из
следую щ их виртуальных устройств: виртуальные процессоры,
виртуальные модули памяти, виртуальные диски, виртуальная
соединительная сеть.
Виртуальный процессор — это виртуальное устройство, и с ­
пользуемое для вы полнения отдельной задачи, определяемой
как процесс базы данных. Типичным прим ером процесса базы
данных является запрос или агент запроса (при использовании
Глава 1. Базисные концепции 29

фрагм ентного параллелизм а). В реальной системе виртуаль­


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

Рис. 10. Пример конфигурации виртуальной параллельной машины


баз данных. P - виртуальный процессор, M - виртуальный модуль па­
мяти, D - виртуальный диск, N - виртуальная соединительная сеть

полагать, что в виртуальной параллельной маш ине баз данных


может существовать не более одной виртуальной соединительной
сети. П ри этом следует отметить; если в виртуальной машине
имеется только один модуль памяти, то виртуальная сеть должна
отсутствовать.
Передача сообщ ения в виртуальной параллельной м аш ине
баз данных может осуществляться только посредством комму­
никативных действий, выполняемых каким -либо виртуальным
процессором, соединенны м с соответствующим виртуальным
модулем памяти. Поэтому с виртуальной соединительной сетью
могут соединяться дугами только виртуальные процессоры. При
этом мы допускаем сущ ествование конф игураций, в которых
не каж ды й виртуальны й процессор соединен с виртуальной
сетью.
Виртуальную параллельную машину баз данных мы можем теперь
определить как связны й граф, узлы которого соответствуют раз­
личны м виртуальным устройствам, а ребра соответствуют пото­
кам данных. Пример конф игурации виртуальной параллельной
м аш ины баз данных изображен н а рис. 10.
Глава 1. Базисные концепции 31

Рис. 11. Иерархия виртуальных ма­


шин баз данных

Следует отм етить, что ви рту­


альная маш ина баз данных пред­
ставляет собой не что иное, как
некоторы й уровень абстракции в
системной иерархии программных
модулей СУБД и операционной
систем ы , реализую щ их систем у
баз данных н а конкретной аппа­
р атн о й платф орм е. П р и этом в
рамках одной системы мы можем
рассм атривать н еско л ько таких
уровней абстракции. Виртуальная
машина каждого следующего уров­
ня реализуется н а основе ф ункций
и сервисов, предоставляемых ви р­
туальной м аш иной предыдущего
уровня.
П о я с н и м это н а сл ед ую щ ем
примере, изображенном н а рис. 11.
В основе системной иерархии здесь
лежит виртуальная машина V0, име­
ющая аппаратно-программную ре­
ализацию. Аппаратная платформа
V0представляет собой фактически
объединение в сеть нескольких самостоятельных компьютеров.
В качестве операционной системы здесь может фигурировать,
например, ОС Linux, загружаемая н а каждом узле, а в качестве
средства системной интеграции —пакет M PI.
Используя виртуальную маш ину V0, мы можем создать к о м ­
плекс программ Ij, реализующих некоторы й виртуальный диск,
объединяю щ ий в себе свободное дисковое пространство всех
32 Глава 1. Базисные концепции

физических дисков системы. В этом случае мы можем говорить,


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

Аналогичным образом мы можем в среде Vj создать комплекс


программ I2, реализующих общую виртуальную память, объеди­
няющую в себе свободное адресное пространство всех физиче­
ских модулей памяти. Тем самым мы построим отображение из
конф игурации Vj в конфигурацию V2, в которой все процессоры
разделяю т общую память и общее дисковое пространство. П о­
сле этого мы можем завершить реализацию СУБД в контексте
конф игурации V2.
П олучивш аяся в итоге система баз данны х будет иметь ги­
бридную архитектуру в том смысле, что н а физическом (нулевом)
уровне она будет представлять собой систему без совместного и с­
пользования ресурсов, н а логическом (первом) уровне —систему
с разделяемыми дисками, а н а виртуальном (втором) уровне —
систему с разделяемой памятью и дисками. Разумеется, ко н ф и ­
гурация, изображенная н а рис. 11, не является ж изнеспособной
из-за проблем с эффективностью доступа к такой виртуальной
памяти и такому виртуальному диску, однако ниже мы приведем
примеры реальных гибридных конфигураций, имеющих практи­
ческое прим енение в параллельных системах баз данных.
В заключение отметим, что мы добавляем к термину «вирту­
альная маш ина» словосочетание «баз данных» с единственной
целью — ограничить м ногообразие возм ож ны х ком бинаций,
удаляя из рассмотрения архитектуры, заведомо неадекватные
с точки зрения специф ики баз данных, которые, однако, могут
оказаться вполне приемлемыми для задач других классов.
Глава 2

Классификация
параллельных архитектур

В н астоящ ее врем я и звестн о достаточно м ного подходов


к классиф икации параллельных вы числительны х систем [1].
О дной из первы х к л асси ф и кац и й параллельны х архитектур
является классиф икация Ф линна, которая была разработана в
60-х годах прошлого века. В настоящ ее время классиф икация
Ф линна представляет главным образом теоретический интерес.
Впоследствии появилось множество других классификационных
подходов, обзор которых можно найти в м онографии [2]. В п о ­
следнее время большую популярность приобрела структурно­
ф ункциональная классиф икация [10], в основе которой лежат
структурные различия в компоновке функциональных элементов
многопроцессорной системы.
Н есм отря н а такое м ногообразие, сущ ествую щ ие к л а с си ­
ф икации архитектур многопроцессорных систем оказываются
с точки зрения СУБД либо слиш ком общими, либо не вполне
адекватными. В 1986 году М айкл Стоунбрейкер (M ichael Stone-
braker) в работе [29] предложил специальную классиф икацию
многопроцессорных архитектур, учитывающую специфику п а ­
раллельных систем баз данных. Однако с момента публикации
этой работы м ногопроцессорны е платф ормы и параллельные
системы баз данных прош ли столь большой эволю ционный путь,
что классиф икация Стоунбрейкера уже не в состоянии отразить
все многообразие современных архитектур параллельных систем
баз данных.
В этой главе м ы рассм отрим структурно-ф ункциональную
к л асси ф и кац и ю и ви ртуально-иерархическую к л асси ф и к а-
34 Глава 2. Классификация параллельных архитектур

цию , являю щ ую ся развитием и обобщ ением классиф икации


Стоунбрейкера. К ак м ы увидим в дальнейш ем , виртуально­
иерархическая классиф икация может служить надеж ной осно­
вой для анализа архитектур современны х параллельных систем
баз данных.

§ 2.1. Структурно-функциональная
классификация
В основе структурно-функциональной классиф икации лежат
структурные различия в компоновке различных функциональных
элементов, основны ми из которых являю тся процессоры и опе­
ративная память. В соответствии с данны м подходом, выделяют
следующие четыре класса мультипроцессорных систем:
(1) SM P (Symmetric M ultiprocessor) —симметричные мульти­
процессорны е системы;
(2) NUMA (N on-U niform M emory Architecture) —мультипро­
цессорны е системы с неоднородным доступом к памяти;
(3) MPP (Massively Parallel Processing) —массово-параллельные
системы;
(4) Кластеры —наборы полноценных компьютеров, объеди­
ненны х в единую вычислительную систему.
SMP-архитектуры представляют собой многопроцессорные
системы , в которых все процессоры соединены посредством
ш ины или коммутатора типа crossbar с общей оперативной п а­
мятью. В таких системах время обращ ения к физически единой
общей памяти одинаково для всех процессоров. Поэтому SM P-
системы относят к классу UMA (Uniform Memory Architecture).
Узким местом ранних SM P-систем являлась общая ш ина доступа
к оперативной памяти, унаследованная им и от мини-ЭВМ . В силу
этого количество процессоров в них редко превыш ало 32. Во
второй половине 90-х годов прошлого века в SM P системах шину
заменили системным коммутатором. С его помощью оказалось
Глава 2. Классификация параллельных архитектур 35

возможно повысить число процессоров сначала до нескольких


десятков, а потом и до сотен. Вместе с тем, следует отметить, что
SM P-системы имеют относительно высокую стоимость.
NUM A-архитектуры характеризую тся н ал и чи ем ф и зи ч е ­
ски распределенной оперативной памяти, разделяемой всеми
процессорны ми модулями в качестве единого адресного п ро­
странства. П ри этом отдельный процессорны й модуль может
представлять собой SM P-систему с общей ш иной. П роцессор­
ны е модули N U M A -систем соединяю тся сетью. П ри этом для
обеспечения унифицированного доступа к разделяемой памяти и
синхронизации изм енений в кэш -пам яти процессоров в каждом
процессорном модуле используется специальное устройство Dir.
Системы с N U M A -архитектурой могут включать в себя десятки
процессорных модулей с общим числом процессоров более ты ся­
чи. Однако неоднородность доступа к разделяемой оперативной
пам яти ведет к тому, что при выборке данных из пам яти чужого
модуля мы будем наблюдать замедление от 200% до 750% в раз­
личных N U M A -системах, и эта циф ра будет расти с увеличением
числа процессорных модулей. Следует заметить, что разница во
времени доступа к локальной и удаленной кэш -пам яти в раз­
личных N U M A -системах составляет 400—1500%. Поэтому п ро­
изводительность N U M A -систем может сущ ественным образом
снижаться н а приложениях, требующих частой синхронизации
данных. П ри этом N U M A -системы характеризуются достаточно
вы сокой стоимостью. В настоящ ее время N U M A -системы прак­
тически исчезли с рынка.
MPP-архитектуры строятся как совокупность большого числа
однородных процессорны х модулей, соединенны х специаль­
ной вы сокоскоростной сетью. П ри этом каждый модуль имеет
собственную оперативную пам ять и, возможно, собственные
диски. Подобные системы могут включать в себя ты сячи п ро­
цессорных устройств. Ключевой проблемой при использовании
M P P -систем является такое распределение данных между п ро­
цессорны ми модулями, которое позволило бы разделить задачу
36 Глава 2. Классификация параллельных архитектур

н а подзадачи (по одной на каждый модуль), свести к минимуму


обмены между различны ми подзадачами и обеспечить сбалан­
сированную загрузку всех процессорны х модулей. Во многих
случаях это является в вы сш ей степени нетривиальной задачей.
Следует отметить, что современные тенденции в развитии аппа­
ратного обеспечения привели к фактическому слиянию M PP- и
кластерных архитектур.
Кластер —это связанный сетью набор полноценных компьюте­
ров, используемый в качестве единого вычислительного ресурса.
В общем случае кластерная система может включать в себя д ис­
ковые массивы и другие специализированные устройства. В каче­
стве узлов кластера могут использоваться как однопроцессорные
системы, так и системы с архитектурой SM P на общей шине.
Кластеры сочетают в себе экономичность и высокую вы числи­
тельную мощ ность и претендуют н а доминирую щ ее положение
в области высокопроизводительных вычислений. Тем не менее,
следует заметить, что для кластеров характерны те ж е общие
проблемы с распределением данных и балансировкой загрузки,
что и для M P P -систем. Единственным сущ ественным отличием
кластерных систем от M PP является то, что они собираю тся из
компонент, массово производимых и поставляемых на ры нок
различны ми ком паниям и, в то время как M P P -системы могут
иметь соединительную сеть и другие аппаратные компоненты,
разработанные специально для конкретной серии супер-ЭВМ ,
и отдельно н а ры нок не поставляю щиеся.
Деление многопроцессорных систем на описанные классы по
структурно-ф ункциональным признакам является достаточно
условным в том смысле, что реальные многопроцессорные систе­
мы могут совмещать в себе черты, присущие различным классам.
К ром е этого, в структурно-ф ункциональной классиф икации
уделяется мало вн им ания аспектам, связанны м с хранением
и обработкой больш их баз данны х, хранящ ихся во внеш ней
памяти. П оэтому эта классиф икация редко прим еняется для
параллельных систем баз данных.
Глава 2. Классификация параллельных архитектур 37

§ 2.2. Виртуально-иерархическая
классификация

Одноуровневые архитектуры
Одноуровневые архитектуры параллельных систем баз данных
были классиф ицированы М айклом Стоунбрейкером (M ichael
Stonebraker) в работе [29]. В основе классиф икации Стоунбрей-
кера лежат различия в способе разделений процессорами аппа­
ратных ресурсов —оперативной памяти и дисков. В соответствии
с классификацией Стоунбрейкера, одноуровневые параллельные
системы баз данных могут быть разделены н а следующие три
базовых класса:
(1) SE (Shared-Everything) —архитектура с разделяемыми п а ­
мятью и дисками;
(2) SD (Shared-Disks) — архитектура с разделяемыми диска­
ми;
(2) S N (Shared-Nothing) — архитектура без совместного и с ­
пользования ресурсов.
SE-архитектура (в работе [29] эта архитектура обозначается
как Shared-Memory) представляет системы баз данных, в кото­
рых все диски напрямую соединены со всеми процессорами, и
все процессоры разделяю т общую оперативную память [рис. 12
(а)]. М ежпроцессорные ком муникации в SE-системах осущест­
вляю тся через общую оперативную память. Доступ к дискам в
SE-системах обычно осуществляется через общий буферный пул.
П ри этом следует отметить, что каждый процессор в SE-системе
имеет собственную кэш -пам ять.
Существует больш ое количество параллельны х систем баз
данных с SE-архитектурой. По существу все ведущие ком мерче­
ские СУБД сегодня имею т реализацию н а базе SE-архитектуры.
В качестве одного из первых прим еров портирования с одно­
п роц ессорн ой систем ы н а SE-архитектуру м ож но привести
реализацию DB2 н а IBM3090 с 6 процессорам и. Другим при-
38 Глава 2. Классификация параллельных архитектур

м ером является параллельное построение индексов в Informix


OnLine 6.0. Следует отметить, однако, что подавляю щ ее боль­
ш и н ство ком м ерч ески х SE-си стем использует только м еж ­
транзакционны й параллелизм (то есть внутритранзакционны й
параллелизм в них отсутствует).
Базовой аппаратной платф орм ой для реализации систем с
SE-архитектурой обычно служит SMP, хотя потенциально SE-
системы мож но строить н а платф ормах с архитектурой N U M A
и даже M PP с виртуально общей, ф изически распределенной
памятью .
Глава 2. Классификация параллельных архитектур 39

SD-архитектура [рис. 12 (б)] представляет системы баз данных,


в которых любой процессор имеет прямой доступ к любому диску,
однако каждый процессор имеет свою приватную оперативную
память. Процессоры в таких системах соединены посредством
некоторой вы сокоскоростной сети, позволяю щ ей осуществлять
передачу данных. Примерами параллельных систем баз данных с
SD-архитектурой являю тся IBM IM S, Oracle Parallel Server, IBM
Parallel Sysplex и др.
SN -архитектура [рис. 12 (в)] характеризуется наличием у каж ­
дого процессора собственной оперативной пам яти и собствен­
ного диска. К ак и в SD системах, процессорны е узлы соединены
некоторой высокоскоростной сетью, позволяю щ ей организовы­
вать обмен сообщ ениям и между процессорами. К настоящему
моменту создано большое количество исследовательских п ро­
тотипов и несколько коммерческих систем с SN-архитектурой,
использующих фрагментный параллелизм. В качестве примеров
исследовательских прототипов SN-систем можно привести с и ­
стемы BUBBA и GAMMA. Примерами коммерческих систем с
SN-архитектурой являю тся N onStop SQL, Informix PD Q, N C R /
Teradata DBC/1012, IBM DB2 PE и др.

Многоуровневые (иерархические) архитектуры


Классификация Стоунбрейкера долгое время оставалась основ­
ной и фактически единственной классификацией, используемой
для анализа различных архитектур параллельных систем баз дан­
ных. Однако в конце 90-х годов прошлого века эта классиф ика­
ция стала подвергаться критике как устаревшая и неадекватная.
В основе этой критики лежат следующие два фактора, ставящие
под вопрос актуальность классификации Стоунбрейкера:
(1) классиф икация Стоунбрейкера уже не охватывает всего
многообразия существующих архитектур;
(2) разделение аппаратных ресурсов представляет собой пло­
хой базис для классиф икации архитектур современных
параллельных систем баз данных.
40 Глава 2. Классификация параллельных архитектур

Первый фактор основан н а появлении многопроцессорных


систем, совмещающих в себе черты как SE- так и SW-архитектур.
Д ля описания подобных систем Копеланд (Copeland) и Келлер
(Keller) предлож или в работе [21] расширение классификации
Стоунбрейкера путем введения двух дополнительны х классов
архитектур параллельных м аш ин баз данных:
— CE (Clustered-Everything) — архитектура с SE-кластерами,
объединенными по принципу S N [рис. 12 (г)];
— CD (Clustered-D isk) — ар х и тек ту р а с SD -к л а с т е р а м и ,
объединенны м и по принципу S N [рис. 12 (д)]. Границы
SD-кл астеров расп р о стр ан ен ы н а общ ую (глобальную)
соединительную сеть, так как в них может присутствовать
собственная (локальная) соединительная сеть.
Эти архитектуры также получили название двухуровневых ие­
рархических архитектур . Наряду с архитектурами CE и CD мы
можем рассматривать также иерархическую архитектуру, которую
м ы обозначим как CW.
CN (Clustered-Nothing) архитектура —это двухуровневая иерар­
хическая архитектура, получаемая объединением SN-кластеров
с помощ ью глобальной соединительной сети N G [рис. 12 (е)].
П ри этом каж дый SN-кластер им еет собственную локальную
соединительную сеть NL. На первый взгляд может показаться, что
CN-архитектура тождественна SN-архитектуре. Однако в общем
случае это не так. Л окальная соединительная сеть NLможет обе­
спечить значительно более эффективную передачу сообщ ений
внутри SN-кластера по сравнению с глобальной сетью N e. В этом
случае CN-архитектура будет занимать промежуточное полож е­
ние между CE и SN-архитектурами.
К лассиф икационны й подход Копеланда и Келлера легко м о­
жет быть распространен на архитектуры с тремя и более уровнями
иерархии. В качестве прим ера можно привести трехуровневую
иерархическую архитектуру CD2 (Clustered-Disk with 2-processor
modules) [рис. 12 (ж)].
Глава 2. Классификация параллельных архитектур 41

Архитектура CD2была использована при проектировании про­


тотипа параллельной системы баз данных Омега [12] для отече­
ственного м ногопроцессорного вы числительного ком плекса
М ВС 100/1000 [10]. Подобная архитектура способна обеспечить
высокую отказоустойчивость при общей производительности,
сравнимой с производительностью систем с СР-архитектурой.
CD2-архитектура представляет собой трехуровневую иерархиче­
скую архитектуру. Первый уровень иерархии представлен несим ­
метричными двухпроцессорными модулями с разделяемой пам я­
тью (SM2). Каждый ЛМ2-модуль включает в себя вычислительный
(Р ) и коммуникационны й (Pn) процессоры, взаимодействующие
через разделяемую память (М). Вычислительный процессор и с ­
пользуется для вы полнения всех процессов базы данных. К ом ­
м уникационны й процессор используется главным образом для
организации обменов сообщ ениям и по соединительной сети
(N). Подобный подход поз-воляет освободить вычислительный
процессор от накладных расходов, связанных с организацией
обменов сообщ ениями, которые могут быть очень существен­
ными. Н а втором уровне иерархии ЛМ2-модули объединяются
в ЛР2-кластеры. Каждый ЛР2-кластер вклю чает в себя столько
же дисков, сколько в нем £М2-модулей. Н а физическом уровне
каж дый процессорны й модуль им еет доступ к лю бому диску
по общей ш ине. Пропускная способность данной ш ины огра­
ничивает масштабируемость ЛР2-кластера. Н а третьем уровне
иерархии Л ^-кл астер ы объединяются в единую CD2-систему по
принципу SN. Для объединения используется некоторая вы соко­
скоростная соединительная сеть N .

Гибридные архитектуры
В основу классиф икации Стоунбрейкера был положен способ
разделения процессорами аппаратных ресурсов. Этот критерий
представляет собой плохой базис для классиф икации архитек­
тур современных параллельных систем баз данных. Это связа­
но с тем, что современны е м ногопроцессорны е системы, как
42 Глава 2. Классификация параллельных архитектур

Рис. 13. Традиционный подход к клас­


Архитектура параллельной
сификации архитектур параллельных
системы баз данных
систем баз данных

Архитектура
правило, имею т сложную структуру
мкогом роцессорн ^'й системы
аппаратных ком понент и совмещают
в себе свойства различных классов архитектур. П римерами п о ­
добны х систем являю тся отечественные м ногопроцессорны е
системы серии М ВС -100/1000, м ногопроцессорны е системы
SP2 ком пании IBM , компью теры н а базе технологии ServerNet
корпорации Tandem и др. Классификация Стоунбрейкера оказы­
вается неадекватной применительно к параллельным системам
баз данных, реализуемых н а подобных платформах. Это п р о ­
исходит потому, что в соответствии с классическим подходом
Стоунбрейкера, мы пытаемся отобразить архитектуры парал­
лельной системы баз данных непосредственно н а аппаратную
архитектуру м ногопроцессорной системы, как это оказано на
рис. 13. Указанную классификационную проблему можно решить
путем введения некоторого дополнительного уровня абстракции,
базирующегося н а понятии виртуальной параллельной м аш ины
баз данных. Архитектура параллельной системы баз данных ото­
бражается н а архитектуру виртуальной параллельной маш ины
баз данных, которая в свою очередь
отображается на ту или иную аппарат­
ную архитектуру многопроцессорной
системы, как это показано н а рис. 14.
Такой подход называется виртуально­
иерархическим. П ри использовании
ви р ту а л ь н о -и е р а р х и ч е с к о го к л а с ­
сиф икационного подхода критерий

Рис. 14. Виртуально-иерархический


подход
Глава 2. Классификация параллельных архитектур 43

разделения ресурсов по-преж нем у может служить адекватным


базисом для классиф икации архитектур современны х парал­
лельных систем баз данных. П ри этом мы можем рассматривать
целую иерархию виртуальных машин: каждая следующая машина
является платформой для реализации предыдущей. В качестве
прим ера подобных гибридных архитектур мы можем привести
CDN-архитектуру [15]. CDN-архитектура строится как набор
однотипных SD-кластеров, объединенных по принципу SN. От­
личительной особенностью данной системной архитектуры я в ­
ляется то, что н а верхних уровнях системной иерархии SD- клас­
теры рассматриваются как SN-системы. (рис. 15). Это выражается
44 Глава 2. Классификация параллельных архитектур

в том, что каждому процессорному узлу логически назначается


отдельный диск. Такой подход позволяет избежать проблем,
связанны х с реализацией глобальной таблицы блокировок и
поддержкой когерентности кэш ей, характерных для SD- систем,
и одновременно использовать преимущ ества SD- архитектуры
в плане возможности балансировки загрузки. Подобный под­
ход был использован при разработке параллельной системы баз
данных N onStop SQL/M .
Глава 3

Требования к параллельной
системе баз данных

Параллельная система баз данных должна представлять собой


аппаратно-программный комплекс, способный хранить большой
объем данных и обеспечивать эффективную обработку большого
количества параллельных транзакций в режим «24 часа в сутки,
7 дней в неделю». Другими словами, параллельная система баз
данных должна представлять собой систему высокой готовности,
то есть СУБД должна быть готова в любой момент обеспечить
оперативную обработку запроса пользователя. В соответствии с
этим, можно сформулировать следующие основные требования к
параллельной системе баз данных:
—вы сокая масштабируемость;
—вы сокая производительность;
—вы сокая доступность данных.
В этой главе мы подробно рассмотрим перечисленные требо­
вания и проведем сравнительный анализ различных архитектур
параллельных систем баз данных в контексте этих требований.

§ 3.1. Масштабируемость
Важным свойством параллельных систем является возм ож ­
ность их поэтапного наращ ивания в целях адаптации к увели­
чивающемуся размеру базы данных или возрастаю щ им требова­
ниям производительности. Это достигается путем добавления в
конфигурацию системы дополнительных процессоров, модулей
памяти дисков и других аппаратных компонент. Д анны й п ро­
цесс назы вается масштабированием системы . П ри удвоении
аппаратной мощ ности системы мы можем ожидать, что ее п ро­
46 Глава 3. Требования к параллельной системе баз данных

изводительность такж е возрастет вдвое, однако н а практике


реальное приращ ение производительности часто оказывается
существенно ниже. Например, масштабируемость SMP-систем
с общей ш иной ограничена 20—30 процессорами. П ри дальней­
ш ем наращ ивании SMP-системы производительность возрастает
очень слабо или даже начинает происходить ее падение. Это
связано с тем, что процессоры начинаю т все более простаивать
в ожидании доступа к разделяемым ресурсам. В соответствии с
этим, масштабируемость лю бой м ногопроцессорной системы
определяется эффективностью распараллеливания. Существуют
две основны е качественны е характеристики эф ф ективности
распараллеливания: ускорение и расширяемость. Дадим ф орма­
лизованное определение указанных понятий.
Пусть A — множество многопроцессорных конф игураций в
рамках некоторой ф иксированной архитектуры, A, B е A —две
различны е конф игурации параллельной виртуальной м аш ины
баз данны х c ф и ксированной архитектурой, различаю щ иеся
количеством виртуальных процессоров и ассоциированны х с
ним и виртуальных устройств (мы подразумеваем, что все конф и­
гурации предполагают пропорциональное наращивание модулей
пам яти и дисков). Пусть задан некоторы й тест Q. Обозначим
dA — степень параллелизма (количество процессоров) к о н ф и ­
гурации A; dB — степень параллелизма конф игурации B; tQA —
время, затраченное конф игурацией A на вы полнение теста Q;
tQB—время, затраченное конф игурацией B н а вы полнение теста
Q. Ускорение aAB, получаемое при переходе от конф игурации A к
конф игурации B , определяется следующей формулой

t QA
a AB
t QB

Говорят, что системная архитектура A демонстрирует линейное


ускорение, если существует константа k > 0 такая, что aAB= kdB/d A
для любых конфигураций A, B е A.
Глава 3. Требования к параллельной системе баз данных 47

Пусть теперь задан набор тестов Q,, Q2, ..., количественно


превосходящ их н ек о то р ы й ф и кс и р о в а н н ы й тест Q в i раз,
где i — ном ер соответствующего теста. Пусть заданы к о н ф и ­
гурации виртуальной параллельной м аш ины баз данны х А,,
A ... ! A, превосходящ ие по степени параллелизма некоторую
м инимальную конф игурацию А в j раз, где j — ном ер соответ­
ствующей конф игурации. Тогда расширяемость гкт, получаемая
п ри переходе от конф игурации Ак к конф игурации Ат (к < т ) ,
задается формулой

l QkAk .
e km
t QmAm

Говорят, что системная архитектура A демонстрирует линейную


расширяемость, если расширяемость остается равной единице для
всех конф игураций данной системной архитектуры A.
Ускорение позволяет определить эффективность наращивания
системы н а сопоставимых задачах. Расш иряемость позволяет
изм ерить эф ф ективность наращ ивания системы н а больших
задачах.
Говорят, что параллельная система хорошо масштабируема,
если она демонстрирует ускорение и расш иряем ость, близкие
к линейны м . О сновны м ф актором, препятствую щ им хорош ей
м асш табируем ости си стем ы , явл яю тся пом ехи, в о зн и к а ю ­
щ ие п ри конкурентном доступе процессоров к разделяемы м
ресурсам. Связь между архитектурой параллельной системы
и ее масштабируемостью будет более детально рассм отрена в
параграф е 3.4.

§ 3.2. Производительность
Среди характеристик СУБД, которые необходимо учитывать
при выборе инструментальной системы для реализации к о н ­
48 Глава 3. Требования к параллельной системе баз данных

кретного прилож ения н а конкретной программно-аппаратной


платформе, важнейшее значение имеют характеристики произво­
дительности системы при обработке пользовательских транзак­
ций. В общем случае измерение производительности систем баз
данных является нетривиальной задачей, для реш ения которой
существует несколько подходов [3]. Однако в любом случае, так
как эти измерения используются не столько сами по себе, сколь­
ко для сравнительного анализа производительности различных
систем, большая часть подходов базируется на создании специ­
альных эталонных тестов для различных классов прилож ений
систем баз данных.
В соответстии с вы ш есказанны м , п онятие производитель­
ности системы можно определить следующим образом. Пусть
даны две виртуальные параллельные м аш ины баз данных A и B,
имею щ ие равное количество равномощ ных виртуальных про­
цессоров, модулей памяти и дисков. Пусть имеется некоторы й
тест Q, задающий эталонную базу данных, характер, структуру
и последовательность вы полнения транзакций, а также ф унк­
цию оценки эфф ективности f, выдающую некоторое числовое
значение по результатам тестирования. М ы будем говорить, что
маш ина A демонстрирует более высокую производительность
по сравнению с м аш иной B н а тесте Q, если f(A Q) > f(B Q). Здесь
AQ обозначает результаты вы полнения теста Q на м аш ине A , BQ
обозначает результаты вы полнения теста Q на м аш ине B .
Д ости ж ен и е вы со ко й п рои звод и тел ьн ости паралл ел ьн ой
системы баз данных обусловлено целым рядом факторов, среди
которых можно выделить следующие:
—поддержка фрагментного параллелизма;
—межпроцессорные коммуникации;
—когерентность кэш ей;
—организация блокировок;
—балансировка загрузки.
Рассмотрим перечисленные факторы более подробно.
Глава 3. Требования к параллельной системе баз данных 49

Поддержка фрагментного параллелизма


М ногочисленные исследования показали, что использование
фрагментного параллелизма способно качественны м образом
повысить эффективность вы полнения реляционных операций.
В соответстии с этим, для достижения вы сокой производитель­
ности параллельная система баз данных должна наряду с меж­
транзакционны м параллелизм ом использовать ф рагм ентны й
параллелизм. Более детально вопросы, связанные с фрагмента­
цией базы данных и организацией фрагментного параллелизма,
будут рассмотрены в главе 5. В этой главе везде ниж е мы будем
предполагать использование фрагментного параллелизма обя­
зательным.

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

Когерентность кэшей
С овременны е м ногопроцессорны е м ногоядерны е системы
имею т в своем составе сверхбыструю кэш -пам ять нескольких
уровней. Для случая систем баз данных в качестве кэш а началь­
ного уровня фигурирует оперативная память, используемая для
буферизации дисковых страниц. В системах баз данных страница
является м иним альной порцией инф орм ации, вовлекаем ой в
единичный обмен с дисками. Это означает, что когда нам н е ­
обходимо считать из базы данных кортеж, мы должны считать с
диска всю страницу, содержащую этот кортеж. П ри этом считан­
50 Глава 3. Требования к параллельной системе баз данных

ная страница помещ ается в специальную область оперативной


памяти, называемую буферным пулом или просто буфером. После
использования образ дисковой страницы некоторое время оста­
ется в буферном пуле. Если в течение этого времени произойдет
повторное обращ ение к данной странице, мы можем использо­
вать образ страницы, хранящ ийся в буферном пуле, вместо того,
чтобы заново считывать страницу с диска. Таким образом, если
нам удастся удерживать в буферном пуле те страницы диска,
обращ ения к которым повторяются наиболее часто, мы можем
в сотни и даже в ты сячи раз увеличить быстродействие системы
баз данных. Однако в случае многопроцессорных систем исполь­
зование буферного пула может привести к известной проблеме
когерентности кэш ей. Суть этой проблемы заключается в том,
что если два процессора используют индивидуальные буферные
пулы для кэш ирования страниц общих дисков, система должна
обеспечивать когерентность (согласованность) данных в обоих
буферных пулах. Это достигается путем использования специаль­
ного протокола чтения/записи данных кэш ированны х страниц:
если процесс базы данных н а узле i хочет прочитать или модиф и­
цировать кортеж, хранящийся внутри кэш ированной страницы p,
система должна провеить, образы страницы р во всех буферных
пулах; если н а узле j будет найден образ страницы р, имею щ ий
более позднее время м одиф икации, то этот образ должен быть
скопирован в буферный пул узла i. Таким образом, поддержа­
ние когерентности кэш ей может потребовать дополнительных
накладных расходов и отрицательно повлиять н а общую произ­
водительность системы. Более детально вопросы, связанные с
буферизацией дисковых страниц будут рассмотрены в главе 8.

Организация блокировок
Основной единицей работ в системах баз данны х являю тся
A C ID -транзакции [4]. Особенно важным является свойство con­
sistency, предполагающее, что база данных до и после выполнения
транзакции находится в согласованном состоянии. П ри парал­
Глава 3. Требования к параллельной системе баз данных 51

лельном вы полнении смеси транзакций для сохранения свой­


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

Балансировка загрузки
Б а л а н с и р о в к а загр у зк и п р о ц е с со р о в я в л я е тс я о д н о й из
ключевых проблем для обеспечения вы сокой эф ф ективности
параллельной обработки запросов. СУБД долж на разбивать
запрос н а п араллельны е агенты и распределять их по п р о ­
цессорам таким образом, чтобы обеспечивалась равном ерная
загрузка всех задействованных процессоров. О собенно остро
вопрос с балансировкой загрузки возникает при использовании
фрагментного параллелизма. Ф актором, которы й может сущ е­
ственны м образом снизить эф ф ективность распараллеливания
реляционны х операций, особенно соединения и сортировки,
является величина перекоса, присутствую щ ая в данных, п од ­
лежащ их обработке. И сследования показали, что в реальных
базах данны х некоторы е значения для определенного атрибута
встречаю тся значительно чащ е, чем остальные. В частности,
для текстовых атрибутов характерно распределение значений
по закону Зи п ф а [4]. П одобная неоднородность назы вается
перекосом данных. Л акш м и (Lakshmi) и Ю (Yu) показали [23],
что п ри наличии перекоса данны х ускорение, достигаемое при
параллельны м вы полнении операций соединения, может быть
ограничено катастроф ическим образом по причине перегрузки
одних процессоров и недогрузки других. Более подробно п р о ­
блема б алансировки загрузки в условиях н ал и чи я п ерекоса
данны х будет нам и рассм отрена в главе 7.
52 Глава 3. Требования к параллельной системе баз данных

§ 3.3. Доступность данных


К ак уже указывалось выше, одной из критических характе­
ристик параллельных систем баз данных вы сокой готовности
является способность систем ы обеспечить высокую степень
доступности данных в условиях отказа некоторых аппаратных
компонент. Вероятность отказа аппаратуры в однопроцессорной
системе не велика. Однако в системе с ты сячами процессорных
узлов д ан н ая вероятность возрастает в ты сячи раз. П оэтому
проблема обеспечения вы сокой доступности данных в м ного­
процессорных системах имеет большое значение.
Коэффициент доступности базы данных нестрого может быть
определен как отношение межу промежутком времени, в течение
которого база данных была действительно доступна пользовате­
лям, и промежутком времени, в течение которого пользователи
требовали доступ к базе данных. Например, если пользовате­
ли требовали доступ к базе данных в течение 8 часов в день, а
реально база данных была доступна только в течение 6 часов,
то коэф ф ициент доступности составляет 6/8 = 0,75 в течение
8-часового периода. Систему баз данных с высокой доступностью
данных можно определить как систему, обеспечивающую прием
запросов пользователей 24 часа в сутки с коэф ф ициентом до­
ступности неменее 0,99.
Аппаратная отказоустойчивость является основным фактором
обеспечения высокой доступности данных в параллельных систе­
мах баз данных с большим количеством процессорных узлов. Под
аппаратной отказоустойчивостью поним аю т сохранение общей
работоспособности системы при одиночном отказе массовых ап­
паратных компонет, таких, как процессор, модуль памяти, диск,
и каналов доступа к перечисленным компоентам. ВВ частности,
одиночны й отказ любого устройства не должен привести к п о ­
тере целостности базы данных и тем более к физической утрате
какой-то части базы данных.
Глава 3. Требования к параллельной системе баз данных 53

§ 3.4. Сравнительный анализ архитектур


параллельных систем баз данных
В этом параграф е м ы дадим качественны й сравнительны й
анализ различных архитектур параллельных систем баз данных по
критериям, суммированным таблица 1. Указанные критерии вы ­
текаю т непосредственно из требований к параллельной системе
баз данных вы сокой готовности, сформулированных выше. Для
оценки показателей м ы будем использовать четырехбалльную
систему: 0 — «плохо»; 1 — «удовлетворительно»; 2 — «хорошо»;
3 —«превосходно».
Таблица 1
Сравнение ахитектур

Архитектура
Критерий
SE SD SN CE CD CDN

Масштабируемость 0 1 2 3 3 3
Аппаратная отказоустойчи­ 0 3 2 2 3 3
вость
Баланс загрузки 3 3 0 1 1 1
Межпроцессорные комму­ 3 0 0 2 1 1
никации
Когерентность кэшей 3 0 3 3 2 3
Организация блокировок 2 0 3 2 1 3

Сумма баллов 11 7 10 13 11 14

Масштабируемость является слабым местом Ж -архитектуры.


Это связано с тем, что процессорам приходится конкурировать
между собой за доступ к разделяемым ресурсам — оперативной
памяти и дискам. В соответствии с этим, здесь м ы выставляем
«плохо». 55-архитектура демонстрирует немного лучшую оценку
по масштабируемости, так как каждый процессорны й узел имеет
54 Глава 3. Требования к параллельной системе баз данных

свою приватную память, однако по-преж нему процессоры вы ­


нуждены конкурировать за разделяемые диски. SN-архитектура
имеет лучший показатель по масштабируемости среди одноуров­
невых архитектур. CD-, CE - и CDN-архитектуры демонстрируют
наилучшую масштабируемость за счет того, что наиболее интен­
сивны е ком м уникации сосредотачиваю тся внутри кластеров,
разгружая тем самым межкластерную соединительную сеть.
Аппаратная отказоустойчивость для SE-архитектуры я в ­
ляется еще одним слабым местом. П оскольку все процессоры
разделяю т единое адресное пространство оперативной памяти,
выход из строя любого процессора и ли модуля памяти приво­
дит к отказу всей системы в целом. SD-архитектура по этому
показателю получает наилучшую оценку, так как при выходе
из строя какого-либо процессорного узла нам необходимо про­
сто перезапустить соответствую щ ий п араллельны й агент на
любом исправном узле. Проблема отказа диска в SD-системе
эфф ективно реш ается с помощ ью технологий RAID [4]. Отка­
зоустойчивость SN -архитектуры мы классифицируем как «хо­
рошую». М ы не ставим здесь максимальную оценку потому, что
поддержание когерентности страховочных копий фрагментов в
SN-системе требует определенных накладных расходов, связан­
ных, прежде всего, с пересы лкой большого количества данных
по соединительной сети. И ерархические архитектуры имею т
хорошую отказоустойчивость, так как все проблемы, связанные
с отказом какой-либо массовой аппаратной компоненты, могут
быть реш ены н а уровне кластера. П ри этом CE-архитектура не
получает м аксим альной оценки и з-за н изкой аппаратной от­
казоустойчивости SE-кластера.
Баланс загрузки н аи б о л ее легко д ости гается в SE- и SD-
системах, так как всем процессорам в равной мере доступны
все диски. Д ля SN -архитектуры балансировка загрузки явл я­
ется серьезной проблемой, так как она так и ли иначе связана
с пересы лкой данных по соединительной сети. Иерархические
архитектуры типа CE, CD и CDN позволяю т достичь удовлетво­
Глава 3. Требования к параллельной системе баз данных 55

рительной сбалансированности загрузки, так как баланс загрузки


может здесь вы полняться н а двух уровнях — межкластерном и
внутрикластерном.
Высокая стоимость межпроцессорных коммуникаций является
одной из слабых сторон SN- и SD-архитектур. И спользование
CE-архитектуры позволяет значительно сократить накладны е
расходы, связанны е с м еж процессорны м и ком м уникациям и.
М ежпроцессорные ком муникации н а уровне SE-кластера м о­
гут быть реализованы очень эф ф ективно через разделяемую
память. CD- и CDN-архитектуры уступают по этому показателю
CE-архитектуре, однако могут превзойти SN-архитектуру так
как потенциально внутрикластерные коммуникации могут быть
реализованы более эфф ективно, чем межкластерные.
SE-архитектура предполагает использование общего буферно­
го пула для всех процессоров, поэтому проблема когерентности
кэшей здесь отсутствует. Однако когерентность кэш ей является
серьезной проблем ой для SD-архитектуры, так как одни и те
же страницы общих дисков буферизуются в индивидуальных
модулях памяти. К опии страниц остаются в буферных пулах
некоторое время после заверш ения обративш ейся к ним тран­
закции, поэтом у изм енения, сделанные одним процессором ,
могут быть аннулированы изм енениям и, сделанными другим
процессором. CD-архитектура в определенной мере наследует
проблемы с когерентностью кэш ей от SD-архитектуры. Отметим,
что CDN-архитектура свободна от указанного недостатка, так как
на логическом уровне в ней отсутствует разделение ресурсов.
CE-архитектура по аналогии с SE- не им еет никаких проблем с
когерентностью кэш ей. В SN-системах проблема когерентности
также отсутствует, так как у них нет разделяемых ресурсов.
Организацией блокировок в SE-системах связана с ф орм иро­
ванием и поддержанием глобальной таблицы блокировок, что,
однако, может быть достаточно эффективно реализовано в общей
оперативной памяти. SD-системы не имею т общей оперативной
памяти, и поддержание глобальной таблицы блокировок требует
56 Глава 3. Требования к параллельной системе баз данных

в них значительных накладных расходов, связанных с пересы л­


кам и данных по соединительной сети. CD-архитектура в значи­
тельной степени наследует этот недостаток. CD-архитектура в
значительной мере избавлена от этой проблемы, так как глобаль­
ная таблица блокировок Ж -кластера хранится в единственном
экземпляре в разделяемой оперативной памяти. В Ж -си стем ах
нет необходимости в поддерж ании глобальной таблицы бло­
кировок по причине отсутствия разделения ресурсов, поэтому
Ж -архитектура занимает наилучшую позицию по данному п а ­
раметру. CDN-архитектура в полной мере наследует это качество
от Ж -архитектуры .
Проведенный анализ показывает, что Ж -архитектура в чистом
виде не им еет никаких перспектив н а использование в совре­
менных параллельных системах баз данных. Ж -архитектура по-
прежнему остается привлекательной. В Ж -архитектуре в общей
памяти работает только одно системное ядро, что обеспечивает
максимальную простоту и эффективность реализации. Однако
преодоление проблем с масш табированием и отказоустойчиво­
стью выливается в значительное увеличение стоимости подобных
систем. И ерархические двухуровневые архитектуры выглядят
более п ривлекательны м и по сравнению с одноуровневы ми,
причем гибридная архитектура CDN представляется наиболее
перспективной.
Часть 2

Технологии
параллельных систем
баз данных
Глава 4

Выполнение запросов

§ 4.1. Итераторы
Выполнение физического плана заключается в согласованном
вы полнении нескольких операций физической алгебры, состав­
ляющ их этот план. П ри этом мы должны определить: 1) способ
передачи кортеж ей от одной операции к другой; 2) механизм
синхронизации операций. Наиболее просты м реш ением этих
проблем в СУБД является механизм итераторов [4]. Итератор
(iterator), предусматривает использование группы из трех мето­
дов, которые позволяю т потребителю результата работы опера­
ции физической алгебры получать по одному кортежу в каждый
момент времени.
1. Метод open инициализирует структуры данных, необходи­
мые для вы полнения операции, и вызывает ф ункции open
соответствующих аргументов данной операции.
2. Метод next возвращ ает очередной кортеж, модифицирует
значения во внутренних структурах данных, обеспечивая
возможность получения последующих кортежей, и обычно
один или несколько раз вызывает методы next аргументов
операции. Если множество кортежей исчерпано, next воз­
вращ ает специальны й кортеж EOF, который, как предпо­
лагается, нельзя спутать с обычным кортежем.
3. М етод close заверш ает итеративны й процесс получения
д ан н ы х , о сво б о ж д ает п а м я т ь , зан ятую с тр у кту р ам и
данных, использованны м и для вы полнени я операции,
и обычно вы зывает методы close аргументов данной опе­
рации.
60 Глава 4. Выполнение запросов

П ри использовании итераторов в каж ды й м омент врем ени


в активном состоянии пребывает сразу несколько операций.
П о м ере необходим ости операции обм ениваю тся данны м и,
что сокращ ает потребность в обращ ениях к диску. Схематично
п роцесс вы п о л н ен и я запроса с исп ол ьзован и ем м еханизм а
итераторов изображ ен н а рис. 16. Н а первом ш аге вы зывается
метод open для корневого узла, которы й вы зывает метод open
для левого и правого сына. Те, в свою очередь, вы зываю т м е­
тод open для дочерних узлов, и так далее, пока н е произойдет
инициализация всех итераторов в дереве плана. Затем в цикле
while происходит вызов метода next для корневого узла, который
каж ды й раз возвращ ает очередной кортеж результирую щего
отнош ения для вы вода н а печать. П ри вы числении очередного
кортеж а метод next корневого узла вы зы вает методы next для
своих сыновей, которые, в свою очередь, активизирую т методы
next для своих потом ков. Ц икл заверш ается, когда метод next
корневого узла возвращ ает специальны й кортеж EOF (End O f
Глава 4. Выполнение запросов 61

Fragment), которы й говорит, что результирую щ ее отнош ение


полностью построено. П осле выхода из ц и кл а вы полняется
метод close для корневого узла, которы й инициирует вы полне­
ние методов close для потомков. П рим еры использования и те­
раторов для реализации операций ф изической алгебры можно
найти в учебнике [4].
И тер ато р н ая схем а хорош о зар ек о м ен д о вал а себя в п о ­
следовательных (не параллельных) СУБД. Однако в условиях
многопроцессорного и многоядерного окружения классическая
итераторная схема оказывается неэффективной в силу блокирую­
щего характера процедурных вызовов, которые она использует.
Например, мы не можем запустить метод next для правого сына,
пока не завершен вызов next для левого.

§ 4.2. Синхронный конвейер

М еханизм синхронного конвейера позволяет реализовать вер­


тикальный (конвейерный) межоперационный параллелизм. Для
реализации синхронного конвейера с каждым узлом-операцией
в дереве физического плана связываются следующие атрибуты
и методы.
(1) Атрибут leftSon содержит указатель на левого сы на теку­
щего узла, если имеется, и пустую ссылку NULL в против­
ном случае. В случае унарной операции ее единственный
аргумент всегда представлен левым сыном.
(2) Атрибут rightSon содерж ит указатель н а правого сы на
текущего узла, если имеется, и пустую ссылку NULL в
противном случае.
(3) Атрибут quit — логический индикатор, показы ваю щ ий,
что вы полнение запроса заверш ено (значение по ум ол­
чанию —false).
(4) Атрибут buf—выходной буфер узла, в который помещается
произведенный кортеж.
62 Глава 4. Выполнение запросов

(5) Атрибут bufIsEmpty —логический индикатор, показы ваю ­


щ ий, что выходной буфер узла пуст (значение по умолча­
нию —true).
(6) Метод initинициализирует внутренние структуры данных,
необходимые для работы конвейера, и присваивает атри­
бутам значения по умолчанию (если определено).
(7) Метод produce вычисляет очередной кортеж, помещает его
в буфер buf и устанавливает значение атрибута bufIsEmpty
равны м false.
(8) Метод restartпроизводит перезапуск конвейера: при после­
дующих вызовах метода produce кортежи результирующего
отношения будут выдаваться, начиная с первого. П ри этом
метод restart не меняет значения видимых атрибутов своего
узла.
(9) Метод release завершает работу конвейера и освобождает
память, занятую структурами данных, использованными
для вы полнения операции.
В отличие от итераторной модели, где инициатором вы числе­
ния кортежа в дочернем узле дерева физического плана всегда
является родительский узел (именно он инициирует метод next
применительно к дочернему узлу), в конвейерной модели каждый
узел пытается произвести кортеж самостоятельно (без внеш них
вызовов). Это достигается тем, что каждому узлу в дереве ф изи­
ческого плана сопоставляется нить (легковесный процесс) [18].
М ножество нитей, реализующих запрос, логически связывается
в древовидную структуру, повторяющую структуру физического
плана. Родительский узел играет роль потребителя кортежей, а
дочерние узлы —роли поставщ иков кортежей. Взаимодействие
меж ду п о ставщ и к о м и потреб и телем осущ ествляется через
вы ходной буфер поставщ ика, который является разделяемым
ресурсом. Доступ к буферу регулируется атрибутом bufIsEmpty,
играющ им роль двоичного семафора: поставщ ик не может п о ­
местить новы й кортеж в буфер, пока значение этого атрибута
равно false ; потребитель не может считать кортеж из буфера, пока
Глава 4. Выполнение запросов 63

void root_thredd(rOOtH
v o i d s e t _ q u i t _ f o r _ c h i Ldren (node) {
i f ( r o d e .le f t S o n ! - N ULL)(
n o d e .le f t S o n .q u it = true;
set. q u it f o r c h i Ldren (node . le ftS o n )

i f (n o d e .rig h tS o n ! NQLLM
n o d e .riq h tS o rt.q u it = tru e ;
s e t q u it_ fp r _ c b ild r e n ( n o d e - rig h tS o n )
};
If
r o o t.in tt 0 i
r o o t.p r o d u c e (>;
w h ile ( r o o t.b n f ! ЕОГИ
p r in t( r o o t.b u f) ;
ro o t.p ro d u c e { ) ;
I;
s e t _ e jf it _ f a r _ c h ild r e n ( r o o t ) ;
r o o t . r e le a s e ( J ;

Рис. 17. Схема нити для корневого узла дерева физиче­


ского плана

значение этого атрибута равно true. Соответственно: присваивать


значение true атрибуту buflsEmpty может только потребитель, а
значение false —только поставщик. Конвейер, поддерживающий
такую дисциплину, называется синхронным.
Каждый участник конвейера играет роль потребителя по от­
нош ению к дочерним узлам и роль поставщ ика по отношению
к роительскому узлу, и работает параллельно с другими узлами.
Исклю чение составляют корневой узел, который не имеет р о ­
дительского, и листья, которые не имею т дочерних.
К о р н ев о м у узлу со п о с та в л я е тс я н и ть root_thread, схем а
реализации которой приведена н а рис. 17. В теле нити присут­
ствует определение рекурсивной ф ункции setq u itjo rch ild ren ,
устанавливающей для всех узлов-потомков значение атрибута
quit равны м true. Процедурная часть тела нити root thread начи-
64 Глава 4. Выполнение запросов

Рис. 18. Схема нити для вну­


v o id in n e r_ th re a d (n o d e ){
треннего узла дерева физи­
node.init (); ческого плана
w h ile ( ! n o d e .q u it)I
if(node.buflsEmpty){
node.produce(); нается с вы полнения м е­
if(node.buf == EOF) тода init п р и м ен и тел ьн о
n o d e . r e s t a r t (> ;
к к о р н ево м у узлу. Затем
};
Si вызывается метод produce,
n o d e .r e l e a s e ( ) ; в ы числяю щ ий первы й
кортеж результирую щ его
отношения. Далее в цикле,
пока в выходном буфере не будет обнаружен специальны й к о р ­
теж EOF, выполняю тся следующие действия: вывод н а печать
текущего кортежа из выходного буфера buf; присвоение атрибуту
buflsEmpty значение «истина»; вызов метода produce, вы числяю ­
щего следующий кортеж. После того, как в выходном буфере
будет обнаружен кортеж EOF, выполняется рекурсивная функция
set_quit_for_children, которая у всех узлов-потомков устанавливает
значение атрибута quit равны м true. В заключение вызывается
метод release, которы й освобождает память, занятую структу­
рами данных, использованны м и для вы полнения операции. На
этом работа головной нити завершается, а с ней завершается и
работа конвейера в целом. Отметим, что реализация методов init,
produc, и release определяется семантикой операции физической
алгебры, ассоциированной с корневы м узлом.
Каждому внутреннему (не являющемуся корнем) узлу в дереве
физического плана сопоставляется нить innerthread, схема реа­
лизации которой приведена на рис. 18. Тело нити innerthread
начинается с вы полнения метода init применительно к ассоции­
рованному узлу. Затем в цикле, пока значение атрибута quit не
равно true, выполняю тся следующие действия: пустая итерация,
если выходной буфер не пуст (это означает, что родительский узел
еще не успел потребить кортеж, произведенный ранее данны м
узлом); вызов метода produce, если выходной буфер пуст; вызов
Глава 4. Выполнение запросов 65

v o id e x -e c (ro o t) {
v o id s ta r t. e h ild _ tb r e a d s (node) (
i t (n o d e ,le ftS o n l= N P L L ) {
s t a r t _ c h i l d _ t h r e a d s (node. l e ftS o n ) ?
thre a d _ cxe a te (ch ild _ L h r e a d ., n o d e . l e ftS o n ) ;
};
i f ( n o d e .rig h tS o n !■ HULL) <
start_child_tbreads(node.rightSon) ;
th readme rea te(th ild^t h read,n ode.гightSOb)
I;
s ta rt_ c h ild _ th x e a d s (ro o t);
th re a d c r e a t e ( r o o t t h r e a d , r o o t ) ;

Рис. 19. Процедура запуска синхронного конвейера

метода restart, если произведен кортеж EOF. В заключение вы ­


зывается метод release, которы й освобождает память, занятую
структурами данных, использованны м и для вы полнения опера­
ции. Реализация методов init, produce, restart и release определяется
семантикой операции ф изической алгебры, ассоциированной с
данны м узлом.
Чтобы вы полнить запрос, представленный ф изическим п л а­
ном с корнем root, вы полняется процедура запуска синхронного
конвейера, приведенная на рис. 19. Д анная процедура включает
в себя вспомогательную функцию startchildthreads, запускаю­
щую нити childthread для всех потомков указанного узла. Запуск
нити осуществляется системной функцией threadcreate, которая
активизирует переданную ей функцию как легковесный процесс
с указанны ми параметрами.
Рассмотрим реализацию методов init, produce, restart и release
на примерах алгоритмов вы полнения операции соединения.

Алгоритм NLDJ
Алгоритм NLD J (Nested Loop Disk Join) вы полняет соединение
вложенными циклами для случая, когда оба входных отнош ения
66 Глава 4. Выполнение запросов

Рис. 20. Схемы реализации


t* М е то д i n i t д л ч N LD J */
методов init, release и restart
void init ()[ для алгоритма NLDJ
w h ile ( rig h tS o n .b u fIs E m p ty )
w h i l e ( l e f t S o n Lb u f i s E s r i p t y ) j
н е пом ещ аю тся в опера­
тивную память. Во внеш ­
!*■ М е т о д r e l e a s e д л я N L D J */
v o id r e le a s e ( ) { } ;
нем цикле однократно
сканируется тестируемое
/ т М етол r e s t a r t дли NLDJ V (большее) отношение. Во
v o id r e s t a r t (J \ внутреннем цикле м ного­
r i g h t S o n . r e s t a r t (};
l e f t S o n . r e s t a r t {}
кратно сканируется опор­
le ftS o n .b u fT s F .m p ty tru e ; ное (меньшее) отношение.
rig h tS o n .b L if Is S n p ty tru e ; Указанный алгоритм им е­
w h i l e { r i g h t S o n . b i ; f I s E m p ty ) ет низкую эффективность
w h i l e ( l e t tS o n . b u f IsE sn p ty) :
и здесь приводится только
Ш в качестве прим ера. М ы
всегда будем п р е д п о л а ­
гать, что кортеж и опорного отнош ения поставляю тся левым
сы ном, а кортеж и тестируемого —правым. В случае операции
соединения в список методов узла добавляю тся метод condition,
проверяю щ ий вы полнение условия соединения для двух корте­
ж ей соединяемых отнош ений, и метод tuplejoin, соединяю щ ий
два кортежа в один. Схемы реализации методов init, release и restart
для алгоритма N LD J приведены на рис. 20. Схема реализации
метода produce —н а рис. 21.
Метод init (рис. 20) ожидает, пока в выходных буферах левого
и правого сыновей не появятся первые кортежи.
Метод produce (рис. 21) работает следующим образом. Ц икл
do с меткой 1 выполняется до тех пор, пока в буферах левого и
правого сыновей не окажутся кортежи, удовлетворяющие усло­
вию соединения. Это достигается следующим образом. Оператор
if с меткой 2 проверяет, не лежит ли в выходном буфере левого
сына, вычисляю щ его опорное отнош ение, специальны й к о р ­
теж EOF. Если это так, то нужно перейти н а начало опорного
Глава 4. Выполнение запросов 67

/* кетод p roduce для HLDJ */


v o id produce О {
1: do(
2i i f ( l e f t S o n .p a t == EOF)1
Э: le f tS o n -re s ta rt () ,L
4: le fts o n .b u fis E m p ty = tru e ;
5: w h ile (le ftS o n .b u fls E m p ty );
6 l i f (le fts o n .b u f= = E O F j{
7 s buf = EOF;
Sl b u fls E ra p ty =f a l s e ;
9 ; re tu rn ;
);
10: r i g h t s o n . b u f is E in p ty - tru e ;
11: w h ile (r ig h ts o n .b u fis E m p ty );
11
12 : i f f r I g h t S o n , b u £ == E O F ){
13: buf = EOF;
14: bu f Гs E m p t y = f* la e ;
15: r e tu r n ;
);
16: i f (c o n d itio n (le ftS o n .b u fp rig h tS o n .b u fl)
b re a k;
17; le ftS o n ,b u fT s E m p ty tru e ;
IS : w h i l e U e ^ t S o n , b u f Is E n ip ty ) ;
)w h i l e ( t r u e ) ;
lS :b u f - tu p le _ jo in ( le ftS o n ,b u f, rig h tS o n .b u fl
20 : b u f Is E in p ty fa ls e ;
2 l : le ftS o n .b u fT s E m p ty tru e ;
22;w h i i e ( i e f t S o n Tb u f I s E w p t y ) ;
};

Рис. 21. Схема реализации метода produce для алгорит­


ма NLDJ

отнош ения, что достигается следующим образом (операторы


с м еткам и 3—5): вы полняем restart для левого сына; устанав­
ливаем значение атрибута buflsEmpty левого сы на равны м true
(тем самым мы даем возможность нити левого сы на произвести
кортеж и поместить его в свой выходной буфер); ожидаем, пока
в буфере левого сы на не появится кортеж. После этого оператор
68 Глава 4. Выполнение запросов

if с меткой 6 проверяет, не является ли первы й кортеж опорного


отнош ения специальны м кортежем EOF. Если это так, то опор­
ное отнош ение является пустым, и в этом случае необходимо
сделать следующее (операторы с метками 7—9): поместить в свой
выходной буфер специальный кортеж EOF; установить значение
атрибута buflsEmpty текущего узла равны м false (тем самым мы
даем возможность нити родительского узла считать кортеж из
буфера текущего узла); завершить вы полнение метода produce.
Если в буфере левого сы на находится «нормальный» кортеж,
произойдет переход н а оператор с меткой 10. Эта позиция соот­
ветствует ситуации, когда мы проверили все кортеж и опорного
отнош ения на соответствие кортежу тестируемого отнош ения,
находящемуся в выходном буфере правого сына. В этом случае
необходимо перейти к следующему кортежу тестируемого от­
н ош ения, что достигается следую щим образом (операторы с
метками 10—11): устанавливаем значение атрибута buflsEmpty
правого сына равным true (тем самым мы даем возможность нити
правого сы на произвести кортеж и поместить его в свой выход­
н ой буфер); ожидаем, пока в буфере правого сына не появится
кортеж. Переход к оператору с меткой 12 соответствует ситуации,
когда в буферах левого и правого сыновей находится по кортежу,
причем в буфере левого сына лежит новы й кортеж, не равны й
EOF. Проверяем, не является ли кортеж в буфере правого сына
специальны м кортежем EOF . Если это так, то это означает, что
мы достигли конца тестируемого отнош ения, и вы полнение
операции соединения завершено. В этом случае выполняю тся
операторы с метками 13—15: помещ аем в выходной буфер те­
кущего узла EOF; устанавливаем значение атрибута buflsEmpty
равным false; завершаем с помощью оператора return выполнение
метода produce.
Если в буфере правого сына также оказался не EOF, произойдет
переход на оператор с меткой 16. Этот оператор проверяет условие
соединения для кортежей, поставленных левым и правым сыном.
Если условие выполняется, то происходит выход из цикла do с
Глава 4. Выполнение запросов 69

меткой 1, и мы попадаем в позицию с меткой 19. В этой позиции


мы должны соединить текущие кортежи опорного и тестируемого
отнош ения и перейти к следующему кортежу опорного отнош е­
ния. Это достигается вы полнением операторов с метками 19—22:
соединяем кортежи из буферов левого и правого сыновей и п о ­
мещаем результат в буфер текущего узла; устанавливаем значение
атрибута buflsEmpty текущего узла равным false (тем самым мы
даем возможность нити родительского узла считать кортеж из бу­
фера текущего узла); устанавливаем значение атрибута buflsEmpty
левого сына равным true (тем самым мы даем возможность нити
левого сына произвести очередной кортеж и поместить его в
свой выходной буфер); ожидаем, пока в буфере левого сына не
появится новы й кортеж.
Если условие соединения, проверяемое оператором if с меткой
16, не выполняется, то выход из цикла do с меткой 1 по оператору
break не произойдет. Вместо этого будут вы полнены операторы с
метками 17 и 18, обеспечивающие переход к следующему кортежу
опорного отнош ения, после чего начнется следующая итерация
цикла do.
Метод release (рис. 20) не вы полняет никаких действий, п о ­
тому что алгоритм N LD J не требует создания дополнительных
структур данных.
Метод restart алгоритма N L D J (рис. 20) вы полняет restart п р и ­
м енительно к сы новьям текущего узла; открывает им доступ
к их выходным буферам и ждет, пока там не появятся первые
кортежи.

Алгоритм NLMJ
А лгоритм N L M J (Nested Loop Memory Join) вы полняет с о ­
единение влож енны м и циклам и для случая, когда м еньш ее
(опорное) отнош ение полностью пом ещ ается в оперативную
память. Во внеш нем цикле однократно сканируется тестируе­
мое (большее) отнош ение. Во внутреннем цикле многократно
сканируется опорное отношение, предварительно загруженное в
70 Глава 4. Выполнение запросов

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


что кортеж и опорного отнош ения поставляю тся левым сыном,
а кортеж и тестируемого —правы м. В случае алгоритма N LM J
к атрибутам узла добавляю тся следую щ ие д оп олн и тельн ы е
атрибуты.
(1) Атрибут mem содержит указатель на массив в оперативной
памяти, куда помещ аю тся кортеж и опорного отнош ения
(нумерация элементов массива начинается с нуля).
(2) Атрибут pointer указывает н а текущ ий элем ент массива
mem.
Схемы реализации методов init, release и restart для алгоритма
N L M J приведены на рис. 22. Схема реализации метода produce —
н а рис. 23.
М етод init (рис. 22) создает м ассив mem, каж ды й элем ент
которого м ож ет хранить один кортеж опорного отнош ения.
П редполагается, что размер м ассива mem достаточен, чтобы
вместить в себя все кортеж и опорного отнош ения. Атрибуту
pointer, указывающему на текущ ий элемент массива m em , п р и ­
сваивается значение ноль. После этого в цикле do в массив mem
копирую тся все кортеж и опорного отнош ения, поставляемые
левым сыном. Последним копируется специальный кортеж EOF.
После заверш ения копирования опорного отнош ения в массив
mem указателю pointer вновь присваивается значение ноль, со­
ответствующее индексу первого элемента массива mem. Ц икл
while с пустым телом ожидает пока в выходном буфере левого
сы на появиться первы й кортеж тестируемого отнош ения. На
этом вы полнение метода init заканчивается.
М етод release (рис. 22) освобождает память, занятую м асси­
вом mem .
М етод restart (рис. 22) устанавливает указатель p ointer на
первы й элем ент массива mem и вы полняет метод restart п р и ­
м ен и тельн о к п р аво м у сыну, п о ставл яю щ ем у тестируем ое
отнош ение. Нет необходимости вы полнять restart для левого
сына, поскольку кортеж и опорного отнош ения берутся из мас-
Глава 4. Выполнение запросов 71

/* Метод init для NLMJ */


void init О {
mem = new array;
pointer - 0;
do;
leftSon.bufIsEmpty - true;
while(ieftSon.bufIsEmpty);
mem[pointerJ ■ leftSon.buf
pointer++;
}whiJLe(leftSon.buf != EOF) i
pointer = 0;
w h i l e ■;r i g h t S o n , b u f I s E m p t y ) ;
h

/ * Метод release для NLMJ */


void release{)[
delete mem;
};

/* Метод restart для NLMJ *7


void restart{)(
pointer = 0;
rightSon.restart();
rightSon*butIsEmpty = true;
while(rightSon.buflsEmpty);
}t

Рис. 22. Схемы реализации методов init, re ­


lease и restart для алгоритма NLMJ

сива mem. П оследние два оператора обеспечиваю т появление


первого кортеж а тестируемого отнош ения в вы ходном буфере
правого сына.
Реализация метода produce для алгоритма N L M J (рис. 23) в
основном повторяет реализацию метода produce для алгоритма
NLD J (рис. 21) с той лиш ь разницей, что кортеж и опорного от-
72 Глава 4. Выполнение запросов

/ * м етод p ro d u c e для NLMJ * /


v o id p ro d u c e d {
i f ( m e m [ 0 ] == E O F ) {
b u f = E OF;
buflsE m pty = fa ls e ;
re tu rn ;
Ц
do i
i f ( m e m [ p o in t e r J == E O F ){
p o in te r " 0;
r i g h t - S o n .b u f I s E m p t y tru e ;
w h ile ( r i g h t S o n .b u fI s E m p t y ) ;
H
i f ( r i-g h tS o n . b u f ” EOF) 1
b u f = EOF;
b u fls E m p ty = f a l s e ;
re tu rn ?
);
i f ( c o n d itio n ( m e m [p o in te r ], r ig h t S o n . b u f ))
b re a k ;
p o i n t e r -ь-ь;
[w h ile ( tr u e ) ;
b u f = tu p le jo in (m em [p o in ter] , r ig h tS o n ,b u f ) ;
b u f l s E m p t y = fa ls e ;
p o i n t e r -м- ;
П
Рис. 23. Схема реализации метода produce для алгоритма NLMJ

нош ения не поставляются по конвейеру левым сыном, а каждый


раз берутся из массива mem.
В заклю чение отметим, что здесь м ы привели л иш ь схемы
реализации синхронного конвейера, при зван н ы е прояснить
только основны е идеи. Детали реальной реализации будут во
многом зависеть от системы программирования и операционной
среды. В случае использования операционной системы UN IX ,
Глава 4. Выполнение запросов 73

все сведения, необходимые для реализации синхронного к о н ­


вейера, можно найти в книге [17]. А мы здесь ограничимся лишь
нескольким и замечаниями.
Для реализации легковесных процессов вполне подойдут нити
(потокиуправления) стандарта POSIX. Создание нити вы полня­
ется с помощ ью системной ф ункции pthreadcreate, а ее завер­
ш ение — с помощ ью системной функции pthreadexit (должна
вызываться функцией нити при заверш ении).
Пустые циклы вида w h i l e ( s o n . b u f I s E m p t y ) , которые мы
использовали для ож идания появления очередного кортеж а в
выходном буфере дочернего узла, непроизводительно расходуют
процессорное время. Эту проблему можно эф ф ективно реш ить
с помощ ью мьютексов и переменных состояния [17].
Мьютекс (mutex) —это фактически двоичный семафор, кото­
рый закрывается перед обращ ением к разделяемому ресурсу и
открывается после вы полнения требуемой последовательности
операций. Если мьютекс закрыт одной нитью, то другая нить,
которая попытается закрыть его, будет заблокирована (переведена
операционной системой в спящ ее состояние) до тех пор, пока
мьютекс не будет открыт первой нитью. М ьютексы создаются в
виде переменных типа p th rea d m u text. Закрытие мьютекса вы ­
полняется с помощью ф ункции pthread_mutex_lock, открытие —с
помощ ью ф ункции pthreadm utexunlock.
Переменная состояния (condition variable) — это систем ное
средство синхронизации нитей, позволяю щ ее активизировать
заснувш ую н и ть п р и в ы п о л н ен и и оп ред елен н ого условия.
Переменные состояния защищаются мьютексами. Прежде чем
изм енить значение такой перем енной, нить долж на закрыть
мьютекс, ассоциированны й с данной переменной. Для оценки
переменной состояния также необходимо закрыть связанный
с н ей мьютекс. П ерем енная состояня, представляется типом
p th rea d co n d t. Ф ункция pthread cond wait открывает мьютекс
и блокирует вызывающую нить по переменной состояния. За­
блокированная нить пробуждается с помощ ью вызова ф ункции
74 Глава 4. Выполнение запросов

pthread_cond_signal. П ри этом функция pthread_cond_wait перед


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

Листинг 1. Пример использование мьютекса и переменной со­


стояния для реализации двухзвенного конвейера.
#include <pthread.h>
#def ine t r u e 1
#def ine f a l s e 0
p t h r e a d mutex t b u f lo c k ;
p t h r e a d cond t b u f i s empty, b u f n o t empty;

/ * - - Нить п о т р е б и т е л я - - * /
get_tuple(){
p t h r e a d mutex lo c k (& b u f l o c k ) ;
w hile(bufIsEm pty)
p t h r e a d c o n d w a i t ( & b u f n o t e m p t y , &buf l o c k ) ;
r e a d b u f (& b u f, & inT uple); / / чтение кортежа i n T u p l e из
буфера.
bufIsEmpty = tr u e ;
p t h r e a d mutex u n lo c k (& b u f l o c k ) ;
p t h r e a d cond sig n a l( & b u f i s empty);
};

/ * - - Нить п о с т а в щ и к а - - * /
put_tuple(){
p t h r e a d mutex lo c k (& b u f l o c k ) ;
w hile(!bufIsEm pty)
p t h r e a d c o n d w a i t ( & b u f i s e m p t y , &buf l o c k ) ;
w r i t e b u f ( & b u f , & o u t T u p l e ) ; / / з а п и с ь к о р т е ж а в б уф е р.
bufIsEmpty = f a ls e ;
p t h r e a d mutex u n lo c k (& b u f l o c k ) ;
p t h r e a d cond sig n a l( & b u f n o t empty);
};
Глава 4. Выполнение запросов 75

§ 4.3. Асинхронный конвейер


К ак уже указывалось в параграфе 1.2, О сновным недостат­
ком синхронного конвейера является блокирую щ ий характер
операций конвейерной обработки отдельных кортежей. Если
некоторая операция задерживается с обработкой очередного кор­
тежа, то она блокирует работу всего конвейера. Для преодоления
указанного недостатка может быть использован асинхронный кон­
вейер, в котором поставщ ик и потребитель работают независимо
друг от друга, а данны е передаются через склад (depot), имею щ ий
структуру очереди. Н ить-поставщ ик «складывает» в свой склад
производимые ею кортежи, а породивш ая ее нить-потребитель
«забирает» эти кортеж и из склада, как это схематично изобра­
жено н а рис. 24.
П ри организации асинхронного конвейера необходимо опре­
деленное управление потоком данных между поставщ иком и п о ­
требителем, которое препятствовало бы переполнению склада в
случае, когда потреби­
тель работает м едлен­
н ее, ч ем п о с та в щ и к .
Этого можно достичь,
и сп ользуя п о н яти е
Т-факт ора, к о т о р о е
можно определить сле­
дующим образом.
О п р е д е л и м т. к а к
меру заполнения скла­
да нити T, 0 < т < 1 для

Рис. 24. Иерархия нитей


(Т) под управлением по­
токов данных (стрелки)
с использованием скла­
дов (S)
76 Глава 4. Выполнение запросов

всех i. Назовем данную меру Т-фактором нити T.. Значение т.= 1


соответствует полному заполнению склада нити T. Значение
т = 0 соответствует ситуации, когда склад нити T пуст.
Определим фактор-функцию f (t) нити Т как вещественную
функцию , вычисляющую значение Т-ф актора нити T в момент
времени t.
Пусть н ити T , Tj2 являю тся производителям и данны х для
н и ти T. Нить T будем называть дизъюнктивной, если для ее р а ­
боты достаточно, чтобы хотя бы один из складов подчиненны х
нитей T , T 2 был не пуст. Нить Т будем называть конъюнктивной,
если для ее работы необходимо, чтобы оба склада подчиненны х
нитей Tn, T2 были не пусты. Нить, у которой имеется только
один поставщ ик, м ы всегда будем считать конъ ю нктивной.
Вид н ити с двумя поставщ икам и (конъю нктивная или ди зъ­
ю нктивная) определяется сем антикой ассоциированной с ней
бинарной операции физической алгебры. Например, операции
N LD J соответствует конъю нктивная нить, а операции N L M J —
дизъю нктивная.
Определим для нитей следующие три возможных состояния.
(1) Нить T .находится в состоянии простоя в момент времени
t, если f ( t) = 1.

(2) Д изъю нктивная нить T .находится в состоянии ожидания


к
в момент времени t, если ^ f (t ) = 0 . Конъю нктивная
j =i
нить T .находится в состоянии ожидания в момент времени
к
t, если П
j=1
f,( ( ) = 0 к е {1, 2 }

(3) Нить T готова кработе, если она не простаивает и не


находится в состоянии ожидания.
Н а листинге 2 приведен пример реализации асинхронного
конвейера между потребителем и двумя поставщ икам и. Этот
случай соответствует бинарной операции физической алгебры.
Глава 4. Выполнение запросов 77

Листинг 2. Реализация асинхронного конвейера между потребите­


лем и двумя поставщками.
#include < pthread.h>
#def ine t r u e 1
#def ine f a l s e 0
#def ine c o n j u n c t i o n a l 0 / / в ид н ит и - к о н ъ ю н к т и в н а я
#def ine d i s j u n c t i o n a l 1 / / в ид н ит и - д и з ъ ю н к т и в н а я
in t d isjunct = true; / / п ри н и м а е т з н а ч е н и е « л ож ь », если
о ба с к л а д а п у ст ы
p t h r e a d mutex t
depot1 lock, // м ьют е кс д л я с к л а д а 1
depot2 lock, // м ьют е кс д л я с к л а д а 2
disjunct_lock; // м ьют е кс д л я д и з ъ ю н к т а d i s j u n c t
pthread_cond_t // Переменные с о с т о я н и я :
n o t e m p t y 1, // с к л а д 1 не п у с т
n o t e m p t y 2, // с к л а д 2 не п у с т
not_full_1, // с к л а д 1 не з а п о л н е н
n o t f u l l 2, // с к л а д 2 не з а п о л н е н
disjunct_is_true; // ди з ъ юн кт п ри н и м а е т з н а ч е н и е « и с -
тина»

/ * - - Нить п о т р е б и т е л я -*/
get_tuples(){
s w i t c h ( k i n d o f consumer){
c a s e c o n j u n c t i o n a l : / / конъюнктивная н и т ь - п о т р е б и т е л ь
p t h r e a d mutex lo c k (& d ep o t1 l o c k ) ;
p t h r e a d mutex lo c k (& d ep o t2 l o c k ) ;
w h i l e ( T _ f a c t o r 1 * T _ f a c t o r 2 == 0)
i f ( T _ f a c t o r 1 == 0){
p t h r e a d mutex unlo c k (& d ep o t2 l o c k ) ;
p t h r e a d c o n d w a i t ( & n o t e m p t y 1, &depot1 l o c k ) ;
p t h r e a d mutex lo c k (& d ep o t2 l o c k ) ;
}else{
p t h r e a d mutex unlo c k (& d ep o t1 l o c k ) ;
p t h r e a d c o n d w a i t ( & n o t e m p t y 2, &depot2 l o c k ) ;
p t h r e a d mutex lo c k (& d ep o t1 l o c k ) ;
78 Глава 4. Выполнение запросов

};
r e a d tu p l e ( & d e p o t 1 , & i n T u p l e 1 ) ; / / чтение кортежа из
с к л а д а 1.
r e a d tu p l e ( & d e p o t 2 , & i n T u p l e 2 ) ; / / чтение кортежа из
с к л а д а 2.
i f ( T f a c t o r 1 == 1) / / н и т ь - п о с т а в щ и к 1 п р о с т а и в а е т
p t h r e a d cond s ig n a l( & n o t f u l l 1);
i f ( T f a c t o r 2 == 1) / / н и т ь - п о с т а в щ и к 2 п р о с т а и в а е т
p t h r e a d cond s ig n a l( & n o t f u l l 2);
T f a c t o r 1 = f ( & d e p o t 1 ) ; / / п е р е с ч е т T- ф а к т о р а дл я
с к л а д а 1.
T f a c t o r 2 = f ( & d e p o t 2 ) ; / / п е р е с ч е т T- ф а к т о р а дл я
с к л а д а 2.
p t h r e a d mutex unlo c k (& d ep o t1 l o c k ) ;
p t h r e a d mutex unlo c k (& d ep o t2 l o c k ) ;
break;
c a s e d i s j u n c t i o n a l : / / дизъюнктивная н и ть-п отреб и тель
p t h r e a d mutex lo c k (& d ep o t1 l o c k ) ;
p t h r e a d mutex lo c k (& d ep o t2 l o c k ) ;
p t h r e a d mutex l o c k ( & d i s j u n c t l o c k ) ;
w h i l e ( ! ( d i s j u n c t = ! ( T _ f a c t o r 1 + T _ f a c t o r 2 == 0 ) ) ) {
p t h r e a d mutex u n lo c k (& d ep o t1 l o c k ) ;
p t h r e a d mutex u n lo c k (& d ep o t2 l o c k ) ;
p t h r e a d _ c o n d _ w a i t (&disj u n c t _ i s _ t r u e , &disj u n c t _
lock);
p t h r e a d mutex lo c k (& d e p o t1 l o c k ) ;
p t h r e a d mutex lo c k (& d e p o t2 l o c k ) ;
};
i f ( T f a c t o r 1 > T f a c t o r 2 ) { / / читаем из более з а п о л ­
ненного склада
p t h r e a d mutex u n lo c k (& d ep o t2 l o c k ) ;
r e a d tu p l e ( & d e p o t 1 , & i n T u p l e 1 ) ; / / чтение кортежа
и з с к л а д а 1.
i f ( T f a c t o r 1 == 1) / / н и ть -п ос та вщ и к 1 п р о с т а и в а е т
p t h r e a d cond s i g n a l ( & n o t f u l l 1);
T f a c t o r 1 = f ( & d e p o t 1 ) ; / / п е р е с ч е т T- ф а к т о р а д л я
с к л а д а 1.
Глава 4. Выполнение запросов 79

p t h r e a d mutex u n lo c k (& d ep o t1 l o c k ) ;
}else{
p t h r e a d mutex u n lo c k (& d ep o t1 l o c k ) ;
r e a d tu p l e ( & d e p o t 2 , & i n T u p l e 2 ) ; / / чтение кортежа
и з с к л а д а 2.
i f ( T f a c t o r 2 == 1) / / н и т ь -п ос та вщ и к 2 п р о с т а и в а е т
p t h r e a d cond s i g n a l ( & n o t f u l l 2 ) ;
T f a c t o r 2 = f ( & d e p o t 2 ) ; / / п е р е с ч е т T- ф а к т о р а д л я
с к л а д а 2.
p t h r e a d mutex u n lo c k (& d ep o t2 l o c k ) ;
};
p t h r e a d mutex u n l o c k ( & d i s j u n c t l o c k ) ;
};

/ * - - Нить п о с т а в щ и к а 1 - - * /
put_tuple1(){
p t h r e a d mutex lo c k (& d e p o t1 l o c k ) ;
p t h r e a d mutex l o c k ( & d i s j u n c t l o c k ) ;
w h i l e ( T f a c t o r 1 == 1) { / / с к л а д 1 з а п о л н е н
p t h r e a d mutex u n l o c k ( & d i s j u n c t l o c k ) ;
p t h r e a d c o n d w a i t ( & n o t f u l l 1, &de pot 1 l o c k ) ;
p t h r e a d mutex l o c k ( & d i s j u n c t l o c k ) ;
};
w r i t e buf(&depot1, &outTuple1); / / запись кортежа в склад 1.
i f ( T f a c t o r 1 == 0) / / в с к л а д е 1 не было к о р т е ж е й
if(!disjunct){
p t h r e a d cond s i g n a l ( & n o t empty 1);
d isju n c t = true;
};
T _ f a c t o r 1 = f ( & d e p o t 1 ) ; / / п е р е с ч е т T- ф а кт ор а для с кл ад а 1.
p t h r e a d mutex u n lo c k (& d ep o t1 l o c k ) ;
p t h r e a d mutex u n l o c k ( & d i s j u n c t l o c k ) ;

/ * - - Нить п о с т а в щ и к а 2 - - * /
put_tuple2(){
p t h r e a d mutex lo c k (& d e p o t2 l o c k ) ;
80 Глава 4. Выполнение запросов

p t h r e a d mutex l o c k ( & d i s j u n c t l o c k ) ;
w h i l e ( T f a c t o r 2 == 1) { / / с к л а д 2 з а п о л н е н
p t h r e a d mutex u n l o c k ( & d i s j u n c t l o c k ) ;
p t h r e a d c o n d w a i t ( & n o t f u l l 2, &de pot 2 l o c k ) ;
p t h r e a d mutex l o c k ( & d i s j u n c t l o c k ) ;
};
w r i t e buf (&depot2, &outTuple2); / / запись кортежа в склад 2.
i f ( T f a c t o r 2 == 0) / / в с к л а д е 2 не было к о р т е ж е й
if(!disjunct){
p t h r e a d cond s i g n a l ( & n o t empty 2 ) ;
d isju n ct = true;
};
T f a c t o r 2 = f ( & d e p o t 2 ) ; / / п е р е с ч е т T- ф а кт ор а для с к л ад а 2.
p t h r e a d mutex u n lo c k (& d ep o t2 l o c k ) ;
p t h r e a d mutex u n l o c k ( & d i s j u n c t l o c k ) ;
};
Глава 5

Распределение данных

§ 5.1. Фрагментация данных


Ф рагментный параллелизм базируется на разбиении отнош е­
н и я н а непересекаю щ иеся горизонтальны е отрезки, назы ваю ­
щ иеся фрагментами. Ф рагменты отнош ения располагаю тся н а
различных процессорны х узлах и могут обрабатываться незави­
симо. Способ разбиения отнош ения н а фрагменты определяется
функцией фрагментации, являю щ ейся атрибутом отнош ения,
хранящ имся в словаре базы данных. Дадим формальные опреде­
ления основны х понятий, связанны х с ф рагментацией данных.
Пусть в м ногопроцессорной системе им еется k процессорны х
узлов.
Определение 1. Пусть имеется отнош ение R, которое необхо­
димо фрагментировать по узлам многопроцессорной системы.
Ф ункция ф : R ^ {0, 1...,k—1}, вычисляющая номер процессорного
узла, н а котором должен храниться кортеж, называется функцией
фрагментации отнош ения R. М ножество кортежей R . = {r| r е R,
ф(г) = i} называется i-тым фрагментом отношения R. Ф рагмент
R. хранится на /-том процессорном узле.
Ф рагменты отнош ения R имею т следующие свойства, вы те­
каю щ ие непосредственно из определения 1:

(5.1)

R П R j = 0 , при i ф j (5.2)
82 Глава 5. Распределение данных

Примером простейш ей ф ункции фрагментации отнош ения П


(поставщики) из параграфа 1.1 может служить функция ф (г ) =
= r. К од_пm od^ в предположении, что код поставщ ика всегда
является целым положительным числом.
Н а примере базы данных «Поставки» в параграфе 1.1 было
показано, что при использовании фрагментного параллелизма
существуют параллельные планы , которые не могут быть вы ­
полнены корректно без пересы лки кортежей между процессор­
ны м и узлами. Однако в определенных случаях пересылок можно
избежать. Д ля идентиф икации таких случаев введем понятие
допустимости фрагментации по отнош ению к операции реля­
ционной алгебры.
Определение 2. Унарная операция А называется фрагментно-
независимой, если для произвольного аргумента-отнош ения R и
любой ф ункции фрагментации фд имеем

(5.3)

Бинарная операция А называется фрагментно-независимой,


если для произвольных аргументов-отнош ений R, S и любых
ф ункций фрагментации фRи ф5 имеем

(5.4)

Здесь Ri = {r| r ! R, фк(г) = / } — z'-тый фрагмент отноения R ; S. =


{s |s ! S, ф 5(х) = / } — z-тый фрагмент отнош ения S.
Применение фрагментно-независимой операции к отношению
равносильно ее применению к фрагментам этого отнош ения с
последующим объединением полученных результатов. П ри этом
м ы всегда полагаем, что операции ф изической и реляционной
алгебр работают с отнош ениями, представленными мультимно­
жествами кортежей [4], то есть множествами, допускаю щими
Глава 5. Распределение данных 83

присутствие кортежей-дубликатов, у которых совпадают значе­


ни я всех атрибутов.

Таблица 2
Допустимость фрагментации для некоторых реляционных пераций

Обозначение Название Допустимость


операции операции фрагментации

т проекция да
а выбор да
8 удаление дубликатов нет

Y группирование нет

U объединение да
п пересечение нет
X прямое (декартово) произведение нет

соединение нет

Д ля ф рагментно-независимой операции А (унарной или би­


нарной) мы будем говорить, что она допускает фрагментацию.
И нф орм ация о допустимости фрагментации для основных р е­
ляционны х операций приведена в таблиц. 2.
В общем случае для корректного вы полнения реляционной
операции, не допускаю щей фрагментацию, необходимо орга­
низовывать пересылки кортежей между процессорны ми узлами.
Однако, как мы увидим далее, существуют важные классы ф унк­
ций фрагментации, которые позволяю т значительно сократить
число пересылаемых кортеж ей или вообщ е избежать пересылок
для определенных ф рагментно-зависимых операций.
Ф ункция фрагментации может зависеть от многих параметров,
например, от частоты обращ ения к кортежу на различных узлах
м ногопроцессорной системы. Н о особенно важ ной является
84 Глава 5. Распределение данных

функциональная зависимость ф ункции фрагментации от опреде­


ленного атрибута фрагментируемого отнош ения.
Определение 3. Пусть задано отнош ение R[..., Л,...]. Ф ункция
ф рагментации ф функционально зависит от атрибута Л, если
справедливо вы сказывание

Данное определение может быть легко обобщено н а случай


двух и более атрибутов.
Например, функция фрагментации ф (г) = г. К о д _ п т о ё £ отно­
ш ения П (поставщики) из параграфа 1.1 функционально зависит
от атрибута К о д _ п . Определение функциональной зависимости
может быть легко обобщено н а случай двух и более атрибутов.
В этом случае ф ункция фрагментации всегда выдает один и тот
же номер процессорного узла для кортежей, у которых совпадают
значения соответствующих атрибутов.
Особенно важны м при параллельной обработке запросов в
реляционны х базах данны х является случай функциональной
зависимости функции фрагментации от одного атрибута. Для
этого случая справедливо следующее утверждение.
Утверждение 1. Пусть задано отнош ение R[..., Л , . ] , DA —до­
мен (множество возможных значений) атрибута Л, являю щегося
первичным клю чом в R. Предположим, что все значения из DA
представлены в отнош ении R, то есть V a е DA (3r е R (r.A = a ) .
Пусть ф : R ^ {0, 1...,£—1} —ф ункция фрагментации отнош ения
R . Ф ункция ф будет функционально зависимой от атрибута Л
тога, и только тогда, когда существует функция f : DA^ {0,..., k—1},
называемая доменной функцией атрибута A, такая, что

Vr е R ( ф ( r ) = f (r. A) ). (5.6)

Д о к а з а т е л ь с т в о . Предположим сначала, что существует


доменная функция f : DA ^ {0,...,k—1}, удовлетворяющая усло­
вию (5.6). Пусть u,v ! R и u.A = v.A. Тогда f(u.A) =f(y.A). Отсюда
Глава 5. Распределение данных 85

и из (5.6) следует, что ф(и) = ф(у). Таким образом, выполняется


условие (5.5) определения 3, то есть ф является функционально
зависимой от атрибута A.
Теперь предположим, что ф является ф ункционально зависи­
мой от атрибута A. Сконструируем функцию f : DA ^ {0,...,k—1}
следующим образом:
f(a) := ф ^ а О К )) (5.7)
У казанное определение является корректн ы м , поскольку
оп ерац и я вы бора oA=a верн ет в точ н ости один кортеж . Это
действительно так, поскольку атрибут A является первичным
клю чом в R, и все значения из DAпредставлены в отнош ении R.
Покажем, что для функции,), сконструированной таким образом,
выполняется условие . Пусть r е R. Так как атрибут A является
первичным клю чом в R , имеем c A=rA(R) = r. Отсюда ф ^ ^ ^ ) ) =
= ф(г). Сопоставляя последнее с (5.7), получаем f(r.A) = ф(г), то
есть условие (5.6) имеет место. Предложение доказано.
И спользуя утверждение 1, м ы можем сформулировать сле­
дующее определение.
Определение 4. Пусть задано отношение R[..., A,...]. Атрибутной
фрагментацией отношения R называется пара (A, f), где f : DA ^
{0,...,k—1} —доменная функция для атрибута A. Если отнош ение
R фрагментировано с помощью атрибутной фрагментации (A, f),
то м ы будем также говорить, что отнош ение R фрагментировано
по атрибуту A.
В качестве примера приведем фрагментацию базы данных «По­
ставки» из параграфа 1.1, изображенную на рис. 7. В этом примере
отнош ения П (поставщ ики) и П Д (поставки деталей) фрагм ен­
тированы с помощ ью одинаковой атрибутной фрагм ентации
(Код_П, Код ПшоА 2), а отношение Д (детали) фрагментировано
с помощ ью атрибутной фрагментации (Код_Д, Код_Д m od 2).
В случае атрибутной ф рагм ентации мы можем ввести сле­
дующее важное понятие атрибутной зависимости реляционной
операции.
86 Глава 5. Распределение данных

Определение 5. Ф рагментно-зависим ая операция назы вает­


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

§ 5.2. Пересылка данных


Базовым понятием при организации межпроцессорных об­
менов в параллельных системах баз данных является функция
пересылки.
Определение 6. Пусть им еется отнош ение R, разбитое н а k
фрагментов R p .. ,,Rk, распределенных по k процессорны м узлам.
М ногозначное отображение у : R ^ {0,1,...,k—1} , вычисляющее
множество ном еров процессорных узлов, н а которых должен
быть обработан кортеж, называется оператором пересылки от­
нош ения R .
Пример 3. Пусть необходимо вы полнить декартово п р о и з­
ведение отнош ений R и S , фрагментированных по k процессор­
ны м узлам м ногопроцессорной системы с помощью ф ункций
фрагментации 9Rи соответственно. В этом случае операторы
пересылки для R и S можно определить следующим образом:

¥ *(r) = ф* (г), (5.8)


У s 00 = k - !}•
Глава 5. Распределение данных 87

Это означает, что кортеж и отнош ения S должны обрабаты­


ваться н а всех узлах, а кортеж и отнош ения R только н а тех узлах,
где они хранятся. Количество пересылок кортежей отнош ения S
в этом случае будет равно |S](k—1); кортеж и отнош ения R пере­
сылаться не будут. Разумеется, операторы пересы лки (5.8), п р и ­
веденные в этом примере, не являются единственно возможными
для декартова произведения.
Для построения операторов пересы лки соединяемых отнош е­
н и й может оказаться позны м ой следующее утверждение.
Утверждение 2. Пусть заданы отнош ения R[..., A,...] и S[..., A,...]
с единственным общим атрибутом A, фрагментированные по к
узлам многопроцессорной системы произвольным образом. Для
произвольной доменной функции f : DA^ {0,..., к—1} операторы

v* (r) = /л (г-А1 (5.9)


V s (S) = f A(S‘A)
будут корректны ми операторами пересы лки для естественного
соединения отнош ений R и S, то есть
k-1
(5.10)

где R = {r | r е R, v R(r) = /}, S = {s|s е S, y S(s) = /} —множества к о р ­


тежей из R и S, которые будут обрабатываться н а /-том узле.
Д о к а з а т е л ь с т в о . П оскольку отображ ения являю тся
однозначными, имеем

R = U R‘ и S = U S 1.
i=0 i=0
Следовательно,

(5.11)

Покажем, что обратное вложение


88 Глава 5. Распределение данных

к-1
RdS с У R dS (5.12)
i=0
также имеет место. Предположим противное, то есть существует
пара
(r,s ) ! Rd S (5.13)
такая, что
к-1
(r,s) г У R‘dS ‘. (5.14)
i=0
Из (5.13) следует
r.A = s.A. (5.15)
С другой стороны, из (5.14) следует, что y R(r) ф y s(s). Сопостав­
ляя это с (5.9) п ол у ч аем /^ r.A) фf(s.A ). Но это воможно, только,
если r.A ф s.A. Получили противоречие с (5.15). Следовательно,
(5.12) имеет место. И з (5.11) и (5.12) следует (5.10).Предложение
доказано.
Пример 4. Пусть необходимо вы полнить естественное соеди­
нение отнош ений R[A, B] и S[C, A], фрагментированных по k
п роцессорны м узлам м ногопроцессорной системы . Пусть R
фрагментировано с помощью атрибутной фрагметациий (A ,f), S
фрагментировано произвольным образом. В качестве операторов
пересы лки и здесь мы можем взять операторы (5.8) из примера
3. Однако утверждение 2 дает нам лучш ий вариант:

V ,(r) = f (5.16)
Vs (s) = I a(s.A).
В этом случае кортеж и отнош ения R пересы латься также не
будут, так как оно фрагм ентировано по атрибуту соединения.
Количество пересы лок кортеж ей отнош ения S не будет п р е­
выш ать |S], так как отображение v s(s) = f(s .A ) является одно­
значны м.
Глава 5. Распределение данных 89

П ри равном ерном распределении значений атрибутов мы


можем получить более точную оценку, предоставляемую сле­
дующей теоремой.
Теорема 1. Пусть им еется отнош ение £[С, A,...], в котором
значения атрибута C распределены равномерно, а значения атри­
бута A, в свою очередь, распределены равномерно относительно
атрибута C. П оложим m = |S|. Пусть m кратно V(R, C), а V(R, C)
кратно k, где k —количество процессорных узлов (к > 0). Тогда
существует функция фрагментации , функционально зависящ ая
от атрибута C, такая, что для любого однозначного оператора
пересы лки ф, ф ункционально зависящего от атрибута A, кол и ­
чество пересылаемых кортежей равно (1 —1/k)m. Доказательство
можно найти в работе [5].

§ 5.3. Оператор обмена exchange

Д ля организации меж процессорных обменов мы будем и с ­


пользовать специальны й оператор exchange, которы й может
быть добавлен в качестве узла в любое место дерева плана п а ­
раллельного агента. Оператор exchange имеет два специальных
атрибута: номер порта обмена и указатель на функцию пересылки.
Функция пересылки ф для каждого кортежа, поступающего н а вход
оператора exchange, возвращает целое число в диазоне [—1; к—1],
где к —количество процессорных узлов, задействованных для
вы полнения запроса. Если ф возвращает неотрицательное значе­
ние, то оно интерпретируется как номер узла, на котором должен
быть обработан кортеж. Если ф возвращ ает значение равное —1,
то это означает, что кортеж должен быть обработан на всех узлах.
Таким образом, ф ункция пересы лки является частным случаем
оператора обмена, определенного в параграф е 5.2. Ф ункция
пересы лки предоставляет достаточно возможностей для парал­
лельной реализации любого плана вы полнения запроса. Порт
обмена позволяет включать в дерево плана параллельного агента
90 Глава 5. Распределение данных

произвольное количество операторов exchange (для каждого опе­


ратора указывается свой уникальный порт обмена).
Оператор exchange работает следующим образом. Д ля каждого
входного кортежа t вычисляется значение ^ (t). Если значение
ф (0 равно номеру узла, на котором выполняется параллельный
агент, кортеж t помещ ается в выходной буфер (склад) текущего
оператора exchange. Если значение ^ (t) равно номеру другого про­
цессорного узла, то кортеж t пересылается н а соответствующий
узел, где попадает в выходной буфер (склад) оператора exchange,
имеющего такой же порт обмена. Если значение ^ ( t равно —1, то
кортеж t помещается в выходной буфер (склад) текущего операто­
ра exchange и пересылается всем остальным процессорным узлам,
где попадает в выходные буферы (склады) операторов exchange,
имею щ их такой ж е порт обмена. Рассмотрим использование
оператора exchange н а следующем примере.
Пример 5. Вернемся к запросу из прим ера 2 (§ 1.1), в котором
нам надо было н ай ти в базе данны х «П оставки» им ена всех
поставщ иков, поставляю щ их хотя бы одну красную деталь.
Предположим, что отнош ения П (поставщики) и П Д (поставки
деталей) фрагментированы с помощ ью одинаковой атрибутной
ф рагм ентации (Код_П, Код_П m od k), а отнош ение Д (дета­
ли) ф рагм ентировано с пом ощ ью атрибутной ф рагм ентации
(Код_Д, Код_Д m od k), где k —количество процессорных узлов.
Пример такой фрагментации для k = 2 был приведен н а рис. 7.
Как мы убедились, параллельный план, изображенный нарис. 61,
для уазанной фрагм ентации будет работать неправильно, так
как в этом случае необходимы межпроцессорные обмены. Ч то­
бы исправить ситуацию, мы должны для каждой операции, не
допускаю щей фрагментацию, разрезать ребра, соединяю щ ие ее
с дочерними узлами, и вставить в эти разрезы операторы exge
(см. таблицу 2). В случае параллельного плана на рис. 6 такими
1Поскольку все агенты параллельного плана имеют одинаковую структуру
и отличаются только индексами фрагментов входных отношений, для за­
дания параллельного плана достаточно задать г-тый агент.
Глава 5. Распределение данных 91

Рис. 25. Два эквивалентных параллельных плана с операторами


exchange «е»

операциями являются операции естественного соединения, обо­


значенные символом d . После добавления операторов exchange
мы получим параллельный план, изображенный н а рис. 25 (a).
Д ля кратк ости операторы exchange об озн ачен ы буквой «е».
В качестве верхнего индекса у каждого оператора exchange указан
уникальный порт обмена. В качестве нижнего индекса указана
ф ункция пересылки.
Первый оператор exchange добавлен перед операцией output,
выводящей результат на консоль или в файл. Этот оператор имеет
функцию пересы лки ф ^ ) = 0. Он будет отправлять все кортежи
частичных результатов, полученных на различных процессорных
узлах, на процессорны й узел с ном ером 0, где произойдет их
слияние в общее результирующее отнош ение. Второй и третий
операторы exchange имею т одинаковы е ф ункции пересы лки,
представленные дом енной функцией атрибута вышестоящего
естественного соединения. Утверждение 2 гарантирует нам, что
при любой фрагментации входных отнош ений, это естествен-
92 Глава 5. Распределение данных

Рис. 26. Структура операто­


ра exchange

н о е с о е д и н е н и е будет
п равильно вы числено
п ри вы полнении д ан н о­
го параллельного плана.
Четвертый и пяты й опе­
раторы exchange также имею т одинаковые ф ункции пересылки,
представленные доменной ф ункцией атрибута выш естоящ его
естественного соединения, что обеспечивает правильное в ы ­
полнение запроса в целом.
На самом деле, мы можем оптимизировать полученный парал­
лельный план. Обратим внимание н а то, что функция пересылки
^ 2(t) = 0 совпадает с ф ункцией фрагментации отнош ения П. Это
означает, что кортеж и отнош ения П пересы латься не будут. Сле­
довательно, мы можем удалить оператор exchange из плана
(а). По аналогичной причине мы можем удалить из плана (а)
оператор exchange в^ , перейдя к эквивалентному параллельному
плану, изображенному на рис. 25 (б).
Оператор exchange является составным оператором. Его струк­
тура изображена н а рис. 26. Оператор exchange включает в себя
четыре оператора: gather, scatter, split и merge.
Оператор split — это бинарны й оператор, который осущест­
вляет разбиение кортеж ей, поступаю щ их из входного потока
(ассоциируется с левым сыном), н а две группы: свои и чужие.
Свои кортеж и —это кортежи, которые должны быть обработа­
ны н а данном процессорном узле. Эти кортеж и направляю тся в
выходной буфер (склад) оператора split. Чужие кортежи, то есть
кортежи, которые должны быть обработаны на процессорных
узлах, отличных от данного, помещ аю тся оператором split в вы ­
ходной буфер (склад) правого сына, в качестве которого фигу­
рирует оператор scatter. Здесь выходной буфер (склад) оператора
Глава 5. Распределение данных 93

scatter играет роль входного потока данных. Н смотря н а то, что


структурно оператор split является бинарным оператором, при
реализации конвейера ему сопоставляется нить, соответствую­
щ ая унарным операциям.
Нульарный оператор scatter извлекает кортеж и из своего вы ­
ходного буфера (склада), вычисляет для них значение ф ункции
пересы лки и пересылает их на соответствующие процессорны е
узлы, используя заданный номер порта обмена. Запись кортежа
в порт может быть завершена только после того, как реципиент
вы полнит операцию чтения из данного порта.
Нульарный оператор gather вы полняет перманентное чтение
кортеж ей из указанного порта обмена со всех процессорны х
узлов, отличных от данного. Считанные кортеж и помещаю тся
в выходной буфер (склад) оператора gather.
Оператор merge определяется как бинарный оператор, который
забирает кортежи из выходных буферов (складов) своих сыновей
и помещ ает их в собственный выходной буфер. П ри использо­
вании модели асинхронного конвейесм. § 4.3) оператору merge
сопоставляется дизъю нктивная нить.
Отличительной особенностью оператора exchange является
то, что он может быть помещ ен в лю бом месте дерева плана вы ­
полнения запроса, н е оказывая при этом никакого влияния на
соседние операции реляционной алгебры. Оператор exchange не
вы полняет никаких эфф ективны х действий с точки зрения р е­
ляционной модели и поэтому на логическом уровне он выглядит
как пустой оператор. Однако на физическом уровне оператор
exchange вы полняет функцию , которую н е может вы полнить
никакая другая реляционная операция, и которая заключается
в перераспределении данных между процессорны ми узлами при
параллельном вы полнении запроса. Таким образом, оператор
обмена exchange инкапсулирует в себе все механизмы, необходи­
мые для реализации фрагментного параллелизма, и обеспечивает
упрощ ение реализации параллельных алгоритмов вы полнения
операций реляционной алгебры.
Глава 6

Модель параллельной системы


баз данных

В этой главе м ы построим формальную модель параллельной


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

§ 6.1. Определения из теории графов

Ориентированным графом называется четверка (V , A ,m it,fm ),


где V —множество верш ин (узлов); A —множество дуг; A ^ V —
ф ункция, определяющая начальную вершину дуги; fin : A ^ V —
ф ункция, определяющая конечную вершину дуги.
Дуга A е A называется петлей, если init(A) = fin(A).
Пусть A е A. Дуга A' е A называется парной по отнош ению к
A , если истинно следующее условие:

(A Ф Л' л init( A) = fin( A') a fin( A) = init( A ')).

Двунаправленным графом называется ориентированный граф,


удовлетворяющий следующим свойствам:

VA е A (—i3A' е A (A Ф A л init (A) = init( A') л fin (A) = fin( A '))),


(6.1)
Глава 6. Модель параллельной системы баз данных 95

VA е A ((init( A) Ф fin( A)

^ (ЗА' е A (A Ф A' л init( A) = fin( A' ) л fin( A) = init( A '))))

Условие (6.1) означает, что для любых двух верш ин V, V е V


не может существовать более одной дуги, у которой начальной
верш иной является V, а конечной — V. Условие (6.2) означает,
что для любой дуги A, не являю щ ейся петлей, существует парная
к ней дуга A', направленная в противоположном направлении.
Д вунаправленный граф без петель будем называть неориенти­
рованным графом или просто —графом. Ребром E будем называть
пару (A, A') такую, что дуга A' является парной по отношению
к дуге A. Две верш ины V и V называю тся смежными, если их
соединяет некоторое ребро E. В этом случае мы будем говорить,
что верш ины V и V инцидентны ребру E. Если V и V являю тся
верш инами и n > 0, то (V0, V1,...,Vn) называется путем длины n
от верш ины V к верш ине V, если V = Vn, верш ина Vk является
смежной для верш ины Vk+1для 0 > k < n, а Vn = V. Путь называется
простым, если различны верш ины V0, V1,..., Vn1 и если различны
верш ины V1,...,Vn1,Vn.
Граф называется связным, если существует путь между любыми
двумя его верш инами. Циклом называется простой путь длной,
большей или равной трем от некоторой верш ины к ней самой.
Граф называется ациклическим, если он не содержит циклов.
Степень вершины графа равна количеству ребер, инцидентных
этой верш ине. Верш ина называется концевой, если она имеет
степень один.

§ 6.2. Модель аппаратной платформы


М ножество модулей многопроцессорной системы разбивается
н а три непересекаю щ ихся подмножества:
M = P u D u N, P n D = 0, P n N = 0, D п N = 0
96 Глава 6. Модель параллельной системы баз данных

Здесь P обозначает множество процессорных модулей, D —


множество дисковых модулей, N —множество модулей сетевых
концентраторов. В модели отсутствуют модули оперативной
памяти, так как с точки зрения прилож ений класса OLTP мы
можем пренебречь существованием процессорных кэш ей раз­
личного уровня и полагать, что каждый процессор имеет встро­
енную оперативную память с однородным доступом, которая
используется для буферизации дисковых страниц.
Определение 7. DM-графом будем называть связны й ацикличе­
ский граф W (M , C), в котором множество ребер E удовлетворяет
следующим ограничениям:

P и D Ф 0, N * 0 (6.3)
! !
^ (init( A) = P a fin ( A) = M ) Y
VP e P VM e M 3E (A , A')e E ■M e N
v (in it( A')= P a fin ( A')= M )
V V
(6.4)
! у
!(in it( A) = D a fin ( A) = M ) Y
Y
VD e D VM e M 3E(A,A’)eE >M e N
' (in it( A')= D a fin ( A')= M )
)
(6.5)
! Y Y
! ( i n i t( A ) = M v i n i t ( A') = M) '
VM e M VE ( A , A ') , E (A , A' ) ^ ( E =E ) ^ (M e D и P )
\ ( i n i t ( A) = M v i n i t ( A') =M )
vv vv У) )
(6.6)

Условие (6.3) означает, что в моделируемой аппаратной плат­


форме должен быть хотя бы один сетевой концентратор и как м и­
нимум один процессор или диск. Условия (6.4) и (6.5) означают,
что процессорны е и дисковы е модули могут соединяться только
с модулями сетевых концентраторов. Условие (6.6) означает, что
в качестве концевых верш ин в DM-графе могут фигурировать
только дисковы е и процессорны е модули. П ример DM-графа
приведен на рис. 27.
Глава 6. Модель параллельной системы баз данных 97

Определение 8. DM-деревом будем назы ­


вать DM-граф, в котором имеется выделен­
ная верш ина N е N , называемая корневым
сетевы м к о н ц е н т р а т о р о м . D M -д ер ево
можно рассматривать как ориентирован­
ное дерево в соответствии со следующим
правилом:

Ребро, инцидентное вершинам M и М', Рис. 27. Пример DM-


заменяем дугой от M к М ' тогда и только графа
P P P3£ P; D
тогда, когда простой путь от M к N про­ D2£ D; Nj, N2£ N)
ходит через М', то есть когда он имеет вид:
(М0, М ,,..,М к), где к > 0, М0 = М, М1 = М', Мк = N .

Это означает, что направления дуг в ориентированном дереве


полностью определяется полож ением корневой верш ины , то
есть их можно не указывать, если корень дерева обозначен. Мы
будем изображать DM-дерево таким образом, чтобы его корень
N располагался сверху, и все дуги были направлены вверх, как
это показано на рис. 28. И с­
пользуя это соглашение, мы
можем н а рисунках стрелки
не указывать.
Уровень узла дерева — это
длина пути от корня до узла.
Уровень корня всегда равен
нулю. Высота h (I) дерева I —
это м аксим альны й уровень
его узлов. m -й ярус дерева —
множество узлов дерева, на
уровне m от к о р н я дерева. Рис. 28. Пример DM-дерева
Узел М ' является сыном узла (Pj, P2£ P; Dp...,D4£ D; N , Nj, N2,
M , тогда и только тогда, ког­ N3£ N)
98 Глава 6. Модель параллельной системы баз данных

да узлы М и M являю тся смежными и уровень М ' н а единицу


больше уровня M.
Определение 9. DM-дерево с высотой H > 0 является регулярным,
если выполняю тся следующие условия:
1) процессорны е и дисковы е модули не могут иметь сы но­
вей, то есть они всегда являю тся листьями (концевыми
узлами);
2) степень любого узла, не являю щ егося листом, больше,
либо равна двум.
Пусть задано регулярное DM -дерево I с корнем N . Пусть
{М ,...,М } — множество узлов 1-го яруса дерева I . Определим
поддерево I M, с корнем в узле M (1 - i —k), конструктивно сле­
дующ им образом:
1) для всех j таких, что 1 - j —k и j ф i, удалить все лстья, и
инцидентные и м ребра, от которых есть путь до корня N ,
им ею щ ий длину больше единицы и проходящ ий через
узел M ;
2) если н а шаге 1 было удалено не менее одного листа, снова
перейти на ш аг 1, в противном случае перейти н а ш аг 3;
3) для всех j таких, что 1 —j —k и j ф i, удалить узел M и и н ­
цидентное ему ребро;
4) удалить узел N и инцидентное ему ребро.
Теорема 2. Пусть задано регулярное DM-дерево I с высотой
H > 2. Пусть {М ,...,М } — множество узлов 1-го яруса дерева I .
Тогда для любого i, 1 —i —k, поддерево I Mi является регулярным
DM-деревом, либо тривиальным деревом, состоящ им из одного
узла М е р и D.
Д о к а з а т е л ь с т в о . Доказательство проведем индукцией
по высоте H дерева I . Пусть H = 2. Пусть {М ,...,М } —множество
узлов 1-го яруса дерева I . Выберем произвольный узел M (1 —i —k).
Рассмотрим сначала случай, когда M. является листом дерева I .
Тогда в силу условия (6.6) имеем М е р и D . Таким образом, для
этого случая теорема верна. Предположим теперь, что M .листом
Глава 6. Модель параллельной системы баз данных 99

не является. Тогда в силу условия 1 из определения 9 имеем


М. е N. Из условия (6.6) следует, что все сыновья M. являю тся
процессорны ми или дисковы ми модулями. Значит I M является
регулярным DM-деревом.
Пусть теперь h(I) > 2. Пусть {М:,...,М к} — множество узлов
1-го яруса дерева I . Выберем из них подмножество {М.,...,
.1 Мln.}
всех узлов таких, что h H - 1. Д ля каждого М. (1 < j < n)
lj
соединим его сыновей ребрами с узлом N , после чего удалим из
1 узел М j. и ребро, соединяю щ ее его с узлом N . Получившееся
дерево обозначим через I '. Очевидно, что I ' будет DM-деревом.
Так как 1 < h(I') < h (I), то по предположению индукции теорема
2 прим еним а к I'. Отсюда следует, что все поддеревья в I 'с вы со­
той больше нуля, корням и которых являются узлы первого яруса,
есть регулярные DM-деревья. Учитывая, что М.j е N (1 < j < n),
получаем: TM —регулярное DM-дерево. Т е о р е м а д о к а з а н а .
Ч
Для регулярных DM-деревьев справедлива следующая теорема.
Теорема 3. Пусть I —регулярное DM-дерево. Тогда h (I) < P и
S |, где р — множество процессорных модулей, D — множество
дисковых модулей дерева I .
Д о к а з а т е л ь с т в о . Доказательство проведем индукцией по
высоте дерева. М инимальное регулярное DM-дерево I (дерево
с минимальной высотой) имеет высоту один (рис. 29). В этом
случае
1 = h (I) < р и S| = 2,

то есть теорема верна.


Теперь рассм отрим случай, когда h (I) > 1.
Пусть {М1,...,Мк} — множество узлов 1-го яруса
дерева I . Выберем узел M (1 < < k ) такой, что Рис. 29. Мини­
мальное ре­
h (IM) = h(I) — 1. В силу теоремы 2 I M^является гулярное DM-
регулярным DM-деревом. По предположению дерево
индукции h ( I M) < р и S| — 1. Отсюда (Рер, DeD)
M
100 Глава 6. Модель параллельной системы баз данных

h ( I = Н(ТМ) + 1 < P и D|.

Теорема доказана.
С каждым DM-деревом I связывается функция трудоемкости
П : M (I) 0, которая определяет время, необходимое узлу для
обработки некоторой порции данных. В качестве такой порции
данных может фигурировать, например, кортеж. Семантика этой
ф ункции будет уточнена в разделе 6.4.
Определение 10. DM -деревья ! 1и I 2называю тся изоморфными,
если существуют взаимно однозначное отображение f множества
узлов M ( I 1) дерева ! 1на множество узлов M ( I 2) дерева I 2 и вза­
им но однозначное отображение g множества ребер E (I1) дерева
! 1н а множество ребер E (I2) дерева I 2 такие, что:
(1) ребро Еинцидентно узлам М и М 'в дереве ! 1тогда и только
тогда, когда ребро g(E) инцидентно узлам f(M) и f(M') в
дереве I 2;
(2) узел M является корнем дерева ! 1 тогда и только тогда,
когда узел f(M) является корнем дерева I 2;
(3) P е P (% ) о f(P ) е P (Т2) ;

(4) D е D (Т г) о f(D ) е D (Т 2) ;

(5) N е N (Гх) о f(N ) е N (Т2) ;

(6) n (f(M )) = n (M ).
Упорядоченную пару отображений q = (f, g) будем называть
изоморфизмом DM -дерева ! 1н а DM -дерево I 2.
Необходимость условия (2) в определении изом орфизм а сле­
дует из примера, показанного н а рис. 30. М ы здесь предполагаем,
что функция трудоемкости для всех узлов выдает значение равное
1. Отображения f и g удовлетворяют всем требованиям изом ор­
физма, кроме условия (2). Однако мы не можем признать q = (f,g)
изом орфизм ом DM -дерева A н а DM -дерево B, так как корневой
узел N 1Aдерева A отображается в узел N 1B, н е являю щ ийся кор­
невы м узлом в дереве B: f (N A) = N Bф N 2b.
Глава 6. Модель параллельной системы баз данных 101

Рис. 30. Пара ото­


бражений q = (f,g), не
являющаяся изомор­
физмом:
f(NA) = N B, f(PA) = P B,
f(DA) = DB, g(eA) = eB

О тметим, что м о ­
дель аппаратной плат­
формы параллельной
системы баз данных представляется в виде регулярного DM-дерева
с точностью до изоморфизма.
Под уровнем поддерева дерева I мы будем понимать уровень
корня этого поддерева в дереве I .
Два поддерева одного уровня называю тся смежными, если их
корни являю тся братьями, то есть в дереве существует узел, я в ­
ляю щ ийся общ им родителем по отношению к корневы м узлам
данных поддеревьев.
Определение 11. Будем называть регулярное DM-дерево I вы ­
соты H > 2 симметричным, если выполняю тся следующие два
условия:
1) любые два смежных поддерева уровня l (0 < l < H) имею т
одинаковую высоту и являю тся изоморфны ми;
2) каждый узел уровня H —1 имеет в точности двух сыновей,
один из которых является процессорны м, а другой д ис­
ковы м модулем.
С имметричны е DM -деревья моделируют достаточно ш и р о ­
к и й класс реальны х м ногопроцессорны х систем и являю тся
м атематическим фундаментом для описания стратегии балан­
сировки загрузки, описы ваем ой в главе 7. Узлы уровня H — 1
в симм етричном DM -дереве представляю т собой абстрактную
м одель S M P -си стем в том см ы сле, что в к о н тек сте м н о го ­
процессорны х иерархий все процессоры SM P-систем ы могут
рассм атриваться как один «мегапроцессор», а все диски —как
102 Глава 6. Модель параллельной системы баз данных

Рис. 31. Минимальное симме­


тричное DM-дерево

один «мегадиск». Д ля сим м е­


тричных DM -деревьев имеет
местол следую щая теорема.
Теорема 4. Пусть I —симме­
тричное DM-дерево с корнем
N . Тогда h ( T ) < log2 ( P |) + 1 , P —множество процессорных
модулей дерева I .
Д о к а з а т е л ь с т в о . Доказательство проведем индукцией
по высоте дерева. Симметричное DM-дерево I с минимальной
высотой изображено н а рис. 31. Пусть к —степень узла N . В этом
случае имеем

h ( T ) = 2 < log2 ( k )+ 1 = log2 ( P | ) + 1 ,


так как к > 2 (по определению регулярности). Таким образом,
база индукции имеет место.
Теперь рассмотрим случай, когда h(I) > 2. Пусть {Мр ...,Мк} —
множество узлов 1-го яруса дерева I . Выберем произвольны й
узел M (1 < i < к). В силу теоремы 2, I M^является симметричным
DM-деревом. По предположению индукции имеем:

h ( T м,) < log 2


( м^ 1 = lo g 2 ( р ) - lo g 2 0 0 + 1 .
Vk J

Так как , отсюда получаем

h(T Mi) < log2 ( р | ) .


Следовательно,

h ( T ) = h (T m ) +1 < log 2 ( P ) + 1 .
Глава 6. Модель параллельной системы баз данных 103

Теорема доказана.
Степенью дерева будем называть степень его корня. В симм е­
тричном дереве T все поддеревья уровня l (0 < l < h(2)) имею т
одинаковую степень, которую мы будем обозначать как Sl и н а ­
зывать степенью уровня l.

§ 6.3. Модель операционной среды

В рамках описываемой модели наименьш ей неделимой еди­


н ицей обработки данны х является пакет. М ы предполагаем,
что все пакеты имею т одинаковы й размер и включают в себя
заголовок и инф ормационную часть. Заголовок, в свою очередь,
включает в себя адрес отправителя, адрес получателя и другую
служебную информацию. Передача пакета может соответствовать
передаче одного или нескольких кортежей в реальной системе
баз данных.
Поскольку в наш ей модели рассматриваю тся только OLTP-
приложения, мы можем пренебречь накладны ми расходами на
обмены между двумя процессорами через общую оперативную
память и затратами н а обработку данных внутри процессоров.
В наш ей модели любой процессорны й модуль может обмени­
ваться данны м и с любым дисковы м модулем. С каждым диско­
вы м модулем и модулем сетевого концентратора ассоциируется
очередь, в которую помещ аю тся пересылаемые пакеты. Модель
допускает асинхронный обмен пакетами в том смысле, что п ро­
цессорны й модуль может инициализировать новы й обмен, не
дожидаясь заверш ения предыдущего. Однако мы предполагаем,
что процессорный модуль может иметь в каждый момент не более
srнезавершенных операций чтения и swнезавершенных операций
записи. Время работы системы в наш ей модели делится н а д ис­
кретны е промежутки, называемые тактами. Такт определяется
как ф иксированная последовательность шагов, семантика кото­
рых будет определена ниже.
104 Глава 6. Модель параллельной системы баз данных

Рис. 32. Алгоритм


чтения пакета про­
цессорным модулем

Д ля п рои зволь­
ного M e M введем
следующие обозна­
чения: F(M) —роди­
тельский модуль узла M, T(M) —поддерево с корнем в верш ине
M.
Процессорный модуль P е P может инициировать операции
чтения и записи пакетов. Определим их семантику следующим
образом.
Операция чтения. Пусть процессорному модулю P требуется
прочитать пакет E с диска D е D . Если процессор P ранее инициа­
лизировал srеще незаверш енных операций чтения, то он перево­
дится в состояние ожидания. Если количество незаверш енных
операций чтения меньше s , то в очередь диска D помещ ается
пакет E с адресом получателя a(E) = P и адресом отправителя
P(E) = D. Н а рис. 32 представлен псевдокод данного алгоритма.
Здесь r(P) —количество незаверш енных операций чтения про­
цессора P, sr —максимальное допустимое число незаверш енных
операций чтения.
Операция записи. Пусть процессорному модулю P требуется за­
писать пакет E н а диск D е D . Н а рис. 33 представлен псевдокод
алгори тм а и н и ц и ­
ирую щ его запись.
Здесь w(P) — коли­
чество незаверш ен­
н ы х о п е р а ц и й за-

Рис. 33. Алгоритм за­


писи пакета процес­
сорным модулем
Глава 6. Модель параллельной системы баз данных 105

Рис. 34. Алгоритм извлечь пакет £ из опереди Hi


пересылки пакета i f a IS} f Т ( Н) th e n
сетевым концентра­ Поместить Е в очередь F ( N ) ;
тором e ls e
Найти максимальное поддерево
U
писи процессора P, дереву r(W),
sw —максимальное содержащее я(£);
допустим ое ч и с ­ if Г( с г { £ ) ) [ 7 t h e n
ло незаверш енных i f nr(£)eF th e n
операций записи. r ( tt( £ ) J— ;
■ fle e
Модуль сетево­ Поместить E ь
го концентратора очередь C t { E ) ;
N е N о су щ еств­ end i f
ляет перманентную tilt
п ередач у п акето в Поместить E в очередь
по соеди н и тель­ Д{Н> ;
end i f
н о й сети, в ы п о л ­ end i f
няя алгоритм, и зо ­
браженный н а рис. 34. Здесь Е —пакет, а(Е) —адресат пакета E,
T(N) —поддерево с корнем N, F(N) —родительский модуль узла
N, P — множество процессорны х модулей, г(Р) — количество
незаверш енных операций чтения процессора P, R( U) —корень
поддерева U.
Дисковый модуль D е D осуществляет перманентное чтение и
запись пакетов, вы полняя алгоритм, изображенный н а рис. 35.
Здесь в(Е) —отправитель пакета, w(P(E)) —количество незавер­
ш енных операций записи отправителя.
В оп и сы ваем ой
м одели процесс
обработки данных

Рис. 35. Алгоритм


обработки пакета
дисковым модулем
106 Глава 6. Модель параллельной системы баз данных

организуется в виде цикла, выполняющ его стандартную после­


довательность шагов, называемую тактом. Такт определяется
как следующая последовательность действий:
каж ды й модуль сетевого кон ц ен тратора обрабаты вает все
пакеты, ожидающие передачи;
каж ды й п роцессорны й модуль вы полняет одну операцию
обмена с дискам и, если только он не находится в состоянии
ожидания заверш ения предыдущей операции;
каждый дисковы й модуль обрабатывает один пакет из своей
очереди.
Очевидно, что в этом случае в очереди любого концентрато­
ра не может одновременно находиться более |P|+ |D | пакетов, в
очереди любого диска —более s y j p | пакетов.

§ 6.4. Стоимостная модель


К ак уже указывалось в параграфе 6.2, с каждым DM-деревом
I связы вается ф ункция трудоемкости n : M (I) 0, которая
определяет время, необходимое узлу для обработки некоторой
порции данных. В качестве такой порции данных может фигури­
ровать, например, кортеж. Так как время обработки процессором
одного пакета для OLTP-прилож ений приблизительно в 105—106
раз меньше, чем время обмена с диском или передачи по сети,
то полагаем
П(Р) = 0, VP е P .
Так как модуль сетевого концентратора за один такт может
передавать несколько пакетов, то для каждого модуля сетевого
концентратора N e N мы вводим функцию помех

I n (mi ) =

Здесь mN обозначает число пакетов, проходящих через N на


/-том такте; 0 < 8N< 1 —масштабирующий коэффициент; tn > 1 —
Глава 6. Модель параллельной системы баз данных 107

пороговое значение (максимальное число одновременно пере­


даваемых пакетов, не вызываю щее замедление работы модуля
сетевого кон ц ен тратора). Таким образом , врем я, требуемое
модулю сетевого концентратора N для вы полнения /-того такта,
вычисляется по формуле

tN = n ( N ) f N(mN), VN 6 N .
Общее время работы системы, затраченное на обработку смеси
транзакций в течении k тактов, вычисляется по формуле

§ 6.5. Модель транзакций


Последовательная транзакция —это транзакция, которая вы ­
полняется н а одном процессорном модуле. Последовательная
транзакция Z моделируется путем задания двух групп процессов
р и ю: Z = {р, ю}, р и ю ф 0 . Группа р вклю чает в себя читающие
процессы, группа ю — пишущие процессы. П роцессы абстраги­
руют операции ч тен и я/зап и си , вы полняем ы е п р и обработке
транзакций.
Д ля каждого читающего и пишущего процесса задается коли­
чество обращений к диску, которое он должен произвести. После
того, как процесс выполнил все обращения, он удаляется из м но­
жества р или ю соответственно. Транзакция Z = {р, ю} считается
заверш енной, когда р и ю ф 0 .
В рассматриваемой модели каждая транзакция Z = {р, ю} раз­
бивается на конечную последовательность шагов: Zp ...,Z. Здесь s
обозначает количество шагов транзакции. В соответствии с этим,
каждый процесс x е р и ю транзакции Z разбивается н а s шагов:
xp ...,xs. Каждый ш аг х (/ = 1,...,s) описывается тройкой чисел (n,,
p,, d ), где d . —номер диска, с которым процесс х обменивается
данны м и н а /-том шаге; n . — количество обращ ений к диску;
108 Глава 6. Модель параллельной системы баз данных

p — вероятность обращ ения процесса x к диску D н а каждом


такте работы эмулятора в течении i-го шага.
Рассмотрим следующий пример. Пусть транзакция Z = {р, ю}
представляет собой хеш-соединение двух отношений. Допустим,
что опорное отнош ение занимает 10 блоков и может быть цели­
ком размещ ено в оперативной памяти, тестируемое отнош ение
занимает 10 000 блоков. Пусть результат составляет 1000 блоков.
Предположим, что исходные отнош ения хранятся н а диске D5;
результат записывается также н а D5. В этом случае транзакция Z
разбивается на два шага: н а первом шаге строится хеш -таблица
для опорного отнош ения (читающий процесс а); на втором шаге
происходит сканирование тестируемого отнош ения (читающий
процесс b) и сохранение результата н а диске (пиш ущ ий процесс
с). Таким образом, множество читающих процессов имеет вид
р = {a, b}, множество пиш ущ их процессов — ю = {с}. Каждый
процесс разлагается на два последовательных шага.
Для читающего процесса а разложение имеет вид: а = {а1, а2},
где а1= (10, 1,5), а2= (0, 1,5). На первом шаге процесс а выполняет
десять обращ ений к диску D5с вероятностью равной 1. Этот шаг
моделирует построение хеш -таблицы в оперативной памяти. На
втором шаге процесс а не вы полняет обращ ений к диску.
Для читающего процесса b разложение имеет вид: b = {bv b2},
где bl = (0, 1,5), b2= (10000, 1,5). Н а первом шаге процесс b не вы ­
полняет обращений к диску. На втором шаге процесс b выполняет
10000 обращ ений к диску D5с вероятностью, равной 1. Этот шаг
моделирует сканирование тестируемого отношения.
Для пишущего процесса с разложение имеет вид: с = {ср с2},
где с1= (0, 1,5), с2= (1000,0.1,5). Н а первом шаге процесс с не вы ­
полняет обращений к диску. На втором шаге процесс с выполняет
1000 обращ ений к диску D5. П ри этом н а каждом такте работы
эмулятора вероятность обращ ения к диску равна 0,1. Последнее
число получается как результат деления количества блоков ре­
зультирующего отнош ения на количество блоков тестируемого
отнош ения. М ы предполагаем здесь, что значения атрибута со­
Глава 6. Модель параллельной системы баз данных 109

единения распределены равномерно. Для моделирования случая


неравномерного распределения (например, по правилу «80—20»)
необходимо использовать большее количество шагов.
Параллельная транзакция — это транзакция, для вы полнения
которой использую тся два или более процессорны х модулей.
Параллельная транзакция Z, вы полняем ая н а l процессорных
модулях, моделируется путем задания l последовательных тран­
закций Z ,...,Z , каждая из которых выполняется н а отдельном
процессорном модуле. Таким образом, м ы можем считать, что в
системе вы полняю тся только последовательные транзакции.
Опиш ем алгоритм, моделирую щ ий вы полнение отдельной
транзакции н а процессорном модуле. Пусть задана транзакция
Z = {р, ю}, состоящ ая из s шагов: Zp ...,Z . Обозначим через X
множество всех читающих и пишущих процессов, составляющих
транзакцию Z: X = р и ю. Пусть X = {x\...,Z}. Каждый процесс
xj (j = 1,...,r) делится н а s шагов: x {, x Js . Пусть вы полнение
транзакции Z находится н а /-том шаге. Предположим, что п ро­
цесс xj получил управление. Пусть /-тый шаг процесса xj имеет вид
x j = (n j, p j , d j ) . Предполагается, что процесс xj может получить
управление на /-том шаге только в случае п/ > 0 . Тогда на текущем
такте вы полняется следующая последовательность действий.
1. Значение п/ уменьшается н а единицу.
2. Процесс X инициирует операцию обмена с диском, им ею ­
щ им номер d j .
3. Если ^ nj = 0 и / < s, то увеличить / (номер текущего ш ага
транзакции) н а единицу.
Состояние ni = 0 соответствует завершению /-того шага про­

цесса xj. С остояние ^ nj = 0 соответствует заверш ению /-того


j=1
ш ага транзакции Z. Таким образом, переход вы полнения тран­
закции н а ш аг /+1 происходит только тогда, когда все входящие
в нее процессы заверш или вы полнение /-того шага.
110 Глава 6. Модель параллельной системы баз данных

Описываемая модель допускает выполнение н а одном процес­


соре смеси последовательных транзакций {Z\i = 1,...,k} в режиме
разделения времени. П ри этом каждая транзакция Z (i = 1,...,k)
представляется своей собственной п арой групп читаю щ их и
пиш ущ их процессов: Z = {рг, ю'}. Все множество процессов,
моделирующ их вы полнение смеси транзакций н а некотором
процессоре P е р определяется следующим образом:

ф р = U (р! и ю ) .
i=1
П ри этом, п ри запуске новой транзакции н а процессоре P ,
в множество Ф^ динамически добавляются читающие и пишущие
процессы, представляющ ие данную транзакцию . Если какой-
либо процесс завершается, то он удаляется из множества Ф г
Рассмотрим, как в модели организуется вы полнение смеси
транзакций Ф^ н а некотором процессоре P. При этом мы предпо­
лагаем, что процессор P не находится в состоянии ожидания (см.
§ 6.3). На каждом такте работы эмулятора процессор P должен
инициализировать одну операцию обмена с дисками. В соот­
ветствии с этим, процессор должен выбрать некоторы й процесс
х е Ф и произвести операцию чтения с диска или записи на
диск, ассоциированны й с х н а текущ ем шаге. М ы будем н а ­
зывать такой процесс активным . Все процессы и з множества Ф
организуются в список. Вводится указатель н а текущ ий элемент
списка (его начальная позиция может быть произвольной). Для
определения активного процесса используется алгоритм, и зо ­
браженный н а рис. 36. Здесь р —множество всех процессорных
модулей DM-дерева; s(x) —общее количество шагов процесса х;
n(x,i) — количество обращ ений к диску, которые осталось вы ­
полнить процессу х на шаге i; p(x,i) — вероятность обращ ения
процесса х к диску при вы полнении i-го шага; g —функция сра­
батывания, вычисляемая следующим образом. Для каждого шага
i процесса х е Ф известна вероятность p i обращ ения процесса
Глава 6. Модель параллельной системы баз данных 111

for . : ■ : ■: ; : . ; ::*i) ■. //Цикл г:о процессорам


prob « 0,J I ! Суммарная вероятность
fo r {X- Р. Фrbtqin С) : К !- P ,^.4fidU ; й++| 1//ЦИМ no npctuccu
i f -in (к, t I> ]) 0> continu*;
ргой +- p (кнi (к) J /
i f ig(prob)) return к;
If

Рис. 36. Процедура выбора активного процесса х

x к диску, ассоциированном у с этим G 1 0


п р о ц ессо м н а /-том ш аге. Ф у н кц и я
P pi 1- p i
срабатывания g (p i ) = G определяется
как функция дискретной случайной величины G, закон распре­
деления которой задан в приведенной таблице:

Пример формирования транзакций


Рассмотрим ф ормирование транзакций в наш ей модели на
примере алгоритма M H J (Main memory Hash Join) — соединение
хешированием в основной памяти. Д анны й алгоритм интенсивно
используется в современных СУБД при обработке запросов в
тех случаях, когда одно из соединяемых отнош ений целиком
помещ ается в оперативной памяти. Алгоритм M H J делится на
фазы построения и сравнения.
Н а фазе построения строится хеш -таблица опорного отнош е­
ни я R в оперативной памяти. П ри этом каждый процессорны й
узел вы полняет следующие операции:
1. П окортеж ное скан и р о ван и е своего ф рагм ента о тн о ­
ш ения R . Д ля каждого кортеж а вы числяется значение
ф ункции пересы лки у , вы рабаты ваю щ ей ном ер узла-
п р и е м н и к а д ан н о го кортеж а. К ортеж п ередается н а
узел-прием ник.
2. Строится хеш -таблица в оперативной пам яти при п о ­
м ощ и ф ункции хеш ирования h (t ), используя кортеж и,
переданные ему н а шаге 1.
112 Глава 6. Модель параллельной системы баз данных

Рис. 37. Параллельный план

Н а фазе сравнения вы полняется


обработка тестируемого отнош е­
н и я S и соединение с кортеж ам и
отнош ения R. П ри этом каж ды й
процессорны й узел вы полняет сле­
дующие операции:
1. Выполняет покортеж ное сканирование своего фрагмента
отнош ения S. Д ля каждого кортеж а вычисляется значе­
ние ф ункции пересы лки у . Кортеж передается н а узел­
приемник.
2. П ринимает переданный ему н а шаге 1 кортеж и выполняет
соединение с кортежами из хеш-таблицы, построенной на
ш аге 2 фазы распределения. Формирует результирующий
кортеж.
Перераспределение кортежей между процессорны ми узлами
н а каждой фазе алгоритма осуществляет оператор exchange. На
рис. 37 представлен параллельный планявы полнения запроса,
использую щ ий операцию MHJ. Оператор scan вы полняет ска­
нирование отношения. Оператор exchange вставляется в качестве
левого и правого сыновей оператора M H Jи в процессе обработки
запроса вы полняет перераспределение кортежей, поступающих
от оператора scan , между процессорны ми узлами.
Пусть нам необходимо сформировать модель параллельной
транзакции, представляю щ ей собой естественное соединение
двух отнош ений R и S по общему атрибуту A. М ы предполагаем,
что значения атрибута A равном ерно распределены по ф раг­
м ентам отнош ений R и S . Д ля обоих отнош ений мы вводим
коэф ф ициент перекоса ц, в соответствии с которы м кортеж и
подразделяются н а два класса: «свои» и «чужие». К оэф ф ици­
ент ц указывает долю «своих» кортежей во фрагменте. «Свои»
кортеж и долж ны быть обработаны н а своем вычислительном
Глава 6. Модель параллельной системы баз данных 113

узле. «Чужие» должны быть переданы для обработки н а другие


вычислительные узлы на основе равномерного распределения.
Например, при ц = 0.5 отнош ение формируется таким образом,
что каждый параллельный агент при вы полнении соединения
передает своим контрагентам по сети около 50% кортежей из
своего фрагмента. П ри этом все контрагенты получат примерно
одинаковое количество кортежей.
М ы предполагаем, что отнош ение R разбивается н а равнове­
ликие фрагменты R (i = 0 ,...,N — 1), каждый из которых хранится
на отдельном процессорном узле, ном ер которого совпадает с
ном ером фрагмента. П ри этом лю бой фрагм ент Rk может быть
целиком разм ещ ен в оперативной пам яти вы числительного
узла. А налогично, S разбивается н а равновеликие фрагменты
S.(i = 0 ,...,N — 1), каж ды й из которых хранится н а отдельном
процессорном узле, номер которого также совпадает с номером
фрагмента. Параллельная транзакция представляется как сово­
купность однотипных последовательных транзакций, каждая из
которых выполняется на отдельной вычислительном узле. Пусть
н а нулевом вы числительном узле (в контексте рис. 37) вы пол­
няется такая последовательная транзакция Z = {p}. Транзакция
Z и, соответственно, все входящ ие в нее процессы разбиваю тся
н а два шага. П ервый шаг моделирует фазу построения, второй —
фазу сравнения.
М ножество читаю щ их процессов транзакции Z им еет вид:
р = {a°,...,aN-1, b0,...,bN-1}. П роцессы a0,...,aN-1 соответствуют фазе
построения. Процесс a0 моделирует чтение «своих» кортеж ей
отнош ения R со своего диска D0. Он состоит из двух шагов:
a 0 = {a0, a °) , где

a«0 (0, 0, 0).


114 Глава 6. Модель параллельной системы баз данных

П роцессы aj(j = 1,...,N — 1) моделируют чтение «своих» корте­


ж ей отнош ения R с чужих дисков. Каждый такой процесс также
состоит из двух шагов: a J = {aj , a j } , где

- = ( (1 - ц ) | R | (1 - ц ) .1
ai [ N 2- N ’ (N - 1)’J J ’

4 = (0’0’ Л-

П роцессы b0,...,bN-1 соответствуют фазе сравнения. Процесс


b0 моделирует чтение «своих» кортежей отнош ения S со своего
диска D0. Он состоит из двух шагов: b0 = {b10,b20} , где

bi0 (0, 0, 0),

ь0

П роцессы bj(j = 1,...,N — 1) моделируют чтение «своих» корте­


ж ей отнош ения S с чужих дисков. Каждый такой процесс также
состоит из двух шагов: b = {bj, bj } , где

bJ = {0,0,0},
ь- ( (1 - ц ) | S | (1 - ц ) .1
b2 [ N 2 - N ’ (N - 1),J J '
Аналогичным образом формируются транзакции, вы полняе­
мые на остальных процессорных узлах.
Глава 7

Балансировка загрузки

К ак уже указывалось в § 3.2, балансировка загрузки процессо­


ров является одной из ключевых проблем для обеспечения вы со­
кой эффективности параллельной обработки запросов. Н смотря
на то, что все агенты параллельного плана имею т одинаковую
структуру, время их работы может существенно различаться. Это
связано с тем, что различные фрагменты отнош ения могут иметь
различны е размеры. Вернемся к примеру 1 из § 1.5, в котором
необходимо было найти имена всех поставщ иков, зарегистри­
рованных в М оскве. В этом примере мы разбивали отнош ение
П н а 10 фрагментов. М ожет случиться так, что 80% записей п о ­
ставщ иков попадет во фрагмент П 0. Такая ситуация называется
перекосом данных. Тогда агент A0, обрабатывающий этот ф раг­
мент, будет работать в несколько раз дольше, чем все остальные
агенты. Время обработки запроса параллельными агентами будет
равно времени работы самого медленного агента, поэтому уско­
рение, которое мы получим в этом случае будет составлять всего
1.25 вместо ожидаемого 10! В этой главе м ы рассмотрим метод
балансировки загрузки процессоров в условиях перекоса данных.
Этот метод базируются на понятиях сегментации и репликации
данных, которым посвящ ен следующий параграф.

§ 7.1. Сегментация и репликация данных


П ри использовании фрагментного параллелизма каждое от­
нош ение разбивается на непересекаю щ иеся горизонтальны е
фрагменты, которые размещ аются на различных процессорных
узлах (серверах) многопроцессорной системы. М ы будем предпо­
лагать, что кортежи фрагмента некоторым образом упорядочены,
116 Глава 7. Балансировка загрузки

что этот порядок ф иксирован для каждого запроса и определяет


последовательность считывания кортеж ей в операции сканиро­
вания фрагмента. М ы будем называть этот порядок естествен­
ным. Н а практике естественный порядок может определяться
ф изическим порядком следования кортежей или индексом.
Каждый фрагмент н а логическом уровне разбивается на после­
довательность сегментов ф иксированной длины. Длина сегмента
изм еряется в кортежах и является атрибутом фрагмента. Раз­
биение на сегменты выполняется в соответствии с естественным
порядком и всегда начинается с первого кортежа. е связи с этимм
последний сегмент фрагмента может оказаться неполным.
Количество сегментов фрагмента F обозначается как S(F) и
может быть вычислено по формуле
T (F )
S (F ) = (7.1)
Lf
Здесь T(F) обозначает количество кортеж ей во фрагменте F,
L f —длину сегмента фрагмента F.
Пусть фрагмент F располагается н а дисковом модуле d. е D(T)
( i= 0,...,k —1) многопроцессорной системы Т. М ы полагаем, что
на каждом дисковом модуле d e D (T) (j= 0,...,k —1) располагается
частичная реплика F / , вклю чаю щ ая в себя некоторое подм но­
жество (возможно пустое) кортежей фрагмента F.. П ри этом мы
всегда будем полагать Fi = F'! .
Н аименьш ей единицей репликации данных является сегмент.
Д лина сегмента реплики всегда совпадает с длиной сегмента
реплицируемого фрагмента:

LFj = LFj, Vi, j e { 0 ,..., k - 1 } .

Для простоты излож ения мы будем в дальнейш ем полагать,


что длина сегмента у всех фрагментов одинакова:
LFj = L, Vi, j e{0,..., k -1}. (7.2)
Глава 7. Балансировка загрузки 117

Тогда размер реплики F / вычисляется по формуле

T(F / ) = T ( F ) - [(1 - p (i, j ))• S ( F )] •L , (7.3)

где p : {0,...,k — 1} x {0,...,k — 1} ^ [0; 1] — функция репликации,


определяю щ ая с точностью до сегмента размер реплики /-го
фрагмента н а у-том процессорном узле.
Естественный порядок кортеж ей реплики Ftj определяется
естественным порядком кортежей фрагмента F.. П ри этом номер
N первого кортежа реплики F вычисляется по формуле

N (F j = T (j j ) - T(F j ) + 1 .

Д ля пустой реплики F / будем иметь N ( F/ ) = T ( Ft) + 1 , что


соответствует позиции специального кортежа EOF «конец ф раг­
мента».
В заключение этого параграфа отметим, чтвие соответствии с
допущ ением , формула преобразуется к виду
T (F )
S (F ) = (7.4)
L

§ 7.2. Зеркалирование в симметричных


DM-деревьях
Симметричные DM-деревья хорошо подходят для моделирова­
ни я современных кластерных вычислительных систем, которые
сочетают в себе многоуровневую (иерархическую) организацию
со структурной однородностью процессорных узлов. В этом п а ­
раграфе мы рассмотрим методы репликации (зеркалирования)
данных применительно к симметричным DM-деревьям.
Пусть задано симметричное DM-дерево T высоты H = h(T) > 1.
Ф ункцию р : {0,...,H — 1} ^ [0; 1], удовлетворяющую условию
р (Н — 1) = 1, будем называть функциейзеркалирования для дерева
118 Глава 7. Балансировка загрузки

T. Пусть фрагмент Ft = F! располагается н а диске d . е D(T). Мы


будем использовать следующий метод для построения реплики
F '/ н а диске d .e D (T) (i ф j), называемый методом частичного
зеркалирования.
Построим последовательность поддеревьев дерева T
[M0,Ml,...,MH_2], (7.5)
обладающую следующими свойствами:

для всех 0 < х < H —2. Здесь A(Mx) обозначает уровень поддерева
Mx. Д ля любого симметричного дерева T существует только одна
такая последовательность. Действительно, предположим против­
ное, то есть, что существуют две различные последовательности
{М0,...,М Н_2} и {М'0,...,М 'Н2}, такие, что:

Га (M x ) = x и Га.(MX) = x
U 6 D ( M x) { d ; 6 D ( M'x)

Тогда в дереве T сущ ествую т два различны х собственны х


поддерева одного уровня Mx и M'x, им ею щ ие общ ий лист d..
Следовательно, существует два различны х ориентированны х
пути от d к корню дерева T , что противоречит определению
ориентированного дерева.
Найдем наибольш ий индекс х > 1 такой, что

И , d j } с D ( M x) .

Мы полагаем
Р( i j ) = Ц(х). (7.7)

Для ф ормирования реплики F '/ н а диске dj мы используем


метод, описанны й в параграф е 7.1 с ф ункцией репликации,
определяемой по формуле (7.7).
Глава 7. Балансировка загрузки 119

Следующая теорема дает оценку для размера реплики.


Теорема 5. Пусть T —симм етричное DM-дерево вы соты H =
= h(T) > 0. Пусть ф рагмент F. располагается н а диске d . е D ( T).
Пусть M — поддерево дерева T такое, что 1 < X(M) < H — 1 и
d . е D (M ). Пусть M ' — произвольное смеж ное с M поддерево
дерева T. Тогда для любого d. е D (M ') справедлива следующая
оценка для размера реплики F / фрагмента F , разм ещ енной
н а диске d:

T (F / ) = ц(! (M ) - 1 ) T ( F ) + O ( L ) ,

где L —длина сегмента.


Д о к а з а т е л ь с т в о . В со о тветстви и с ф орм улой (7.3),
имеем
т ( F J)= t (f ) - [ ( 1 - Г (;, j ))• s (f )]• l .

Отсюда получаем

T (F j )= T ( F ) -(1 - Г (;, j ) ) S ( F ;) •L + O ( L ) . (7.8)

Так как d . е D (M ), d. е D (M ') и поддеревья M и M ' являю тся


смежными, то минимальное поддерево Mi , содержащее диски
d .и d, будет иметь уровень А,(МГ) = А,(М) - 1 . Тогда в соответствии
с (7.7), получаем р( /, j) = ^(A.(M) — 1). Подставив это значение в
(7.8), будем иметь

T ( F/ ) = T ( F ) - ( 1 - ц ( Х ( M ) - 1 ) } S ( F ) •L + O (L ) .

Подставив вместо S(F) значение из (7.4), получим

T(Fo)
T (F j )= T (F )-(1 - ц ( Ц М ) - 1 ) ) L + O(L )
L( Fo)
T (Fi)
= T(F;) - ( 1 - ц ( Ц М ) - 1 ) ) ;1 •L + O (L)
120 Глава 7. Балансировка загрузки

= T ( F ) - ( 1 - ц ( М М ) - 1 ))T (F ) + 0 ( L )
= ^ ( Ц M ) -1 )T ( Fi) + 0 ( L ).

Теорема доказана.
Заметим, что размер сегмента L является параметром реплика­
ц и и и не связан с фрагментацией базы данных. Таким образом,
мы можем считать, что L является константой, значение которой
мало относительно общего размера базы данных, и им можно
пренебречь.
О ценка суммарного размера всех реплик фрагмента может
быть получена с помощ ью следующей теоремы.
Теорема 6. Пусть T —симметричное DM-дерево высоты H > 2.
Пусть фрагмент F. располагается на диске d е D (T). Обозначим
степень уровня l дерева T как 8Г Обозначим R( F ) = ^ T( F/ ) —
j *i
суммарное количество кортежей во всех репликах фрагмента Fi.
Тогда

R ( F ) = T(Fi) X Ц(/)(5, -1 ) П Sk + 0 ( L ) . (7.9)


l=0 k=l+1
Д о к а з а т е л ь с т в о . Доказательство проведем индукцией
по высоте H дерева T .
Пусть H = 2. Тогда число дисков в дереве T равно 50. В соот­
ветствии с теорем ой 5, им еем T ( F j ) = p ( 0 )T ( F ) + 0 ( L ) . Сле­
довательно, суммарное количество кортежей во всех репликах
фрагмента F имеет следующую оценку

R( F ) = ( T ( F V ( 0 ) + 0 (L ))- ( s о - 1) (710)
= T ( F ) ц ( 0 )(5 о - 1 ) + 0 ( L )

что согласуется с формулой (7.9) при H = 2.


Пусть H > 2. Тогда дерево T содержит 80 поддеревьев высоты
H - 1:
Глава 7. Балансировка загрузки 121

М 0, М 1г. .., М 5о_! .


О бозначим через Rx(F) суммарное количество кортеж ей во
всех репликах фрагмента F, расположенных н а всех дисках под­
дерева M . М ы имеем
x 5-1
R ( F ) = X R x(F ) . (7.11)
x=0
Без ограничения общ ности мы можем считать, что d . е D (M0).
Тогда в силу симметричности дерева T из (7.11) получаем
R(F) = Ro(F) + (5о - 1) В Д ) . (7.12)
В соответствии с теоремой 5, любая реплика F / , располагаю ­
щ аяся в поддереве M , имеет следующий размер

T(F / ) = p ( 0 )T ( F ) + 0 ( L ) . (7.13)

В силу симметричности дерева T , суммарное количество дисков


H-2
в поддереве M { равно n 5 k . Учитывая этот факт, из (7.13) по-
к=1
лучаем
R i( F ) = Ц (0 )T ( i t ) П 5 , + 0 ( L ) . (7.14)
к=1

С другой стороны, по предположению индукции имеем

R 0 ( F ) = T ( F ) Z V ( /) ( 8 , - 1 ) П 5k + 0 ( L ) . (7.15)
/=1 k=l+1

Подставляя в (7.12) значения правых частей из (7.14) и (7.15),


имеем

R ( F ) = T(F t ) X Ц(/) П + (§0 - 1)И (0 )T (Ft ) f [ 5* + 0 ( L )


/=1 k = /+1 k=1

= T ( F ) X ИQ)(5 - - 1 ) П 5 k + 10 (L )■
/= 0 k = /+ 1

Теорема доказана.
122 Глава 7. Балансировка загрузки

§ 7.3. Функция зеркалирования


При определении функции зеркалирования р(/) целесообразно
учитывать значения функции трудоемкости для узлов DM-дерева.
Очевидно, что в симметричном DM-дереве все верш ины уровня
/ имею т одинаковую трудоемкость п(/), которую м ы будем н а ­
зывать трудоемкостью уровня /.
Назовем симметричное DM-дерево T правильно нагруженным,
если для любых двух уровней / и /' дерева T справедливо
l <V ^ n(l) > ц(Г ) , (7.16)
то есть, чем выше уровень в иерархии, тем больше его трудоем­
кость.
Следующая теорема позволяет получить оценку трудоемкости
покортежного формирования реплики в правильно нагруженном
DM-дереве.
Теорема 7. Пусть T —правильно нагруженное симметричное
DM-дерево высоты H. Пусть фрагмент F располагается н а диске
D .е D (T). Пусть M поддерево дерева T такое, что 1 < X(M) < H — 1
и D .е D(M ). Пусть M ' —п роизвольное см еж ное с M поддерево
дерева T; F / — реп л и ка ф рагм ента F , разм ещ енная н а д и с ­
ке Dj е D(M '). Обозначим x(F / ) —трудоемкость покортежного

ф ормирования реплики F / при отсутствии помех. Тогда

x(F / ) = п (X (М ) - 1 ).ц ( I (М ) - 1 ) T (F ) + 0 ( п о ) ,

где п 0 = п(0) —коэф ф ициент трудоемкости корня дерева T.


Доказательство. Организуем конвейерную передачу кортежей
с диска D . е D(M ) н а диск Dj е D (M ') в соответствии с моделью
операционной среды, оп и сан н ой в параграф е 6.3. Скорость
работы конвейера определяется самым медленны м узлом. Так
как M и M ' являю тся смеж ны ми поддеревьями, их корневы е
узлы имею т общего родителя уровня X(M) — 1, которы й в соот­
Глава 7. Балансировка загрузки 123

ветствии с (7.16), и будет самы м медленны м звеном конвейера.


С ледовательно, трудоемкость передачи одного кортеж а при
полностью запущ енном конвейере равна r(X (M ) — 1). Отсюда

x (F / ) = n (Х (И ) - 1)T( F / ) + О (п (Х (И ) - 1 ) ) . (7.17)

Здесь O (r (X(M) — 1)) обозначает верхнюю границу для врем е­


ни, необходимого для полного «разгона» конвейера в предпо­
ложении, что высота дерева T является константой.
Так как T правильно нагруженное, то r(X(M ) — 1) < r 0. На
основании этого из (7.17) получаем

т( F i ) = n (1(И ) - 1 ) T( F / ) + О( п о ) . (7.18)

По теореме 5 из формулы (7.18) получаем

т( F/ )= п (Х (И ) - 1> ц (Х (И ) - 1)T (F ) + О ( п о)О (Ь ) + О ( п о ) . (7.19)

Так как длина L сегмента не меняется в процессе формирова­


ни я реплики, из (7.19) получаем

т (F/ ) = n (X(И ) - 1>ц (X(И ) -1 ) T (Ft ) + О ( г )+ О (п о)


= r(X (И ) - 1>ц(Х (И ) - 1 ) T (F )+ О (п о).

Теорема доказана.
Оценка трудоемкости покортежного ф ормирования всех р е­
плик фрагмента без учета помех может быть получена с помощью
следующей теоремы.
Теорема 8. Пусть T —правильно нагруж енное симметричное
DM -дерево вы соты H. Пусть ф рагм ент F. р асп олагается н а
диске D. ! D (T). О бозначим степень уровня l дерева T как 8Г
О бозначим t( F ) = ^ x ( F J) — сумм арную трудоем кость п о -

кортеж ного ф орм ирования всех реплик фрагмента F без учета


помех. Тогда
124 Глава 7. Балансировка загрузки

t( F ) = T ( F ) £ п ( ' М ' ) ( 8 , - 1 ) П 8. + О (п о ) . (7.20)


l=0 k=l+\

Д о к а з а т е л ь с т в о . Доказательство проведем индукцией по


высоте H дерева T.
Пусть H = 2. Тогда число дисков в дереве T равно 50. В соответ­
ствии с теоремой 7, трудоемкость покортежного формирования
любой реплики F / фрагмента F в этом случае имеет следующую
оценку:

т( F/ ) = n ( 0 ) - р ( 0 )T (F / )+ О (по) .

Следовательно, суммарная трудоемкость покортежного ф ор­


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

T(F) = п (0) р (о)T ( F )(5о - \ )+ О (по) ,

что согласуется с формулой (7.20) при H = 2.


Пусть H > 2. Тогда дерево T содержит 50 поддеревьев высоты
H - 1:
м о , м \ , . . . , М 5о- \ .

Обозначим через tx(F ) суммарную трудоемкость ф ормирова­


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

T (F ) = z 4 ( F ) . (7.21)
х=о
Без ограничения общности мы можем считать, что D . е D (M ) и
i ф 0. Тогда в силу симметричности дерева T из (7.21) получаем
T (F ) = т , F ) + (5о- \ K ( F ) . (7.22)

В соответствии с теоремой 7, для лю бой реплики F / , рас­


полагаю щ ейся в поддереве M 0, имеем
Глава 7. Балансировка загрузки 125

т( F / ) = Л(0)Ц (0 )T (F ) + О ( п 0) . (7.23)

В силу симметричности дерева T, суммарное количество дисков


H-2
в поддереве M равно П « к . Учитывая этот факт и (7.23), имеем
к=1

т000) = п(0)ц (0)Т ( 0 ) 0 +'О О ) . (7.24)


l=1
С другой стороны, по предположению индукции имеем

т ( F ) = т ( f ) Z n (i ) p ( i )(5, - 1 ) П « к + о ( п 0) . (7.25)
l=1 к=1+1

Подставляя в (7.22) значения правых частей из (7.24) и (7.25),


имеем
H- 2 н- 2 H —2

T(F) = т ( F ) £ п ( 1 )(5 i - 1 ) П « к + («0- 1)п(0) р( 0) т ( F ) П « +


l=1 к=l+1 l=1

+о(п0 ) = Т (F ) X n ( l ) ( « , - 1 ) П « к + О (п0).
l= 0 к=l+1

Теорема доказана.
Определим рекурсивно нормальную функцию зеркалирования
р(/) следующим образом:
1 ;
1) для l = H —2: р( H - 2)
=p ( H - 2 )(5 h-2 - 1 ) ;
n ( l + !)(8l+1 - ! ) p ( l + ! )
2) для 0 < l < H —2: p(l) =
n ( l )(Sl - 1)Sl+1
Докаж ем следующую лемму.
Лемма 1. Нормальную функцию зеркалирования можно пред­
ставить в виде:
1 (7.26)
p(l) =
n ( l ) ( « - 1 ) П H=-+1«к

если определить П к=Н-1«к := 1.


126 Глава 7. Балансировка загрузки

Д о к а з а т е л ь с т в о . Пусть l = H — 2. Тогда из (7.26) п о ­


лучаем:

К Н - 2) = ' ------- р т - ,
п ( Н _ 2 )(5 Я_2 - 1) 1
что согласуется с определением норм альной ф ункции зеркали­
рования.
Пусть l < H —2. Тогда, по определению, нормальная функция
зеркалирования будет иметь вид:

Вместе с этим, по предположению индукции имеем:

Подставляя значение ф ункции ц(1 + 1) из (7.28) в (7.27) п о ­


лучаем:

Ц(0 = П(1 + 1)(5-+ _ 1Т — = - ,


+ 1)(S,.,_ 1)n(l)(S,_ 1)5„ЛН_.225. n(l)(S,_ О П . Н Н А
что полностью согласуется с ф ормулой (7.26). Л е м м а д о ­
казана.
Справедлива следующая теорема.
Теорема 9. Пусть T —правильно нагруженное симметричное
DM -дерево вы соты H > 2. Пусть F — множество фрагментов,
составляющих базу данных. Пусть R — множество всех реплик
всех фрагментов из множества F, построенных с использова­
нием норм альной ф ункции зеркалирования. Пусть T(F) —раз­
мер базы данных в кортежах (здесь мы предполагаем, что все
кортеж и имею т одинаковую длину в байтах), t (R) —суммарная
трудоемкость покортежного формирования всех реплик без учета
помех. Тогда
Глава 7. Балансировка загрузки 127

t (R ) ~ kT(F),
где k —некоторая константа, не зависящ ая от F.
Д о к а з а т е л ь с т в о . Пусть база данных состоит из m ф раг­
ментов. Пусть t (R ) = ^ m 1T(Fi) — суммарная трудоемкость по-
кортежного ф ормирования всех реплик без учета помех. В соот­
ветствии с теоремой 8, имеем:

t ( F ) = т ( F ) Х п (/)ц (/)(5 , - 1 ) П 5* + 0 (п о ) . (7.29)


i= o

Воспользуемся леммой 1. Подставляя в (7.29) значение н о р ­


мальной ф ункции зеркалирования из (7.26) получаем:

т( F ) =т ( F ) " f ( уб ^ П ^ 6 П 6 *+ 0 (п о) =

=т(F ')£ (l
i=on(1)
)(
П6i
6('-)((
6)П
)П (s)-+
=i16
(6*кП=l+(6•+0(hо)=т !0
1= т
= (H -2)т(F)+0(no).
Таким образом:

t ( r ) = х : ; (к н - 2)т (f ) + ° ( ч о ) ] = ( н - 2) х : ; ' т ( т )+

+ m O ( n 0) = ( H - 2 ) • т ( Е ) + m 0 ( n 0) ~ к т(Е ).

где k не зависит от F . Т е о р е м а д о к а з а н а .
Д анная теорема показывает, что при использовании норм аль­
ной ф ункции зеркалирования трудоемкость обновления реплик
в правильно нагруженной симметричной многопроцессорной
иерархической системе пропорциональна размеру обновляемой
части базы данных при условии, что соединительная сеть обла­
дает достаточной пропускной способностью.
128 Глава 7. Балансировка загрузки

§ 7.4. Алгоритм балансировки загрузки


Пусть задан некоторы й запрос Q, им ею щ ий n входных отно­
ш ений. Пусть Q —параллельный план запроса Q. Каждый агент
Q ! Q имеет n входных потоков sp ...,sn. Каждый поток s.(i = 1,...,n)
задается четырьмя параметрами:
1) f —указатель н а фрагмент отнош ения;
2) q . —количество сегментов в отрезке, подлежащем обра­
ботке;
3) b . —номер первого сегмента в обрабатываемом отрезке;
4) a . —индикатор балансировки: 1 —балансировка допуска­
ется, 0 —балансировка не допускается.
На рис. 38 изображен пример параллельного агента с двумя
входными потоками.
Параллельный агент Q может находиться в одном из двух со­
стояний: активном и пассивном. В активном состоянии Q после­
довательно считывает и обрабатывает кортежи из всех входных
потоков. При этом в ходе обработки динамически изменяются зна­
чения параметров q и b для всех i = 1,...,n. В пассивном состоянии Q
не выполняет никаких действий. На начальном этапе выполнения
запроса выполняется инициализация агента, в результате кото­
рой происходит определение параметров всех входных потоков.
Затем аген т п е р е в о ­
дится в активное с о ­
стояние и начинает
обработку фрагментов,
ассоциированных с его
входны м и потокам и.
В каж дом ф рагм енте
обрабатываются толь-

Рис. 38. Параллельный


агент с двумя входными
потоками
Глава 7. Балансировка загрузки 129

ко те сегменты, которые входят в отрезок, определяемый пара­


метрами потока, ассоциированного с данным фрагментом. После
того, как все назначенные сегменты во всех входных потоках об­
работаны, агент переходит в пассивное состояние.
П ри вы полнении параллельного плана запроса одни агенты
могут завершить свою работу и находиться в пассивном состоя­
н и и в то время, как другие агенты будут продолжать обработку
назначенных им отрезков. Таким образом, возникает ситуация
перекоса. Рассмотрим следующий алгоритм балансировки загруз­
ки, использую щ ий репликацию данных.
Пусть м ы имеем ситуацию, когда параллельный агент Q е Q
закончил обработку назначенных ему сегментов во всех входных
потоках и переш ел в пассивное состояние, в то время как агент
Q е Q все еще продолжает обработку своей порции данных, и
нам необходимо произвести балансировку загрузки. М ы будем
называть простаиваю щ ий агент Q лидером, а перегруженный
агент Q — аутсайдером. В этой ситуации мы будем выполнять
процедуру балансировки загрузки между лидером Q и аутсайде­
ром Q , которая заключается в передаче части необработанных
сегментов от агента Q агенту Q . Схема алгоритма балансировки
изображена н а рис. 39 (использован С и-подобный псевдокод).
При балансировке загрузки мы используем внешнюю по отноше­
нию к этой процедуре функцию балансировки , которая вычисляет
количество сегментов соответствующего входного потока, пере­
даваемых от аутсайдера Q лидеру Q .
Д ля эфф ективного использования описанного алгоритма ба­
лансировки загрузки мы должны решить следующие задачи.
1. П р и н а л и ч и и п р о с та и в а ю щ и х а ге н т о в -л и д е р о в м ы
долж ны вы брать некоторы й агент-аутсайдер, которы й
будет являться объектом балансировки. Способ выбора
агента-аутсайдера мы будем называть стратегией выбора
аутсайдера.
2. Необходимо решить, какое количество необработанных
сегментов данных необходимо передать от аутсайдера ли-
130 Глава 7. Балансировка загрузки

Рис. 39. Алгоритм балансировки загрузки двух параллельных


агентов

деру. Функцию, вычисляющую это число, будем называть


функцией балансировки.
О пиш ем стратегию вы бора аутсайдера, называемую опти­
мистической. Рассмотрим иерархическую многопроцессорную
систему со структурой в виде симметричного DM-дерева T. Пусть
Q — параллельный план запроса Q, Y — множество узлов DM-
дерева, на которых осуществляется вы полнение параллельного
плана Q . Пусть в процессе обработки запроса в некоторы й м о­
мент времени агент-лидер Q е Q , расположенный на узле
, закончил свою работу и переш ел в пассивное состояние. Нам
необходимо из множества агентов параллельного плана Q вы ­
брать некоторый агент-аутсайдер Q е Q (Q ф Q ) , которому будет
помогать агент-лидер Q . М ы будем предполагать, что агент Q
располагается н а узле , и что у ф у . Обозначим через M
м инимальное поддерево дерева T, содержащее узлы у и у .
Глава 7. Балансировка загрузки 131

Д л я вы б ора аген та-аутсай д ера м ы и сп ользуем м еханизм


рейтингов. Каждому агенту параллельного плана в процессе
балансировки загрузки присваивается рейтинг, задаваемый ве­
щ ественны м числом. В качестве аутсайдера всегда выбирается
агент, им ею щ ий максимальный положительный рейтинг. Если
таковые агенты отсутствуют, то освободивш ийся агент Q п ро­
сто завершает свою работу. Если сразу несколько агентов имею т
максимальный положительный рейтинг, то в качестве аутсайдера
из их числа выбирается тот, к которому дольш е всего не прим е­
нялась процедура балансировки загрузки.
Для вычисления рейтинга оптимистическая стратегия исполь­
зует рейтинговую функцию у : Q ^ R следующего вида:

Y(Q ) = a. sgn (m a x ( . ) - Я ) i . ( M ) ) ^ gt .
i=1

Здесь ^ —некоторы й положительный весовой коэффициент,


регулирующий влияние значения функции зеркалирования на
величину рейтинга; B —целое неотрицательное число, задающее
нижню ю границу количества сегментов, которое можно переда­
вать при балансировке нагрузки. Напомним, что X(M) обозначает
уровень поддерева M в дереве T.
Ф у н кц и я б алан си ровки А для каж дого п отока si агента-
аутсайдера Q определяет количество сегментов, передаваемых
агенту-лидеру Q н а обработку. В простейш ем случае мы можем
положить

Ф ункция S( f ) , вы числяет количество сегментов фрагмента


f . Таким образом, ф ункция А передает от Q к Q половину н е ­
обработанных сегментов, если только реплика фрагмента f на
узле агента Q не меньш е этой величины. В противном случае
передается столько сегментов, сколько содержится в соответ­
ствующей реплике фрагмента f .
Глава 8

Буферизация
в параллельных СУБД

§ 8.1. Буферизация и замещение страниц


В больш инстве случаев СУБД работаю т с базам и данных,
размер которых значительно превыш ает объем доступной опе­
ративной памяти. Это означает, что мы лиш ены возможности
поместить всю базу данных в оперативную память, и большая ее
часть во время работы системы будет оставаться н а магнитных
дисках. Следовательно, п р и вы полнении запросов пользова­
теля и н ф орм ац и он н ая система ф актически постоянно будет
осущ ествлять обмены с м агнитны м и дискам и. У читывая тот
факт, что обращ ение к магнитному диску примерно в 105—106
раз медленнее, чем обращение к оперативной памяти, мы можем
кардинально увеличить производительность инф орм ационной
системы, м инимизируя количество обращ ений к магнитны м
дискам. П рактически единственным эф ф ективны м способом
уменьш ения количества обращ ений к дискам является буфери­
зация данных в оперативной памяти.
В основе механизма буферизации любой файловой системы
лежит так называемая страничная организация внеш ней (диско­
вой) памяти. В соответствии с этой организацией, все дисковое
пространство системы делится на ряд блоков ф иксированной
длины, называемых страницами. Размер страницы в различных
системах может варьироваться от 4 до 56 Кбайт. Каждая страница
диска имеет свой порядковы й номер, являю щ ийся уникальным
в пределах данной вычислительной системы. В реальных базах
Глава 8. Буферизация в параллельных СУБД 133

данных одна таблица может занимать миллионы страниц и на


одной странице могут находиться сотни записей.
В современных файловых системах страница является м и н и ­
мальной порцией информации, вовлекаемой в единичный обмен
с магнитными дисками. Это означает, что когда нам необходимо
считать из базы данных запись о некотором сотруднике, мы долж­
н ы считать с диска всю страницу, содержащую данную запись.
П ри этом считанная страница помещ ается в некоторую специ­
альную область оперативной пам яти, назы ваемую буферным
пулом или просто буфером. После использования образ дисковой
страницы некоторое время остается в буферном пуле. Если в те­
чение этого времени произойдет повторное обращение к данной
странице, мы можем использовать образ страницы, хранящ ийся
в буферном пуле, вместо того, чтобы заново считывать страницу
с диска. Таким образом, если нам удастся удерживать в буферном
пуле те страницы диска, обращения к которым повторяются н аи ­
более часто, мы можем в сотни и даже в ты сячи раз увеличить
быстродействие наш ей инф орм ационной системы.
Современные системы баз данных поддерживают буферные
пулы очень больших размеров, однако, как это уже было отме­
чено выше, размер буферного пула, как правило, не достаточен
для размещ ения всей базы данных. Это означает, что в процессе
работы системы баз данных буферный пул будет достаточно бы­
стро заполнен страницами диска, к которым обращалась СУБД,
и возникнет ситуация, когда произойдет обращение к странице,
отсутствующей в буфере. В данной ситуации файловая система
должна освободить место в буферном пуле, выбрав в качестве
жертвы некоторую страницу. Если страница-жертва подвергалась
изменениям во время ее нахождения в буферном пуле, то ее образ
должен быть записан обратно на диск. После этого образ новой
страницы доложен быть считан с диска и помещ ен на то место в
буфере, которое занимала страница-жертва. Указанный процесс
называется замещением страниц. Ситуация, когда СУБД обраща­
ется к странице, отсутствующей в буфере, называется промахом.
134 Глава 8. Буферизация в параллельных СУБД

Для эфф ективной буферизации критическим является вопрос:


какую страницу мы должны вытеснить из буфера при нехватке
места для «подкачки» новой страницы диска? Правила, которые
используются для реш ения этой задачи, называю тся стратегией
замещения. Алгоритм, реализую щ ий некоторую стратегию за­
м ещ ения, называется алгоритмом замещения. Стратегия заме­
щ ения определяет правило, по которому происходит вытеснение
страниц из буферного пула. Алгоритм замещ ения определяет
реализацию этого правила н а ЭВМ. В том случае, когда для нас
не существенны реализационны е аспекты, мы не будем делать
различия между стратегией и алгоритмом замещения.
М ерой эффективности стратегии замещ ения является коли­
чество возникаю щ их промахов, то есть ситуаций, когда вы бирае­
мая страница не находится в буфер. Теоретический максимум
эф ф ективности определяется стратегией OPT, в соответствии
с которой, из буфера вытесняется страница, к которой дольше
всего не будет обращений. Однако для реализации стратегии OPT
нам нужен оракул, которы й мог бы сколь угодно далеко загля­
дывать в будущее, поэтому на практике реализовать стратегию
OPT, как правило, не удается.
Для изучения различных стратегий замещ ения нам понадо­
бится понятие трассы обращ ений к страницам диска. Трассу
обращ ений можно представить себе как некоторы й журнал, в
которы й СУБД записывает ном ера страниц диска, к которым
она обращается. М ы будем здесь изображать трассу в виде п о ­
следовательности чисел r , r2, r3, r4 ..., где r{ обозначает номер
страницы , к которой было адресовано последнее обращ ение,
r2 —номер страницы, к которой было адресовано предпоследнее
обращение, и так далее.

§ 8.2. Требования к стратегии замещения


Архитектура менеджера буферного пула СУБД предусматрива­
ет возможность явного указания того или иного правила вытесне­
Глава 8. Буферизация в параллельных СУБД 135

ния при открытии набора страниц. П ри этом один и тот же набор


может быть открыт одновременно нескольким и транзакциями.
Если транзакция «знает», в соответствии с каки м ш аблоном
доступа будут просматриваться страницы набора (например,
последовательное сканирование без повторений), то она может
указать при открытии набора предпочтительное правило вы тес­
нения (например, немедленное вытеснение). Однако во многих
случаях бывает сложно предвидеть, в каком порядке будут п ро­
исходить обращ ения к страницам набора. Типичным примером
такой ситуации является работа СУБД в режиме OLTP, когда за
малый промежуток времени выполняется большое число корот­
ких транзакций. Самое большее, что мы можем сделать в этом
случае, это определить приближенную вероятность обращ ения
к той или иной странице, хотя и это зачастую оказывается рудно
вы полнимы м н а практике. В данной ситуации мы вынуждены
использовать некоторую общую стратегию замещения.
Общая стратегия замещения, используемая по умолчанию в
менеджере буферного пула параллельной системы баз данных
без совместного использования ресурсов, должна удовлетворять
следующим основны м требованиям.
1) Автономность. Общая стратегия не должна использовать
знаний о структуре запроса. Единственная инф ормация,
которая может быть использована общей страгией, —это
общая трасса обращ ений к страницам диска.
2) Адекватность по Зипфу. Общая стратегия должна обеспечи­
вать высокую эффективность на трассах с распределением
вероятностей обращений, соответствующим обобщенному
распределению Зипфа.
3) Адекватность по индексу. Общая стратегия должна обеспе­
чивать высокую эффективность н а трассах, характерных
для вы борки страниц в случайном порядке с использова­
нием индексного файла.
4) SN -адекватность. Общая стратегия должна обеспечивать
вы сокую эф ф екти вн ость н а трассах, характерны х для
136 Глава 8. Буферизация в параллельных СУБД

S N систем, то есть параллельных систем баз данных без


совместного использования ресурсов.
Требование автономности, по существу, непосредственно
следует из определения общ ей стратегии замещ ения. Д анное
требование не отрицает возможность использования в менеджере
буферного пула стратегий, использующих знания о характере за­
проса. Напротив, такие специальные стратегии могут сочетаться
с общей стратегией замещения.
Специальная стратегия замещения ассоциируется с опреде­
ленны м шаблоном доступа к базе данных. И звестны следующие
основны е ш аблоны доступа, возни каю щ ие п ри вы полнени и
различных запросов:
(1) последовательное сканирование страниц без повторного
обращения;
(2) последовательное сканирование страниц, повторяющееся
в цикле;
(3) вы борка страниц в случайном порядке без повторных об­
ращ ений;
(4) вы борка страниц в случайном порядке, повторяю щ аяся в
цикле;
(5) выборка страниц в соответствии с некоторым статическим
распределением вероятностей обращений;
(6) вы борка страниц в случайном порядке с использованием
индексного файла.
Страницы, доступ к которым осуществляется в соответствии
с ш аблонами (1) и (3), должны вытесняться из буфера немед­
ленно после их использования. Для случаев (2) и (4) мы должны
попытаться удержать в буфере все страницы, входящие в цикл.
Если это не удается, то мы долж ны использовать немедленное
вытеснение. Особенно важ ной разновидностью доступа к базе
данных является случай (6). В данном случае для нас более важно
удерживать в буфере корневую часть B+щерева, представляющего
индекс, чем его крону, так как обращения к страницам, входящим
в корневую часть, будут вы полняться н а несколько порядков
Глава 8. Буферизация в параллельных СУБД 137

чаще, чем обращ ения к листьям. Количество промахов может


быть соращено н а 10—15%, если мы будем учитывать специфику
алгоритмов, используемых в СУБД.
П риведенные рассуждения показывают, что менеджер буфер­
ного пула СУБД должен допускать использование комбинирован­
ной стратегии замещения, предусматривающей использование
набора различных специальных стратегий. Возможный механизм
реализации такой ком бинированной стратегии заключается в
следующем. Все страницы, находящ иеся в буферном пуле, д е­
лятся на непересекаю щ иеся группы. С каждой группой связы ­
вается своя стратегия вытеснения. Общая стратегия вы теснения
определяется функцией вычисления рейтинга страницы, формула
которой зависит от конкретной стратегии, связанной с данной
страницей.
К ак уже было отмечено выше, специальная стратегия связы ­
вает с каждым открытым набором тот или иной ш аблон доступа.
Назовем этот процесс квалификацией. К валиф икация вы полня­
ется путем анализа внутренней структуры физического плана
вы полнения запроса. Задача квалиф икации посредством ш а-
блонвдоступа (1)—(4) является практически тривиальной с точки
зрения операций физического плана запроса. Действительно,
каждая операция физического плана может заранее предсказать,
в каком порядке (последовательном или случайном) будут п ро­
сматриваться страницы набора, и будет это происходить одно­
кратно или в цикле. С помощ ью стандартной техники оценки
размеров промежуточных отнош ений, используемой при опти­
мизации запросов, мы можем заранее оценить, сможет ли цикл
поместиться в буферный пул целиком. С другой стороны, задача
квалиф икации посредством ш аблонвдоступа (1)—(4), базирую­
щ аяся исключительно на анализе общей трассы обращ ений к
страницам диска, яляется трудно разреш имой н практике из-за
того, что одна и та же страница может одновременно использо­
ваться нескольким и операциями физического плана запроса, не
говоря уже о том, что одна и та же страница может одновременно
138 Глава 8. Буферизация в параллельных СУБД

использоваться нескольким и запросами. Исходя из этих сооб­


раж ений, целесообразно отнести квалиф икацию посредством
ш аблонвдоступа (1)—(4) к ком петенции специальных стратегий
замещения.
Что касается ш аблонов доступа (5), (6), то квалиф икация п о ­
средством данных шаблонов вполне может быть вы полнена на
основе анализа информации, содержащейся в общей трассе обра­
щ ений к страницам диска. П ри этом мы принимаем во внимание
только те страницы трассы, которые не удалось квалифицировать
с помощь аблонов (1)—(4). Исходя из этих соображений, целесоо­
бразно отнести ш аблоны доступа (5), (6) к ком петенции общей
стратегии вы теснения, используемой менеджером буферного
пула по умолчанию.
В соответствии с вы ш есказанны м, общая стратегия замещ е­
ни я должна обеспечивать высокую эффективность на трассах,
построенных н а основе ш аблона доступа (6), то есть она должна
удовлетворять требованию адекватности по индексу. Кроме это­
го, общая стратегия замещ ения должна обеспечивать высокую
эфф ективность для ш аблона доступа (5).
В реальных коммерческих приложениях баз данных часто встре­
чается распределение, близкое к правилу «80—20». Данное правило
гласит, что 80% обращений адресуется к 20% базы данных. Близ­
ким к данному распределению является распределение по закону
Зипфа. В соответствии с этим законом, вероятности обращений к
N страницам диска определяются следующим образом:

Р1= c/1, p2 = c/2, . . ., pN= c/N, (8.1)

где c = 1/HN, HN —гармоническое число [8]. М ы будем рассмат­


ривать более общее распределение вида

p 1= c<0>/10, p2 = c<0)/2®, . . ., pN= c(0)/N®, (8.2)

где c (0-*= 1/ HN0) , 0 < 0 < 1, H 0 —гармоническое число порядка


0 [8]. Назовем данное распределение обобщенным распределением
Глава 8. Буферизация в параллельных СУБД 139

Зипфа. П ри 0 = 1 мы получим в точности классическое рас­


пределение Зипф а (8.1), а при 0 = 1 — log 0 ,8 0 / log 0,20 получим
распределение, близкое к правилу «80—20».
В соответствии с вы ш есказанны м, мы можем конкретизиро­
вать требование адекватности по Зипф у следующим образом.
Стратегия замещ ения является адекватной по Зипфу, если она
обеспечивает достаточно высокую эфф ективность н а трассах
с распределением вероятностей обращ ений, соответствующих
обобщ енном у распределению Зи п ф а (8.2). Верхняя граница
эф ф екти в н о сти н а трассах со статическим распределени ем
вероятностей обращ ений (в контексте модели независимых об­
ращений [20]) определяется стратегией замещ ения A0, которая
всегда вытесняет из буфера страницу с наименьш ей вероятностью
обращения. Другими словами, н а статических трассах стратегия
A0 является оптимальной среди всех стратегий замещения, не и с ­
пользующих оракула. Доказательство соответствующей теоремы
можно найти в [20].
В заклю чение рассм отри м требование S N -адекватности.
Данное требование проистекает из того факта, что SN системы
(системы без совместного использованя ресурсов) и SE системы
(системы с разделяемыми памятью и дисками) имеют качествен­
но различны й профиль буферизации. В SE системе все процес­
соры обычно разделяют единый буферный пул (использование
схем, предусматривающих дробление буферного пула по числу
процессоров, ведет к снижению эф ф ективности использования
оперативной памяти). Вследствие этого проф иль буферизации
в SE системе очень похож н а проф иль буферизации в однопро­
цессорной системе. П ри вы полнении смеси транзакций в таких
системах распределение вероятностей обращ ений к страницам
диска имеет динамический, трудно прогнозируемый характер,
поскольку обращ ения различных транзакций к страницам диска
могут накладываться и переплетаться сложным образом. Выявить
внутритранзакционную , а тем более внутриоперационную л о­
кальность обращ ений, исходя из анализа общей трассы обращ е­
140 Глава 8. Буферизация в параллельных СУБД

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


(под локальностью обращения понимается его принадлежность
кон кретн ой рел яц и он н ой операции, запросу и транзакции).
В соответствии с этим, стратегия замещ ения, оринтированная
н а SE-архитектуру, должна уметь выявлять межтранзакционную
локальность ссылок с учетом ее динамическй природы.
Для SN -систем характерен принципиально иной проф иль и с ­
пользования буферного пула. В подобных системах оптимальным
является профиль загрузки, при котором на каждом узле системы
в каждый момент времени выполняется небольш ое количество
реляционных операций, являющихся частью одного запроса. При
такой загрузке распределение вероятностей обращ ений к стра­
ницам диска будет иметь статический характер на протяж ении
некоторого ограниченного интервала времени, совпадающего
со временем вы полнения параллельного агента, назначенного
данному процессорному узлу. Затем узлу будет назначен новы й
параллельный агент другого запроса, что повлечет практически
одномоментную смену распределения вероятностей, после чего
снова наступит период некоторой стабильности. Назовем трассы
такого типа периодическими. В соответствии с выш есказанным,
м ы можем опредлить требование S N -адекватности как способ­
ность стратегии замещения показывать высокую эффективность
н а периодических трассах.

§ 8.3. Стратегии LRU и LFU


Вплоть до середины 1980-х годов для управления буферным
пулом практически во всех случаях использовалась стратегия
замещ ения L R U (Least Recently Used), вытесняю щ ая из буфера ту
страницу, к которой дольше всего не было обращений. К оличе­
ство промахов FLRUстратегии LRU ограничено сверху следующим
образом:
F LRU< kFOPT (8.3)
Глава 8. Буферизация в параллельных СУБД 141

Здесь к — количество страниц, пом ещ аю щ ихся в буфер, а


FOPT—количество промахов стратегии OPT. Однако дальнейш ие
исследования показали, что стратегия L R U далеко н е всегда
адекватно учитывает специфику систем баз данных. Рассмотрим
следующий показательный пример, выявляющий неадекватность
стратегии L R U применительно к системам баз данных. Пусть
имеется многопользовательское приложение баз данных, которое
в случайном порядке обращается к записям о клиентах, используя
кластеризованный индекс в виде B-дерева по полю C U ST-ID
(код клиента) для извлечения некоторой инф ормации. Данны й
проф иль загрузки соответствует тесту T PC -A [3]. Предположим,
что база данных содержит информацию о 20000 клиентах, что
длина записи о клиенте составляет 2000 байт, и что лист B-дерева
занимает 20 байт (включая пустые ссылки). Тогда, если страница
д и ска зан и м ает 4000 байт, то н ам потребуется 100 стран и ц
для хранения листьев B-дерева (при условии, что страницы
заполняются полностью), и 10000 страниц для хранения записей.
Трасса обращ ений к данны м страницам диска будет выглядеть
следующим образом (мы игнорируем обращ ения к корневой
части B-дерева): I , R1, / 2, R2, / 3, / 3, . . . Здесь j обозначает ссылку на
некоторую страницу индекса, а R .обозначает ссылку на некоторую
страницу с записями о клиентах. Если мы имеем буферный пул
такого размера, что после разм ещ ения в нем корневой части
B дерева у нас остается свободное место для размещ ения 101
страницы, то мы должны поместить в буфер и удерживать там
все 100 страниц, содержащих листья B дерева, так как каждая из
этих страниц выбирается с вероятностью 0,005, в то время, как
страница с записям и о клиентах вы бирается с вероятностью
0,00005. Одна оставшаяся свободной страница буферного пула
должна использоваться для последовательной буферизации всех
страниц, содержащих записи о клиентах. Однако стратегия LRU
будет удерживать в буферном пуле примерно равное количество
страниц с листьями B-дерева и страниц с записями о клиентах.
Таким образом , м ы д олж ны кон стати ровать, что стратегия
142 Глава 8. Буферизация в параллельных СУБД

LR U не удовлетворяет требованию адекватности по индексу из


параграфа 8.2.
Стратегия замещения LFU (Least Frequently Used) вытесняет из
буфера ту страницу, к которой было сделано наименьш ее коли­
чество обращений. В том случае, когда вероятность обращ ения к
данной странице остается постоянной во времени, алгоритм LFU
показывает великолепные результаты, близкие к оптимальным.
Однако, в случае изм енения данной вероятности, страницы, к
которым в текущий период времени не производится обращений,
могут по-прежнему удерживаться в буфере за счет большого числа
ранее накопленны х обращений.
В соответствии с этим, были предприняты интенсивны е уси­
лия по поиску стратегий замещения, которые в большей степени
подходили бы для систем баз данных. Все известные подходы
можно разделить н а две общие категории:
— специальные стратегии, основанные н а анализе плана вы ­
полнения запроса;
— общие стратегии, основанны е н а анализе общ ей трассы
обращений.

§8.4. Специальные стратегии замещения


Специальные стратегии замещения при управлении буферным
пулом используют инф ормацию , поставляемую оптимизатором
запросов. Оптимизатор запросов анализирует план вы полнения
запроса и определяет вероятную степень локальности обращений
для всех наборов дисковых страниц, вовлекаемых в вы полнение
данного запроса. Н а фазе вы полнения запроса эта инф орм ация
передается менеджеру буферного пула и используется для орга­
низации эфф ективного вы теснения страниц.
Одной из первых специальны х стратегий такого типа была
стратегия, базирующаяся н а алгоритме DSA (Domain Separator
Algorithm). Используя знания о структуре запроса, данны й алго­
ритм размещал различные группы страниц в различные буферные
Глава 8. Буферизация в параллельных СУБД 143

пулы. Так, в примере с B-деревом страницы, содержащие узлы


B-дерева, размещ ались в одном буферном пуле, а страницы, со­
держащ ие записи о клиентах, размещ ались в другом буферном
пуле. Таким образом, страницы B-дерева конкурировали только
со страницам и B-дерева, а страницы данны х конкурировали
только со страницами данных. П ри этом DSA регулировал раз­
меры различных буферных пулов в зависимости от фактической
степени локальности ссылок. Подобный подход был использован
в ряде коммерческих СУБД с вы сокими требованиями к п ро­
изводительности. О сновными недостатками данного подхода
являю тся сложность програм м ной реализации и проблем ы с
адаптацией алгоритма к вариантам загрузки с динамическим
распределением вероятностей обращ ений к страницам диска.
Другим примером специальной стратегии замещения является
алгоритм HOT, базирующийся на модели популярных наборов ( hot
set model). Данная модель представляет собой модель выполнения
запросов для реляционной системы баз данных, в которой запрос
представляется в виде ком бинации некоторых фиксированных
шаблонов доступа. В контексте этой модели набор страниц, над
которым соверш аются циклические действия, называется по­
пулярным набором (hot set). Если запрос имеет в буферном пуле
достаточно места для удержания там популярных наборов, то его
выполнение будет эффективным, когда страницы, используемые
в цикле, будут постоянно оставаться в буфере. С другой сторо­
ны, если запросу выделяется недостаточно памяти для хранения
популярного набора, то это выражается в резком увеличении
количества промахов. Построив график зависимости количества
промахов от величины буферного пула, мы будем наблюдать
разрывы в точках с выш еописанны м сценарием. Данны е точки
называются популярными точками (hot point). В алгоритме H O T
каждому запросу отводится свой отдельный буферный пул, управ­
ляемый стратегией LRU. Количество слотов, выделяемых каждому
буферному пулу, определяется заранее, исходя из анализа запроса
в соответствии с моделью популярных наборов. Таким образом,
144 Глава 8. Буферизация в параллельных СУБД

запросу выделяется приватны й буферный пул размера, доста­


точного для удержания всех популярных наборов, вовлекаемых
в запрос. Выполнение нового запроса начинается только в том
случае, если общий размер его популярных наборов не превышает
размер свободного пространства, доступного в данны й момент
для буферизации. Столь жесткая дисциплина обусловлена тем, что
выделение популярному набору буферного пространства, хотя бы
н а единицу меньшего фактического размера популярного набора,
ведет, как правило, к резкому падению эффективности алгоритма
HOT. Такая дисциплина приводит к недостаточно эффективному
использованию оперативной памяти.
Сходные идеи были использованы при разработке алгорит­
ма DBMIN. В отличие от алгоритма HOT, алгоритм D B M IN не
связывается с какой-то одной стратегией замещ ения. Указан­
ны й алгоритм базируется н а модели QLSM (Query Locality Set
M odel). В данной модели вводится некоторая таксономия для
классиф икации способов доступа к страницам диска, подобная
системе ш аблон (1)—(6). Каждый запрос отображается в н еко­
торую комбинацию ш аблонов доступа. Каждый ш аблон доступа
ассоциируется с некоторым набором страниц. Для каждой такой
пары (ш аблон, набор) до вы полнени я запроса определяется
размер так называемого рабочего множества (locality set). Н апри­
мер, при циклическом сканировании набора Х размер рабочего
множества будет совпадать с размером Х , а при однократном
сканировании набора Х размер рабочего множества будет равен
единице. В алгоритме DBM INкаждому открытому набору сопо­
ставляется отдельный буферный пул и индивидуальная стратегия
замещ ения. Стратегия замещ ения выбирается в зависимости от
размера имею щ ейся свободной области в оперативной памяти,
отводимой под буферизацию, ш аблона доступа и размера рабо­
чего множества. Например, если набор Х сканируется в цикле,
но у нас н е хватает свободного места в оперативной памяти для
разм ещ ения набора Х целиком , то м ы долж ны использовать
стратегию M RU (Most Recently Used), вытесняющую из буфера
Глава 8. Буферизация в параллельных СУБД 145

страницу, использованную последней. Алгоритм D BM IN п ре­


красно работает в ситуации, когда рабочие множества различных
запросов не сильно пересекаются. Однако в ситуации, когда над
одним и тем же рабочим множеством параллельно выполняется
несколько запросов, эффективность алгоритма D BM IN может
существенно снижаться.
П еречисленны е алгоритм ы хорош о работаю т в условиях,
когда внутризапросная локальность ссылок является основным
ф актором буферизации. Однако эти алгоритм ы теряю т свои
преимущества при многопользовательском режиме работы, когда
множество различных планов, генерируемых оптимизатором за­
просов, перекрывают друг друга сложным образом. В этом случае
меж запросная локальность становится основны м фактором бу­
феризации, и для ее вы явления необходимо использовать более
общие стратегии замещения.

§ 8.5. Общие стратегии замещения


Общие стратегии замещения — это стратегии, основанны е
н а анализе общей трассы обращ ений к страницам диска. К н а ­
стоящему моменту разработано большое количество различных
общих стратегий замещ ения, и работы в этом направлении п ро­
должаются. Это обусловлено тем, что не существует стратегии
зам ещ ения, хорош ей во всех отнош ениях. Каждая стратегия
имеет свои сильные и слабые стороны, и подбор эф ф ективной
стратегии замещ ения для того или иного проф иля загрузки с и ­
стемы баз данных остается нетривиальной и, в общем случае,
нереш енной задачей. Следовательно, дать полны й обзор всех
общих стратегий замещения представляется трудновыполнимой
задачей. Однако можно заметить, что больш инство стратегий
являю тся в некотором смысле развитием стратегии LRU , LFU
или их комбинации.
О дной из первы х эф ф ективны х аппроксим аций стратегии
LRU , получивш их ш ирокое распространение, был алгоритм
146 Глава 8. Буферизация в параллельных СУБД

Рис. 40. Алгоритм CLOCK

CLOCK [22]. Работа алгоритма CLOCK схематически изобра­


ж ена н а рис. 40. С каж дой страницей, пом ещ енной в буфер,
связывается так называеы й ««бит использовния»». П ри каждом
обращ ении к странице данны й бит устанавливается в значение
1. П оиск жертвы осуществляется путем циклического просм о­
тра всех страниц, находящихся в буферном пуле, пока не будет
найдена страница с нулевым битом использования. В качестве
переменной цикла используется некоторы й внутренний указа­
тель, изображ енный н а рис. 40 в виде часовой стрелки. Всякий
раз, когда указатель попадает н а элемент с ненулевым битом
использования, данный бит устанавливается в значение ноль.
Эффективность алгоритма CLOCK сравнима с эффективностью
алгоритма LRU в большинстве случаев. Однако алгоритму CLOCK
присущ и практически те же недостатки, что и алгоритму LRU
(см. параграф 8.3).
Для преодоления этих недостатков было предложено обобще­
ние алгоритма CLOCK, получившее название GCLOCK (General­
ized CLOCK). Алгоритм GCLOCK соединяет в себе идеологию LFU
и реализацию CLOCK. О сновная идея состоит в том, что вместо
Глава 8. Буферизация в параллельных СУБД 147

бита использования с каждой буферизованной страницей ассо­


циируется счетчик обращений. П ри каждом обращении к страни­
це счетчик обращ ений увеличивается на единицу, а при каждом
прохож дений указателя-стрелки — ум еньш ается н а единицу.
В качестве жертвы по-преж нем у выбирается первая страница,
у которой счетчик обращ ений оказался равны м нулю (рис. 41).
Д анны й метод является существенным улучшением стратегии
LFU. Тем не менее, алгоритм GCLOCKдемонстрирует тенденцию
к вытеснению блее ««моодых»» страниц независимо от реальных
вероятностей обращ ений. Д ля преодоления указанного недо­
статка был предложен целый ряд улучшений алгоритма GCLOCK,
суть которых состоит в искусственном регулировании процсса
«старения» страниц [22]. Однако, как показали дальнейш ие и с ­
следования, эффективность всех подобных алгоритмов критиче­
ским образом зависит от точного подбора значений параметров,
что в общем случае является нетривиальной задачей.
Другим обобщ ением алгоритма L F U является алгоритм LRD
(Least Reference Density), предложенный в работе [22]. Для каждой
буферизованной страницы P алгоритм LRD вычисляет плотность
148 Глава 8. Буферизация в параллельных СУБД

обращений (reference density) RD(z'), определяемую следующей


формулой
RD(z) = RC(z)/(GRC - FC(z)). (8.4)

Здесь G R C (Global Reference Coter) — суммарное количество


логических обращ ений к д иску;Р С (.) — счетчик первого об­
ращ ения (First reference Counter) к странице P , приним аю щ ий
значение счетчика GRC в момент первого обращения к странице
P .; RC(i) —счетчик логических обращ ений (Reference Counter) к
странице P.. В качестве жертвы выбирается страница, имею щ ая
наименьш ее значение RD(i). Д анны й алгоритм демонстрирует
в среднем более высокую эфф ективность по сравнению с алго­
ритмом LFU. Однако он имеет ряд существенных недостатков.
Прежде всего, алгоритм LRD всегда присваивает вы сокий рей­
тинг «молодым» страницам, независимо от реальной вероятности
повторных обращений. С другой стороны, страница, имевш ая
высокую плотность обращений н а протяж ении долгого времени,
будет по инерции сохранять достаточно вы сокий рейтинг, чтобы
удержаться в буфере еще некоторое время после последнего обра­
щ ения. Для преодоления указанных недостатков был предложен
ряд улучшений алгоритма LRD, базирующийся на введении до­
полнительных параметров в формулу (8.4). Однако все указанные
вариации алгоритма LRD требуют тщательной ручной настройки
параметров применительно к текущему варианту загрузки.
В работе [27] был предложен алгоритм FBR (Frequency-Based
Replacement), представляющий собой некоторый симбиоз страте­
гий LRU и LFU. Как и в алгоритме LFU, с каждой буферизованной
страницей P .алгоритм FBR связывает счетчик обращ ений RC(i),
однако данны й счетчик вычисляется по особым правилам. Бу­
ф ерны й пул в алгоритме FBR организуется в виде стека. Любая
страница, к которой произош ло последнее обращение, пом ещ а­
ется на вершину стека независимо от того, находилась она к этому
моменту в буфере или нет. П ри этом стек логически делится на
две непересекаю щ иеся части, называемые соответственно новой
Глава 8. Буферизация в параллельных СУБД 149

и старой секциями. Н овая секция начинается с верш ины стека,


старая часть заканчивается дном стека. Граница между новой и
старой секциями является параметром алгоритма. Новая и старая
секции имею т различные правила обновления счетчиков RC(z').
П ри очередном обращ ении к странице P. увеличение счетчика
RC(z) н а единицу происходит только в том случае, если страница
находилась в момент обращ ения в старой секции. Если страница
P zв момент обращ ения находилась в новой секции, то приращ е­
ние счетчика RC( z) не происходит. П оиск жертвы осуществляется
по правилу LRU только среди страниц старой секции, имеющих
наименьш ее значение RC( z). Данному алгоритму присущ е боль­
ш инство недостатков, рассмотренных выше. Авторами в [27]
предлагаются некоторые улучшения, в частности связанные с
введением дополнительной секции «среднего возраста». Однако
все эти улучшения носят искусственный характер и не решают
проблемы в целом. Сходные идеи были использованы в алгорит­
ме EELRU, предложенному в более поздней работе [28].
Одним из наиболее впечатляющих достижений в области раз­
работки общих стратегий вытеснения является стратегия ERU-K,
предлож енная Элизабет О ’Н ил (Elizabeth O ’N eil), П атриком
О’Нилом (Patrick O’Neil) и Герхардом Вейкумом (Gerhard Weikum)
в работе [25]. Данная стратегия является обобщением стратегии
ERU в том смысле, что стратегия ERU-1 совпадает со стратегией
ERU. Однако уже при K = 2 стратегия ERU-K способна показать
существенно более высокую эффективность по сравнению с ERU
для вариантов загрузки, характерных для работы реляционных
систем баз данных. Для объяснения принципа работы стратегии
ERU-K введем формализованное определение трассы. Трасса —это
последовательность номеров страниц диска, к которым произво­
дятся последовательные по времени обращения:
A r2, r3, . . . (8.5)
П ри этом м еньш ее значение и н д екса соответствует более
позднему по времени обращению. В соответствии со стратегией
150 Глава 8. Буферизация в параллельных СУБД

LRU-K, c каждой страницей, находящ ейся в буфере, ассоции­


руется некоторое число, называемое ее коэффициентом непо­
пулярности. М ы будем обозначать этот коэф ф ициент как HLRUK.
Способ определения коэф ф ициента HLRUK зависит от значения
параметра K. Для того, чтобы найти HLRUl для страницы с н о ­
мером r, мы должны просматривать трассу (8.5) слева направо
пока не найдем первое вхождение числа r. Номер позиции этого
вхождения и будет значением коэф ф ициента HLRU-1 для данной
страницы. Для того, чтобы получить значение HLRff2для страницы
с номером r, нам необходимо найти номер позиции второго слева
вхождения числа r в трассу обращ ений (8.5). В общем случае зна­
чение HLRUKдля страницы с номером r определяется как номер
позиции K-того слева вхождения числа r в трассу обращений (8.5).
Если за все время построения трассы страница имела менее K
обращ ений, ее коэф ф ициент непопулярности считается равным
плюс бесконечности. В качестве жертвы стратегия LR U -K всегда
выбирает страницу с максимальным значением коэф ф ициента
HLRUK. Если две или более страницы имею т максимальное зна­
чение коэф ф ициента HLRUK, то в качестве жертвы выбирается та
из них, к которой дольше всего не было обращений.
К ак легко увидеть, метод LRU -K н а самом деле определяет
целый класс стратегий с различны ми значениям и натурального
параметра K. Рассмотрим в качестве примера стратегии LRU-2
и LRU-1 (последняя, очевидно, совпадает со стратегией LRU).
Пусть мы имеем трассу обращ ений, изображенную на рис. 42.
Пусть м ы имеем буферный пул, размер которого составляет 4
страницы. Пусть в данны й момент в буферном пуле находятся
страницы с ном ерам и 3, 9, 1, 5. А нализ трассы н а рис. 42 п о ­
казывает, что первая ссы лка н а страницу с ном ером 3 встре­
чается в п о зи ц и и «1», а вторая ссы лка н а данную страницу
0MHV4TPWVT. I I 3 4 3 * I * * 1Q II ...
ffcniop с гранит: | Д | 9 | j | I | Т J Ф | I | 7 | 1 | 4 | 3 [ ...

Рис. 42. Пример трассы обращений к страницам диска


Глава 8. Буферизация в параллельных СУБД 151

встреч ается в п о зи ц и и Таблица 3


«11». С л е д о в а т е л ь н о , Коэффициенты непопулярности
д л я с тр а н и ц ы с н о м е ­ Номер страницы и и
LRU -1 LRU -2
р ом 3 м ы будем им еть
3 1 11
HLRU-1~1 и HLRU-2=11 со­
ответственно. Аналогич­ 9 2 6
ны м образом мы можем
1 3 4
вы чи сл и ть к о э ф ф и ц и ­
7 5 8
енты HLRU-1 и HLRU-2 для
остальных страниц, н а ­
ходящихся в буферном пуле (табл. 3)
Если п ри очередном обращ ении к диску нам понадобится
освободить место в буферном пуле, то в качестве жертвы страте­
гия LRU-1 выберет страницу с максимальным значением к о эф ­
фициента непопулярности HLRU1, то есть страницу с номером 7.
Однако стратегия LRU-2 в данной ситуации выберет в качестве
жертвы страницу с номером 3, так как именно она имеет н аи ­
больш ий коэф ф ициент непопулярности HLRffr
Приведенный пример показывает, что стратегия LRU-K при
K > 1 будет стремиться удерживать в буфере страницы, к которым
возникают частые повторные обращения. Именно такой подход
оказывается оптимальным при выборке записей с использованием
индексного файла. Вычислительные эксперименты, проведенные
на трассах, характерных для приложений баз данных, показали,
что стратегия LRU-2 демонстрирует н а подобных трассах более
высокую эффективность, чем стратегия LRU и другие ранее и з­
вестные стратегии замещения. Аналогичные эксперименты были
проведены и со стратегией LRU-3, однако LRU-3 не смогла про­
демонстрировать заметного превосходства над LRU-2.
До последнего времени стратегия LRU-2 оставалась одной из
лучших стратегий замещ ения применительно к прилож ениям
баз данных. Тем не менее, и у нее были обнаружены свои слабые
стороны. Оказалось, что стратегия LRU-2 далеко не лучшим об­
разом проявляет себя на периодических трассах, характерных для
152 Глава 8. Буферизация в параллельных СУБД

Текущий адчйп арежни

д
Будущее - Прошлое
-3 -2 -1 : 1 2 3 4 5 6 7 8 9 10 11 12 13 Ы 15 16 17 18 19 26 21

* 5 * 1* Н И
V.___ .. А 1 г ~и п ШШШ
УУ
4 11*X h Ы lh h
$
В)Пф*>1гмн1^,1яр-
Y ~Y~
Д> Псрчод титулкр* II) Перма лопулкр- А) Периодионулчр-
i*tcriiL'ipciiiim. 4.5,й iilv ih сгрдоии 1,2.3 nocmciранни4,5,6 IKV11I CrpjlIHI! 1.2,3

Рис. 43. Пример периодической трассы

параллельных систем баз данных [13]. Упрощенным примером


периодической трассы может служить трасса обращ ений, и зо ­
браженная на рис. 43.
Д анная трасса состоит из чередующихся периодов двух т и ­
пов: A и В. Оба типа имею т одинаковую длину, равную шести.
Период типа А состоит из двух циклов обращ ений к страницам
с ном ерам и 1, 2, 3. Период типа B состоит из двух циклов обра­
щ ений к страницам с номерами 4, 5, 6. Рассмотрим поведение
стратегии LRU-2 н а трассе, изображ енной н а рис. 43. Пусть мы
имеем буферный пул размером в 4 страницы. В момент времени,
соответствующий позиции «4», буферный пул будет содержать
страницы с ном ерам и 1, 2, 3, и 4 (рис. 44, а). В следующий м о­
мент времени (позиция «3» н а рис. 43) происходит обращение
к странице с номером 6. Так как данная страница отсутствует в
буфере, произойдет вытеснение из буфера страницы с м акси­
мальным значением коэффициента непопулярности HLRff2. Такой
страницей окажется страница с номером 4. Н а ее место с диска
будет считана страница с номером 6, и мы получим содержимое
буфера, соответствующее позиции «3» на рис. 44 (а). В момент
времени, соответствующий позиции «2» на рис. 43, произойдет
обращ ение к странице с номером 5, которой также нет в буфере.
LRU-2 в этой ситуации вытеснит из буфера считанную н а преды­
дущем шаге страницу с номером 6, как имеющую максимальный
коэф ф ициент непопулярности. Дальнейш ее развитие ситуации
можно проследить по рис. 44 (а).
Глава 8. Буферизация в параллельных СУБД 153

Рис. 44. Изменение содержимого буферного пула при про­


хождении периодической трассы под управлением стратегий
LRU-2 и OPT. Серым цветом помечены страницы, которые бу­
дут замещены на следующем шаге

Таким образом, мы видим, что на приведенной в примере п е ­


риодической трассе стратегия LRU-2 допускает 100% промахов,
так как страницы , к которы м происходят обращ ения, всегда
отсутствуют в буфере. Следовательно, LRU-2 является в данном
случае наихудш ей стратегией. Д ля сравнения м ы привели н а
рис. 44 (б) результаты использования оптимальной стратегии
OPT на этой же трассе. Стратегия OPT всегда выбирает в качестве
жертвы страницу, к которой дольше всего не будет обращ ений2.
Легко увидеть, что стратегия OPT н а каждые 6 обращ ений допу­
скает только 2 промаха, что приблизительно соответствует 33%.
Отметим, что н а основе описанного примера мы можем легко
сконструировать периодические трассы, которые будут столь
же «неудобны» для LRU-3, LRU-4 и в общем случае для LRU-K.
Следовательно, нам необходима принципиально иная стратегия
замещ ения, если м ы имеем дело с задачами, порождаю щ ими
периодические трассы.
2 К сожалению, на практике стратегию OPT реализовать не удается, так
как для нее необходим оракул, который бы предсказывал будущее.
154 Глава 8. Буферизация в параллельных СУБД

В заключение нашего обзора упомянем алгоритм LRFU (Least


Recently/Frequency Used) [24], представляющ ий собой механиче­
ское соединение двух стратегий —LRU и LFU. С каждым элем ен­
том r трассы (8.5) алгоритм LRFU связывает весовую функцию
F(j) = (1 /p )Xj, зависящ ую только от его порядкового номера.
Здесь Xи р —некоторые параметры алгоритма, удовлетворяющие
условиям 0 < X < 1 и р > 2. Рейтинг R страницы i вычисляется по
следующей формуле
т =1 f (j ) .
r=
В качестве жертвы всегда выбирается страница с наименьш им
рейтингом. Очевидно, что при X = 0 стратегия LRFU будет иден­
тична стратегии LFU, а при X = 1 м ы получим стратегию LRU,
так как для любого ном ера j имеем
к
F (j ) > 1 F (l ) для всех к > j +1
l=j +1

Таким образом, алгоритм LRFU задает ф актически целы й


спектр стратегий, занимаю щ их пром еж уточное место между
стратегиям и LFU и LFU. Отметим, что п ри этом реализация
алгоритма LRFU требует хранения в пам яти всей трассы об­
ращ ен и й к стран и ц ам диска. А лгоритм LRFU представляет
главным образом теоретический интерес, так как н а практике
в большинстве случаев из всего этого спектра стратегий вполне
достаточно двух стратегий L R U и LFU. Проблема состоит в том,
что нам необходимо знать, в какой момент мы должны применять
ту или иную стратегию. В одной ситуации лучшей оказывается
стратегия LRU, в другойя— стратегия LFU. Алгоритм LRFU не
дает ответа н а этот вопрос.
Таким образом, м ы можем констатировать, что н и одна из
приведенны х общ их стратегий зам ещ ения в п ол н ой мере не
удовлетворяет требованиям, сформулированным в разделе 8.2.
В работе [14] была предложена общая стратегия замещения, полу­
Глава 8. Буферизация в параллельных СУБД 155

чивш ая название LFU-K, которая в большей мере удовлетворяет


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

§ 8.6. Алгоритм L F U -2

В основе алгоритма LFU-2 также лежит понятие рейтинга. Рей­


тинг вычисляется для всех буферизованных страниц в соответ­
ствии с некоторой ф ункцией, вид которой зависит от параметра
К. В качестве жертвы всегда выбирается страница с минимальным
рейтингом. Если таких страниц несколько, то выбирается та из
них, к которой дольш е всего не было обращений.
Д ля определения функции вычисления рейтинга нам понадо­
биться понятие окна наблюдения. О кно наблю дения задается
позицией наблюдения и длиной окна, и позволяет наблюдать н е ­
которую часть трассы обращ ений к страницам диска. Н а рис. 45
изображены три окна наблюдения: s0, v1и v2. Окно s0имеет длину
m = 18 и закреплено в позиции «1», соответствующей началу
трассы. Окна v1и v2имею т длину h = 3 и закреплены в позициях
«1» и «4» соответственно. Числа m и h являю тся параметрами
алгоритма LFU-2. П ри этом m должно быть кратно h.
Пусть ф ункции s0(r), v1(r) и v2(r) вычисляю т количество вхож­
дений страницы r в окна s0, v 1 и v2 соответственно. Определим
функцию вы числения рейтинга страниц следующим образом:

Рис. 45. Окна наблюдения


156 Глава 8. Буферизация в параллельных СУБД

Рис. 46. Поведение LFU-2 на периодической трассе

RLFU-2(r) = s0(r) + vl(r)m/h + (Vj(r) - v2(r))-(m/h)2/2.

Обозначим v(r) = v(r), a(r) = v:(r) —v2(r), t = m/h. Тогда функция


RLFU-2(r) преобразуется к виду

RLFU.2(r) = s0(r) + v(r)t + a(r)t22,

которы й напоминает формулу вы числения полож ения объекта,


движущ егося от точки s0 со скоростью v и ускорением a. Это
сходство не случайно, так как v(r) действительно вы числяет
скорость обращ ений к странице r как число обращ ений к r за
период времени, соответствующий отрезку трассы длины h. С о­
ответственно, a(r) вычисляет ускорение обращ ений к странице r
как разницу между v:(r) и v2(r).
Рассмотрим работу алгоритма LFU-2 на периодической трассе,
изображ енной на рис. 46. В данном случае m = 12, h = 3. Вычис­
лим текущ ий рейтинг страницы с номером 6. Д анная страница
имеет 2 вхождения в окно s0, 1 вхождение в окно v1и 0 вхождений
в окно v2. Следовательно,

Rlfu-2(6) = So(6) + Vi(6)m/h + (Vi(6) —v2(6))-(m/h)2/2 =


= 2 + 1-12/3 + (1 —0)-(12/3)2/2 = 2 + 4 + 42/2 = 14.

Аналогичным образом вычисляем RLFff2(1) = RLFff2(2) = 6 и


RLFff2(3) = —6. В соответствии с этим, при переходе от позиции
«1» к позици «—1» страница с номером 5 заместит в буфере стра-
Глава 8. Буферизация в параллельных СУБД 157

Рис. 47. Изменение содержимого буфер­


ного пула при прохождении периоди­
ческой трассы под управлением LFU-2.
Серым цветом помечены страницы,
которые будут замещены на следующем
шаге

ницу с номером 3, так как последняя


имеет наименьш ий рейтинг. Таким об­
разом, при использовании алгоритма
LFU-2 содерж имое буферного пула
длиной в четыре страницы будет меняться так, как это показано
н а рис. 47. П ри этом рейтинги страниц каждый раз будут пере­
считываться заново.
М ы видим, что на периодической трассе алгоритм LFU-2 будет
допускать 3 промаха на каждые 6 обращений, что составляет 50%.
Это несколько хуже, чем у алгоритма OPT, но значительно лучше
в сравнении с алгоритмом LRU-2.

§ 8.7. Формальное описание стратегии L F U -K

Общая стратегия LFU-K определяет целый класс стратегий для


различных неотрицательных целых значений параметра K. Пусть
N —количество кэшируемых страниц диска. Пусть

—некоторая трасса обращ ений к страницам диска, M > 1. При


этом меньш ее значение индекса соответствует более позд н е­
му по врем ени обращению . Пусть задано некоторое целое т,
1 < т < M. Для некоторой ф иксированной страницы i, 1 < i < N,
рассмотрим последовательность

к1.., к_,
i2’ . . . ’, к.i (8.6)
158 Глава 8. Буферизация в параллельных СУБД

Здесь к-j = 5irj для всех j, 1 < j < m ( 5.irj —символ Кронекера [7]:

5 ir = 1 , если i = r, и 5 ir = 0 , в противном случае). Пусть F.;(z) —


производящ ая ф ункция [7] для подпоследовательности

последовательности (8.6), 1 < l < m. По определению произво­


дящ ей ф ункции имеем
m

F ( - ) = S j •

j=
Пусть задано некоторое целое h , 1 < h < m . Определим

F f ( z ) = Fi| ( z )

FT](*) = Fl,n 1](z ) - F ^ ](z ) ,


для произвольного целого n > 0.
Положим

Обозначим t = m/h. Без существенного ограничения общности


мы можем полагать, что m всегда кратно h. Определим
К f nn

R LFU-K(i) = Z F n](1) - (8.7)


n=0 n !

для произвольного целого K > 0. В частности, имеем

R lfu-0(i) = F (1) = Ff0](1 ), (8.8)

R LFU-1
l fu -1 ( i ) = F [0]( 1 ) + F [1]( 1 ) , (8.9)

R LFU-2 (i = f [o](1)+ F i + f [2](1) 2 . (8.10)


Глава 8. Буферизация в параллельных СУБД 159

Очевидно, что формула (8.8) подсчитывает число вхождений


страницы i в последовательность

1’ г2’
г,, . , . . . ’, гm.

Если предположить, что вероятность обращ ения к странице i


не меняется со временем3, то формула (8.8) может быть исполь­
зована для оценки количества вхождений страницы i в последо­
вательность очередных m обращ ений к страницам диска:

Если же вероятность обращ ения к странице i изм еняется со


временем, то формула (8.9) может дать более точную оценку
количества вхождений страницы i в последовательность (8.11),
так как второе слагаемое в формуле (8.9) как раз содержит ф ак­
тор скорости изм енения частоты обращ ений к странице i. При
этом очевидно, что точность оценки будет зависеть от величины
параметров m и h.
Ф ормула (8.10) может дать еще более точную оценку за счет
фактора ускорения в третьем слагаемом, если фактор скорости сам
изменяется во времени. Таким образом, в общем случае мы п р и ­
ходим к формуле (8.7), которая дает нам следующее формальное
определение алгоритма LFU-K.
Формальное определение алгоритма LFU-K. Для каждой страни­
цы диска, находящейся в буфере, вычисляется значение функции
Rlfuk- Замещается страница, имею щ ая минимальное значение
RLFffK. Если таких страниц несколько, замещ ается та из них,
которая дольше всего находилась в буфере. П ри этом алгоритм
им еет два настраиваемых параметра m и h , удовлетворяющих
ограничениям 1 < h <m и 1 < m < M.
Очевидно, что при m = M алгоритм LFU-0 совпадает с извест­
ны м алгоритмом LFU. Однако для определенных вариантов за-
3 Все временные интервалы здесь измеряются в количестве последова­
тельных обращений к страницам диска (вне зависимости от того, находится
искомая страница в буфере или нет).
160 Глава 8. Буферизация в параллельных СУБД

грузки алгоритм LFU-K при K > 1 может показывать значительно


более высокую эффективность по сравнению с LFU и другими
известны ми алгоритмами.
Эффективность алгоритма LFU-K определяющим образом за­
висит от значений параметров m и h. Получение аналитических
оценок для оптимального выбора указанных параметров в общем
случае представляется нетривиальной задачей. В следующем пара­
графе мы дадим аналитическую оценку параметра m для различных
распределений вероятностей обращений к страницам диска.

§ 8.8. Аналитическая оценка параметра m


алгоритма L F U - K
Для получения аналитической оценки параметра m построим
вероятностную модель процесса обращ ения к страницам диска
в некоторой абстрактной системе баз данных. Н аш а модель и с ­
ходит из предположений, лежащих в основе модели IR M (Indepen­
dent Reference Model) из [20]. Пусть N —количество кэшируемых
страниц. Определим p . как вероятность обращ ения к странице
i, 1 < i< N. По определению имеем
N
Zi=1 Pi= 1 .
Предположим, что вероятности pi не меняются во времени и
распределяются по следующему закону [8, стр. 434]:

р. = т Н* . (8' 12)

Здесь H (N) = 1-s+2-s+ .. .+N-s—N -е гармоническое число поряд­


ка s, а 0 —коэф ф ициент перекоса, 0 < 0 < 1. П ри 0 = 0 получаем
p i = 1/N, то есть перекос отсутствует, что соответствует случаю
равномерного распределения. Значение 0 = 1 —log0,80/ log0,20
соответствует правилу «80—20» [8]. П ри 0 = 1 получаем
Глава 8. Буферизация в параллельных СУБД 161

1 1/ И
Pi = 7l H ( 1)

что соответствует закону Зипф а (Zipf) [8]. Для гармонических


чисел порядка r известно следующее приближение [19]:

) _ nl-r -1 1 m в 2к 1
И,

Z(r) + ■ + - -> +0 r+2m+1
(8.13)
1- r 2nr k=1 2kn r+2k~11 2k -1 П J

Здесь Z(r) —дзета-ф ункция Римана, а Bk —числа Бернулли [7].


Из (8.13) мы можем получить упрощенную формулу

nl-r -1 1
и Пг) =Z(r ) + + 0 (8.14)
1- r V J

Используя приближ ение (8.14), из (8.12) получаем

1
Р, ~- (8.15)
0 N 1-0 -1 ^
l Z(0) +
1- 0

В частности, вероятность обращ ения к самой «популярной»


в наш ей модели странице 1 может быть найдена по следующей
приближ енной формуле:
1
Ру * (8.16)
N 1-0-1
Z(0) +
1- 0
Исследуем влияние параметра m на эффективность алгоритма
LFU-K в контексте описанной модели. Прежде всего, заметим,
что в данном контесте limFi[n] = 0 , для n > 0 и h = m. Поэтому нам
достаточно исследовать алгоритм LFU-0. Имеем

lim Rlfu-o(i) = P i ■
m
162 Глава 8. Буферизация в параллельных СУБД

Это означает, что п р и увеличении зн ачен и я п арам етра m


эфф ективность алгоритма LFU-0 будет приближаться к эф ф ек­
тивности алгоритма A0, вытесняю щ его из буфера страницу с
м инимальной вероятностью обращения. К ак уже было сказано
вы ш е, алгоритм A0 является оптим альны м для статического
распределения вероятностей. Отсюда следует, что увеличение
значения m будет вести к повыш ению эфф ективности алгоритма
LFU-0. Однако для практической реализации нам необходима
некоторая мера, связывающ ая значение параметра m с эф ф ек­
тивностью алгоритма LFU-0.
Построим меру, связывающую значение параметра m с эф ф ек­
тивностью алгоритма LFU- 0. Пусть
rm. (8 .17)

представляет собой последовательность обращ ений к страницам


диска. Определим qjmk как вероятность того, что /-тая страница
встречается в данной последовательности k раз. Очевидно, что
0 < к < m. ( 8 .1 8 )

Пусть Gm(z) будет производящей функцией для последователь­


ности qimo, qimi, . . . , qimm.
Имеем

Я шк =Р ,Я ,,m-U-l + C1 - P i ) q , m-X k . (8.19)


По определению производящ ей ф ункции

G im ( Z ) = X Я ш к*к . ( 8 .2 0 )
к
Отсюда получаем

Gi 1 ( z ) = Я 10 + q 11 Z = 1 - Pi + Pi z = Pi ( z - 1) + 1 . ( 8 .2 1 )

Из (8.19) следует, что

G m ( Z ) = P i Z G i (m-1) ( Z ) + C1 - P i ) G i (m-1) ( Z ) = ( P i ( Z - 1 ) + (m-1) ( Z ) .


( 8 .2 2 )
Глава 8. Буферизация в параллельных СУБД 163

И з (8.21) и (8.22) находим

Gim(z) = (?. (z - l ) + l j . (8.23)

Используя биномиальную теорему, из (8.23) получаем

Gim(z) = ( pi (z -1 ) +1)Г = p Г (z + (1 - pi ) / Pl /
(8.24)

Сопоставляя (8.24) с (8.20), имеем

Используя формулу Стирлинга для приближенного вы числе­


ни я факториала:

n ! «>/2лй (n / e)n (eьn / e)n = Т2ЛПе(ьи-1)' , (8.26)

из (8.25) можно получить

Обозначим иГ = qi т,pm как вероятность того, что /-тая стра­


ница встречается в последовательности (8.17) k = p m 4 раз. Из
(8.25) находим

С помощ ью формулы (8.26) из (8.28) можно получить

4Без существенного ограничения общности можем считать, что pm всегда


является целым числом.
164 Глава 8. Буферизация в параллельных СУБД

1
(8.29)
2 п т ■P i (1 - P i)

Определим функцию f m(k ) = c[imk/iiim . Н а основании (8.27) и


(8.29), имеем
Pi (1 - P i ) ■m 1 - Pi (8.30)
fim(k ) = ^ = к m- к
1- -
m

Введем новую переменную x, связанную с переменной к со­


к
отнош ением x = . В силу (8.18) имеем
mPi
0 < x< 1 /p ..

Определим нормальную функцию v.m(x) н а интервале (0;1/p.)


следующим образом:
v m( х ) = f im(mpx).
i'
Отсюда, используя (8.30), получаем
mpx+1/2 m(1-Pix)+1/2
1- P (8.31)
Vm ( х ) =
vx 1- Pix
или в другом виде
- (mp;X+1/2)ln x+(m(1-P f x )+1/2) In 1 P P
Vm (X) = в 1-P'X (8.32)

Доопределим функцию vm(x) н а отрезке [0;1/p.] следующим


образом:
v . (0 )
im = v . ( 1 / p .) =
im v 0 .

Положим p = p { и vm(x) = v1m(x). Определим функцию


Vp
M (m ) = J Vm ( x )d x . (8.33)
0
Глава 8. Буферизация в параллельных СУБД 165

Рис. 48. Вариации


v(x) для различ­
ных значений p при
m = 32000

Д анная ф ункция
определяет меру, свя­
зывающую значение
параметра m с эф ф ек­
тивностью алгоритма
LFU-0. Действитель­
но, чем меньш е зна­
чение меры M , тем точнее может быть определена величина p .
по формуле
p. = k/m, (8.34)

где k —число вхождений i в последовательность (8.17).


И з рис. 48 видно, что при ф иксированном m большим значе­
ниям вероятности p соответствует меньш ее значение меры M.
Д анны й результат является закономерным, так как чем больше
вероятность обращ ения к странице i, тем меньш ий участок трас­
сы нам необходим для определения этой вероятности по формуле
(8.34) с заданной точностью. В свою очередь, рис. 49 показы ­
вает, что при увели­
чении значения m
при фиксированном
p значение м еры M
у м ен ьш ается. Д а н ­
ны й результат также
п р е д с т а в л я е тс я за-

Рис. 49. Вариации


v(x) для различ­
ных значений m при
p = 0,01
166 Глава 8. Буферизация в параллельных СУБД

кономерным, так как чем больший участок трассы мы анализи­


руем, тем точнее формула (8.34) будет определять вероятность
обращ ения к странице с номером i.
Однако мера, определяемая формулой (8.33), не может быть
использована для практического определения величины параме­
тра т, так как представляется затруднительным найти обратную
функцию m(M). М ы попытаемся решить данную проблему путем
разложения норм альной функции vim(x) в ряд Тейлора, чтобы
затем перейти к некоторой приближенной мере М (m) , которая
может быть на практике использована для вы числения значе­
ни я т. П остроим разложение норм альной ф ункции vim(x) в ряд
Тейлора в точке х = 1.
Из (8.35) несложно получить

Обозначим

(8.36)

Тогда (8.35) можно переписать в виде:

(8.37)

(8.38)

Используя (8.37) и (8.38), получаем

V "im ( Х ) = ( V im ( Х ) • Ф(Х )У = V im ( Х ) ' Ф (Х ) + V im ( x ) ' Ф '( Х ) ( 8 3 9 )

= V im (Х ) • ф 2 (Х ) + V im ( Х ) • Ф' (Х У

Из (8.31) находим
Глава 8. Буферизация в параллельных СУБД 167

V-m(1) = 1. (8.40)
Используя (8.36), вычисляем
Pi -1/2 (8.41)
Фт (1) =
1 -Pi
Используя (8.37), с учетом (8.40) и (8.41), имеем
Pi - У2 (8.42)
vm(1) = Vm(1)' Фт (1) = ■
1- Pi
Используя (8.38), вычисляем

ф (1) = m
p l - P‘ - mP‘ + P i+ V2 (8.43)
(1 - Pi )2
Используя (8.39), с учетом (8.40), (8.41), (8.42) и (8.43), находим
mPi(1 - Pi) - 3/ 4 (8.44)
vm (1) = Фи(1) + ФС, (1) = - -
(1 - P i ) 2

Используя (8.40), (8.42) и (8.44), получаем для V/т(х) разложение


в ряд Тейлора в точке x = 1:
12 - Pi,„ 1Ч mPi (1 - Pi) - 3/ 4 /„
(х - 11)2
Ч2 + R(х) (8.45)
Vim(х) = 1-
- L(х - 1) -
1- Pi 2(1 - Pi )2
с остаточным членом

= Vim(9' (х 1)1 (х - 1)3, где 9 е (0,1).


r (x)
6
Определим н а основе формулы (8.45) функцию Vim(х), являю ­
щуюся приближ ением для Vm(x):V

Vm(х) = - mPf : P-}f 4 (х -1 )2 - ^ (х -1) + 1.


2(1 - Pi) 1- Pi
П ри достаточно больш их m граф и к ф ун кц и и V/m(х) п р ед ­
ставляет собой параболу с верш иной в точке (1;1) и ветвями,
направленны ми вниз. Следовательно, уравнение V/m(х) = 0 им е­
ет два вещ ественных корня х: и x2. Предположим, что x: < x2.
Определим ф ункцию
168 Глава 8. Буферизация в параллельных СУБД

х2
M(m) = j v im(x)dx. (8.46)
x
Д ан н ая ф у н кц и я м ож ет служить приближенной мерой для
определения величины т . Действительно, чем меньше значение
интеграла (8.46), тем точнее будет определяться вероятность
вы борки страницы по числу ее вхождений в трассу длины т.
Таким образом, мы можем задать некоторое ф иксированное
положительное число E и выбирать значение т как наименьш ее
натуральное число такое, что

М (m) < E . (8.47)

Для больших т справедливо соотнош ение

m P i (1 -Pi) - 3/4 ^ V2 - p i .
2(1 - Pi)2 1- P i

То есть мы можем считать, что для больших т величина и н ­


теграла (8.46) пропорциональна mPi(i—pil—34 . Отсюда следует,
2(i - Pi)2
что соотнош ение (8.47) равносильно соотнош ению

mP,(l - р ,) - З /4 > д , (8.48)


2(i - Pi )2
где А = CE для некоторой константы C > 0. Найдем оценку для
величины А. Д ля и 0 = 0,5 « 1 —log0,45/log0,20 и N = 32000, из
(8.12) находим р 1« 0,0029.
К ак показывает рис. 505 (график для 0 = 0,5), приемлемую
точность для экспериментальной оценки величины р 1 можно
получить при т = 500000. Подставляя указанные значения т и
р 1в (8.48), получаем А < 727. П оложим А = 700. Тогда из (8.48)
получаем
5 На рис. 50 изображены графики для «точной» меры, определяемой
формулой (8.33).
Глава 8. Буферизация в параллельных СУБД 169

Рис. 50. Вариации М (т) для различных распределений при


N = 32000

Д2(1 - а)2 + 3/4 Д2(1 - p ,)2


от > 1 > 1 = 2Д(1/ -1 ).
Pi(1 - Р,) Pi(1 - Pi)
Отсюда, используя формулы (8.12) и (8.15), находим оконча­
тельную формулу для аналитической оценки параметра т :

В качестве проверки, оценим по полученной формуле зна­


чение т для коэф ф ициента перекоса 0 = 0,5 при N = 32000.
С помощ ью формулы (8.13) находим Z(0,5) « 0,54. Подставляя
данны е значения в формулу (8.49), получаем т > 497435. Анало­
гичным образом оценим значение т для коэф фициента перекоса
0 = 0,86 « 1 —log0,80/log0,20 при N = 32000. Используя формулу
(8.13), находим Z(0,86) « 0,57. Подставляя данны е значения в
формулу (8.49), получаем т > 32127. Найденные таким образом
170 Глава 8. Буферизация в параллельных СУБД

границы для m прекрасно согласуются с граф икам и «точной»


меры M(m), изображенными н а рис. 50. Действительно, на рисун­
ке видно, что обе границы для m соответствуют приблизительно
одному и тому же значению меры M ( m ).

§ 8.9. Реализация алгоритма L F U -K

В этом параграфе мы сначала опиш ем реализацию стратегии


замещ ения LFU-2 в виде алгоритма, названного нам и LFU-2m.
Затем мы рассмотрим возможность обобщ ения предлож енной
реализации для LFU-K при K > 2.
Схема реализации алгоритма LFU-2m н а псевдокоде приведена
н а рис. 51. В данной реализации мы использовали следующие
структуры данных:
— BUF —буферный пул ф иксированной длины;
— DIR —избыточны й индекс буферного пула. DIR[r] обозна­
чает элемент DIR (индекс), соответствующий странице с
номером г;
— Squeue — очередь длины m, содержащая m последних эле­
ментов трассы;
— Vqueuel —очередь длины h (h < m/2), содержащая h послед­
них элементов трассы;
— Vqueue2 —очередь длины h , в которую помещаю тся элемен­
ты, удаляемые из Vqueue1.
Индекс буферного пула DIR [16] представляет собой хеш-таблицу
в оперативной памяти, элементы которой называются индексами
и содержат необходимую для работы алгоритма статистическую
информацию о буферизуемых страницах. Размер DIR является
параметром реализации и может варьироваться от значения,
равного длине буфера, до значения, равного количеству всех
буферизуемых страниц базы данных. DIR не содержит в себе
образы страниц. Вместо этого в DIR помещ аю тся указатели на
образы страниц, загруженных в буфер. П ри обращении к очеред­
н ой странице диска проверяется наличие ее индекса в DIR. Если
Глава 8. Буферизация в параллельных СУБД 171

/* Процедура. выполняемая при обращении к странице с . * j


/* Вставка я RTR- */
if индекс г отсутствует в D IP then
if DIfi переполнен then
вытеснить из D IR индекс странииы с минимальным
рейтингом
end if
поместить индекс г в £>ffi
запомнить в DJR(r] время помещения индекса г в D1R
end if
/* вставка в E-UF _ */
if страница DIflfr] отсутствует в S U F then
if i:Г_г_"'переполнен then
вытеснить из S V F страницу с минимальным; рейтингом
end if
поместить г в PU F
запомнить ь PfRirJ зремч помещении г 6 ВОТ
запомнить в ЕНЩг1, НТО Г Накопится г BUF
end if
/* ВОТ*ВК* Ш 5 queue : */
if Squ'cuc переполнена then
удалить элемент из начала Squeoe
end if
добавить номер т в коней Squeue
/ * Вставка в Vqueue; */
if Vqb'eue^ переполнена then
удалить элемент из начала V q u eu e2
end if
if l/queoel переполнена then
удалить элемент из начала VqpeoeJ и поместить его в конец
Vqu9tlQ2
end if
д о б ав и ть номер г в конец

Рис. 51. Схема реализации алгоритма LFU-2m

индекс указанной страницы в DIR отсутствует, то происходит


добавление нового индекса в DIR. Если при этом оказывается,
что DIR переполнен, происходит предварительное вытеснение
некоторого индекса из DIR. Поиск жертвы осуществляется только
среди индексов DIR, соответствующих незагруженным в данный
момент в буфер страницам. П ри этом используется та же стратегия
замещения, что и для буферизованных страниц. Использование
избыточного индекса буферного пула DIR позволяет существен­
ны м образом повысить эффективность алгоритма LFU-2m.
172 Глава 8. Буферизация в параллельных СУБД

V queuel \ц и а н е 2

-- лГ----- л
> Г2» ' * 4 ^H+h 'fr+2i 4 r 4 i ^2*ft* r 4 * <* ^Jtt* f ч r s ^iW
L___________________________________________ I
Squeue
Рис. 52. Схема работы очередей Squeue, Vqueuel и Vqueue2 (мень­
шее значение индекса элемента трассы соответствует более поздне­
му по времени обращению)

Схема работы очередей Squeue, Vqueuel и Vqueue2приведена на


рис. 52. Д анны е очереди используются для подсчета рейтингов
страниц в соответствии со стратегией LFU-2. В упрощенном виде
формула вы числения рейтинга страницы r выглядит следующим
образом:

р е й т и н г ( г) = s(r) + vx(r)t + ( v^r ) — v2( r) ) t2/ 2 .

Здесь t = m/h, s(r) —количество вхождений r в очередь Squeue,


v(r) —количество вхождений r в очередь Vqueuel, v2(r) —количество
вхождений r в очередь Vqueue2. Очевидно, что данная формула со­
ответствует формуле (8.10) из параграфа 8.7. Однако для практиче­
ского использования она не вполне пригодна. Для уяснения этого
факта рассмотрим рис. 53, на котором изображены флуктуации
суммы абсолютных ускорений As, вычисляемой по формуле

A s = Z k (r) - v 2 ( r ) . ( 8 .5 0 )
r

Этот граф ик был получен путем компьютерного моделиро­


вания трассы со стационарным распределением вероятностей
обращ ений по правилу «80—20» для базы данных, состоящ ей из
32000 страниц. В указанном эксперименте было выбрано значе­
ние параметра h равное 2500. Правило «80—20» часто встречается
в приложениях баз данных [8]. Таким образом, использованная
искусственная трасса достаточно хорошо отражает работу ре­
альной системы баз данных. П оскольку было использовано ста-
Глава 8. Буферизация в параллельных СУБД 173

Рис. 53. Флуктуации суммы абсолютных ускорений As для стационар­


ного распределения по правилу «80-20» при h = 2500 для базы дан­
ных, состоящей из 32000 страниц

ционарное распределение, при котором вероятность обращ ения


к той или иной странице не меняется со временем, м ы вправе
ожидать, что сумма абсолютных ускорений As, вычисляемая по
формуле (8.50), будет всегда равна нулю. Однако приведенный
эксперимент показывает, что это далеко не так. Учитывая, что
lim As = 0 , м ы могли бы поправить ситуацию, увеличивая зна­
чение параметра h. Но м ы не можем произвольны м образом
увеличивать h, так как это снижает эффективность алгоритма
для трасс с динамическим распределением вероятностей. Для
реш ения проблемы отклонения As от нулевого значения в случае
стационарного распределения введем дополнительный параметр
A , задающий границу для ненулевых ускорений. Используя этот
параметр, модернизируем формулу (8.50) следующим образом:
174 Глава 8. Буферизация в параллельных СУБД

h ( r ) - v2(r )| (8.51)
л = Е
r A,

В приведенном эксперименте уже при At = 100 формула (8.51)


в подавляющ ем большинстве случаев выдавала для As значение
ноль. Руководствуясь этими рассуждениями, целесообразно и с ­
пользовать в LFU-2m следующую уточненную формулу вычисления
рейтинга страниц:

рейтинг(г) = s(r) + sign(Aj)-(v1(r)t + (v1(r) —v2(r))t2/2).

В целях уменьш ения накладных расходов значения v1и v2для


всех страниц вы числялись инкрем ентно и сохранялись в DIR
[16]. Значение As сохранялось в статической переменной и тоже
вычислялось инкрементно.
Алгоритм LFU-2m может быть достаточно легко м одиф ициро­
ван для использования в качестве реализации стратегии LFU-K
при значениях K, больших двух. П ри этом нам будет необходимо
поддерживать K очередей Vqueue1, . . . , VqueueKдля вы числения
всех слагаемых в формуле (8.7). Однако, как показываю т наш и
эксперименты, использование алгоритма LFU-Km при K > 2 на
практике нецелесообразно. Н и в одном из проведенных э к с ­
периментов алгоритм LFU-3m не смог показать заметного п р и ­
ращ ения эфф ективности по сравнению с алгоритмом LFU-2m.
Литература

1. Воеводин Вл.В., Капитонова А.П. Методы описания и классификации


архитектур вычислительных систем. М: Изд-во МГУ, 1994. 103 с.
2. Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. СПб.: БХВ-
Петербург, 2002. 600 с.
3. ВолковА.А. Тесты ТРС / / СУБД, 1995, №. 2. C. 70-78.
4. Гарсиа-Молина Г., Ульман Дж., Уидом Дж. Системы баз данных. Пол­
ный курс. М.: ИД «Вильямс», 2004. 1088 с.
5. Губин М.В., Соколинский Л.Б. Об оценке коммуникационных затрат при
обработке фрагментированного отношения для равномерного распре­
деления / / Вестник ЮУрГУ. Серия «Вычислительная математика и ин­
форматика». 2012. № 2.
6. Кодд Е.Ф. Реляционная модель для больших совместно используемых
банков данных / / СУБД, 1995, №. 1. C. 145-169.
7. Кнут Д.Э. Искусство программирования, т. 1. Основные алгоритмы, 3-е
изд. М.: ИД «Вильямс», 2000. 720 с.
8. Кнут Д.Э. Искусство программирования, т. 3. Сортировка и поиск, 2-е
изд. М.: ИД «Вильямс», 2000. -832 с.
9. Когаловский М.Р . Энциклопедия технологий баз данных. М.: Финансы
и статистика, 2002. 800 с.
10. Корнеев В.В. Параллельные вычислительные системы. М.: Нолидж,
1999. 320 с.
11. Кузнецов С.Д. Базы данных. Модели и языки: учеб. для вузов. М.: Би­
ном, 2008. 720 с.
12. Соколинский Л.Б. Организация параллельного выполнения запросов в
многопроцессорной машине баз данных с иерархической архитектурой
/ / Программирование. 2001. № 6. C. 13-29.
13. Соколинский Л.Б. Параллельные машины баз данных / / Природа.
Естественно-научный журнал Российской академии наук. 2001. №8.
С. 10-17.
14. Соколинский Л.Б. Эффективный алгоритм замещения страниц для бу­
феризации обменов с дисками в параллельной системе баз данных без
совместного использования ресурсов / / Вычислительные методы и
программирование. 2002. Том 3, №1. C. 113-130.
15. Соколинский Л.Б. Обзор архитектур параллельных систем баз данных / /
Программирование. 2004. No. 6. С. 49-63.
176 Литература

16. СоколинскийЛ.Б., Цымблер М.Л. Принципы реализации системы управ­


ления файлами в параллельной СУБД Омега для МВС-100 / / Вест­
ник Челябинского университета. Сер. 3. Математика, механика. 1999.
№2(5). С. 176-199.
17. Стивенс Р., Раго С. UNIX. Профессиональное программирование, 2-е
издание. СПб.: Символ-Плюс, 2007. 1040 с.
18. Таненбаум Э. Современные операционные системы. 3-е изд. СПб.: Пи­
тер, 2010. 1120 с.
19. Титчмарш Е.К. Теория дзета-функции Римана. М.: ИЛ, 1953. 346 с.
20. Coffman E.G., Denning P.J. Operating Systems Theory. Prentice-Hall, 1973.
21. Copeland G.P., Keller T. A Comparison Of High-Availability Media Recovery
Techniques / / Proceedings of the 1989 ACM SIGMOD International
Conference on Management of Data, Portland, Oregon, May 31 —June 2,
1989. ACM Press, 1989. P. 98—109.
22. Effelsberg W., Haerder T. Principles of Database Buffer Management / / ACM
Trans. on Database Systems. 1984. Vol. 9, No. 4. P. 560—595.
23. LakshmiM.S., Yu P.S. Effectiveness of Parallel Joins / / IEEE Transactions on
Knowledge and Data Engineering. 1990. Vol. 2, No. 4. P. 410—424.
24. Lee D , Choi J , Ki m J.-H , Noh S.H., M i n S.L., Cho Y., Kim C.-S . On the
existence of a spectrum of policies that subsumes the least recently used (LRU)
and least frequently used (LFU) policies / / SIGMETRICS ‘99, International
Conference on Measurement and Modeling of Computer Systems, May 1—4,
1999, Atlanta, Georgia, USA, Proceedings. 1999. P. 134—143.
25. O’N eilE .J, O’NeilP.E., Weikum G. The LRU-K Page Replacement Algorithm
For Database Disk Buffering / / Proceedings of the 1993 ACM SIGMOD
International Conference on Management of Data, Washington, D.C., May
26—28, 1993. ACM Press, 1993. P. 297—306.
26. O’NeilE.J., O’NeilP.E., Weikum G. An optimality proof of the LRU-K page
replacement algorithm / / Journal of the ACM. 1999. Vol. 46, No. 1. P. 92—
112.
27. Robinson J.T., Devarakonda M.V. Data Cache Management Using
Frequency-Based Replacement / / 1990 ACM SIGMETRICS Conference on
Measurement and Modeling of Computer Systems, University of Colorado,
Boulder, Colorado, USA, May 22—25, 1990, Proceedings. 1990. P. 134—142.
28. Smaragdakis Y., Kaplan S , Wilson P.R. EELRU: Simple and Effective
Adaptive Page Replacement / / SIGMETRICS ‘99, International Conference
on Measurement and Modeling of Computer Systems, May 1—4, 1999,
Atlanta, Georgia, USA, Proceedings. 1999. P. 122—133.
29. Stonebraker M. The case for shared nothing / / Database Engineering Bulletin.
1986. Vol. 9, No. 1. P. 4—9.
Предметный указатель

A0, стратегия замещения, 139 NUMA, архитектура, 35


buf, атрибут, 61 open, метод, 59
bufIsEmpty, атрибут, 62 OPT, стратегия замещения, 134, 153
CD, архитектура, 40 pointer, атрибут, 70
CD2, архитектура, 41 produce, метод, 62
CDN, архитектура, 43 quit, атрибут, 61
CE, архитектура, 40 release, метод, 62, 65
CLOCK, стратегия замещения, 146 restart, метод, 62
close, метод, 59 rightSon, атрибут, 61
CN, архитектура, 40 root_thread, нить, 63
condition, метод, 66 scatter, оператор, 93
Cмежные поддеревья DM-дерева, 101 SD, архитектура, 39
DM-граф, 96 SE, архитектура, 37
DM-дерево, 97 SMP, архитектура, 34
EOF, специальный кортеж, 59 SN адекватность, требование к стра­
FBR, стратегия замещения, 148 тегии замещения, 135
gather, оператор, 93 SN, архитектура, 39
GCLOCK, стратегия замещения, 146 split, оператор, 92
init, метод, 62 SQL-оператор. См. Оператор SQL
inner_thread, нить, 64 thread_create, системная функция, 65
leftSon, атрибут, 61 tuple_join, метод, 66
LFU, стратегия замещения, 142 Автономность, требование к страте­
LFU-2, стратегия замещения, 155 гии замещения, 135
LFU-K, стратегия замещения, 157 Адекватность по Зипфу, требование
LRD, стратегия замещения, 147 к стратегии замещения, 135
LRU, стратегия замещения, 140 Адекватность по индексу, требова­
LRU-K, стратегия замещения, 149 ние к стратегии замещения, 135
mem, атрибут, 70 Алгоритм замещения страниц, 134
merge, оператор, 93 Асинхронный конвейер, 25, 75
MHJ, алгоритм, 111 Атрибутная фрагментация, 85
MPP, архитектура, 35 Атрибутно-зависимая реляционная
mutex, 73 операция, 86
next, метод, 59 Балансировка загрузки, 51, 115
NLDJ, алгоритм, 65 Буфер. См. Буферный пул
NLMJ, алгоритм, 69 Буферный пул, 133
NULL, пустая ссылка, 61 Вертикальная фрагментация, 26
178 Предметный указатель

Вертикальный параллелизм. См. Кон­ Межоперационный параллелизм, 24


вейерный параллелизм Межтранзакционный параллелизм,
Виртуальная параллельная машина 22
баз данных, 28, 30 Многоуровневая архитектура, 39
Виртуальная соединительная сеть, 29 Мультимножество, 82
Виртуальное устройство, 28 Мьютекс, 73
Виртуально-иерархическая класси­ Нормальная функция зеркалирова­
фикация, 36, 42 ния, 125
Виртуальный диск, 29 Обобщенное распределение Зипфа.
Виртуальный модуль памяти, 29 См. Распределение Зипфа обобщен­
Виртуальный процессор, 28 ное
Внутризапросный параллелизм, 23 Общая стратегия замещения, 135, 145
Внутриоперационный параллелизм, Одноуровневая архитектура, 36
25 Оператор SQL, 21
Внутритранзакционный параллелизм, Оператор пересылки, 86
23 Опорное отношение, 66
Высота дерева, 97 Организация блокировок, 50
Горизонтальная фрагментация, 27 Пакет, 103
Горизонтальный параллелизм. См. Параллельная система баз данных, 27
Кустовой параллелизм Параллельный агент, 17
Доменная функция, 84 Параллельный план, 17, 24
Допустимость фрагментации, 83 Перекос данных, 51
Доступность данных, 52 Переменная состояния, 73
Закон Зипфа, 138, 161 Периодическая трасса обращений,
Иерархическая архитектура, 39, 40 140
Изоморфизм DM-деревьев, 100 План выполнения запроса, 16
Итератор, 59 Порт обмена, 89
Классификация Стоунбрейкера. См. Последовательный план, 16, 23
Стоунбрейкера классификация Правило «80—20», 138, 160
Кластер, 36 Правильно нагруженное симметрич­
Когерентность кэшей, 50 ное DM-дерево, 122
Комбинированная стратегия заме­ Процесс базы данных, 28
щения, 137 Распределение Зипфа обобщен­
Конвейер, 25 ное, 138
Конвейерный параллелизм, 24 Расширение классификации Стоун-
Кустовой параллелизм, 24 брейкера, 40
Линейная расширяемость, 47 Расширяемость, 47
Линейное ускорение, 46 Регулярное DM-дерево, 98
Локальность обращения, 140 Реплика фрагмента, 116
Масштабируемость, 47 Репликации функция, 117
Межзапросный параллелизм, 23 Сегмент фрагмента, 116
Предметный указатель 179

Симметричное DM-дерево, 101 Трудоемкость уровня, 122


Синхронный конвейер, 25, 61, 63 Т-фактор, 76
Склад, 25, 75 Уровень поддерева DM-дерева, 101
Специальная стратегия замещения, Уровень узла дерева, 97
136, 142 Ускорение, 46
Степень дерева, 103 Фактор-функция, 76
Степень параллелизма, 21 Формы параллелизма, 21
Степень уровня симметр DM-ичного Фрагмент отношения, 81
дерева, 103 Фрагментация, 26
Стоунбрейкера классификация, 39 Фрагментно-независимая операция,
Страничная организация дисковой 82
памяти, 132 Фрагментный параллелизм, 26
Стратегия замещения страниц, 134 Функциональная зависимость от
Структурно-функциональная клас­ атрибута, 84
сификация, 34 Функция пересылки, 89
Таблица блокировок, 51 Функция репликации. См. Реплика­
Такт, 103, 106 ции функция
Тестируемое отношение, 66 Функция трудоемкости, 100
Транзакция SQL, 21 Функция фрагментации, 81
Трасса, 149 Хорошая масштабируемость, 47
Трасса обращений к страницам дис­ Частичная реплика фрагмента, 116
ка, 134 Шаблон доступа к базе данных, 136
Требования к параллельной системе Ярус дерева, 97
баз данных, 45
National Research South U ral State U niversity

Leonid Sokolinsky

Parallel Database
Systems

Manual

The main goal of the manual is to present the basic concepts


of parallel database technologies. The special attention is
paid to issues concerning DBMS implementation on cluster
systems. The classification of parallel transaction processing
forms is given. The comparative analysis of parallel database
system architectures is proposed. The possible technological
approaches to organizing parallel query execution. The
iterators, synchronous and asynchronous pipelines are
discussed. Data fragmentation and exchange are explained.
An approach to the automatic conversion of the sequential
query plan into a parallel plan is proposed. Considerable
attention is paid to issues concerning parallel database
system simulation and effective buffering technique for the
fragment parallelism.
The manual is intended for graduate, postgraduate
students and scientists specializing in development of
parallel database system technologies and application
of these for big data processing on modern many-core
multiprocessor clusters.
Key words: parallel database system, fragment parallelism,
asynchronous pipeline, load balancing, simulation of parallel
transaction processing, LFU-K algorithm.
Contents
Introduction .............................................................................................. 9

PART I. PARALLEL DATABASE SYSTEM ARCHITECTURE

Chapter 1. Basic Concepts ..................................................................................... 15


§ 1.1. Introduction to parallel query processing .................................... 15
§ 1.2. Forms of parallel transaction processing ...................................... 21
§ 1.3. Parallel database system definition ............................................. 27
Chapter 2. Parallel architecture classification ................................................... 33
§ 2.1. Structured-functional classification ............................................. 34
§ 2.2. Virtual-hierarchical classification ............................................... 37
Chapter 3. Requirements to parallel database system ....................................... 45
§ 3.1. Scalability ...................................................................................... 45
§ 3.2. Performance ................................................................................. 47
§ 3.3. Data availability ............................................................................ 52
§ 3.4. Comparative analysis of parallel database system architectures ... 53

PART II. PARALLEL DATABASE SYSTEM TECHNOLOGIES

Chapter 4. Query execution .................................................................................. 59


§ 4.1. Iterators ......................................................................................... 59
§ 4.2. Synchronous pipeline ................................................................... 61
§ 4.3. Asynchronous pipeline ................................................................. 75
Chapter 5. Data distribution .................................................................................. 81
§ 5.1. Data partitioning .......................................................................... 81
§ 5.2. Data transfer ................................................................................. 86
§ 5.3. Exchange operator ....................................................................... 89
Chapter 6. Parallel database system simulation ................................................ 94
§ 6.1. Graph theory definitions ............................................................... 94
§ 6.2. Model of hardware platform ......................................................... 95
§ 6.3. Model of operation environment .............................................. 103
§ 6.4. Cost model ................................................................................... 106
§ 6.5. Transaction model ...................................................................... 107
Chapter 7. Load balancing ...................................................................................... 115
§ 7.1. Data segmentation and replication ............................................. 115
§ 7.2. Mirroring on symmetric DM-tree .............................................. 117
§ 7.3. Mirror function ............................................................................ 122
§ 7.4. Load balancing algorithm ............................................................. 128
Chapter 8. Buffering in parallel D B M S ............................................................. 132
§ 8.1. Buffering and page replacement .................................................... 132
182 Contents

§ 8.2. Requirements to strategy for page replacement ......................... 134


§ 8.3. LRU and LFU strategies ............................................................. 140
§ 8.4. Special strategies for page replacement ....................................... 142
§ 8.5. General strategies for page replacement ....................................... 145
§ 8.6. LFU-2 algorithm .......................................................................... 155
§ 8.7. Formal description of LFU-Kstrategy ......................................... 157
§ 8.8. Analytical evaluation of m parameter of LFU-K algorithm ....... 160
§ 8.9. Implementation of LFU-K .......................................................... 170
Bibliography ............................................................................................................... 175

Index ........................................................................................................................... 177


Учебное издание

Леонид Борисович Соколинский

Параллельные системы
баз данных

Редактор М. С. Кутасова
Оформление переплета
П. А. Брызгалов, Ю. Н. Симоненко
Корректор М. С.Кутасова
Верстка Е. Н. Берлова
Подписано в печать 28.11.2012
Формат 60x 84/16. Гарнитура Times.
Офсетная печать. Бумага офсетная № 1.
Усл. печ. л. 10,7. Тираж 2 000 экз.
Изд. № 9913. Заказ №
Ордена «Знак Почета»
Издательство Московского университета
125009, Москва, ул. Б. Никитская 5/7.
Тел.: (495) 629-50-91. Факс: (495) 697-66-71
(495) 939-34-93 (отдел реализации)
E-mail: secretary-msu-press@yandex.ru
Сайт Издательства М ГУ:
www.msu.ru/depts/MSUPubl2005
Интернет-магазин: http://msupublishing.ru
Адрес отдела реализации:
Москва, ул. Хохлова, 11 (Воробьевы горы, МГУ).
E-mail: izd-mgu@yandex.ru Тел.: (495) 939-34-93
Отпечатано в ППП «Типография „Наука“»
121099, Москва, Шубинский пер. 6
Цель учебного пособия состоит в изложении основ технологий параллельных
систем баз данных. Особое внимание уделяется вопросам реализации СУБД для
кластерных систем. Дается классификация известных форм параллельной обра­
ботки транзакций. Приводится сравнительный анализ различных архитектур па­
раллельных систем баз данных. Рассматриваются возможные технологические
подходы к организации параллельной обработки запросов. Обсуждается итераци­
онная модель, синхронный и асинхронный конвейеры. Излагаются методы фраг­
ментации данных и способы организации межпроцессорных обменов. Предлагается
подход к автоматическому преобразованию последовательного плана выполнения
запроса в параллельный. Большое внимание уделяется вопросам моделирования
параллельных систем баз данных и организации эффективной буферизации в ус­
ловиях использования фрагментного параллелизма.
Книга ориентирована на студентов, аспирантов и научных работников, специа­
лизирующихся в области разработки технологий параллельных систем баз данных
и их применения для обработки сверхбольших объемов данных на современных
многоядерных и многопроцессорных системах с кластерной архитектурой.

ISBN 978-5-211-064В2-9
Издательство
М о сковского
университета
9 785211 064829

Вам также может понравиться