ВУЗ:
Составители:
Рубрика:
75
традиционном языке программирования (PL/1, Cobol, ассемблер) с включением
предложений SQL, или в динамике выполнения транзакции при выполнении предложения
PREPARE. С точки зрения пользователей процесс компиляции в System R* приводит к
тем же результатам, что и в System R: для каждого предложения SQL образуется
программа к машинных кодах (секция модуля доступа), вызовы которой помещаются в
текст исходной прикладной программы.
Однако, в действительности процесс компиляции запроса в System R* намного более
сложен, чем в System R, что и естественно по причине гораздо более сложных сетевых
взаимодействий, которые потребуются при реальном выполнении транзакции.
Распределенная компиляция запросов в System R* включает множество технических
ухищрений и тонкостей. Мы не будем касаться их всех в этой статье по причинам
недостатка информации и ограниченности объема. Рассмотрим только общую схему
распределенной компиляции.
Будем называть главным узлом тот узел сети, в котором инициирован процесс
компиляции предложения SQL, и дополнительными узлами - те узлы, которые
вовлекаются в этот процесс в ходе его выполнения. На самом грубом уровне процесс
компиляции можно разбить на следующие фазы:
1. В главном узле производится грамматический разбор предложения SQL с
построением внутреннего представления запроса в виде дерева. На основе
информации из локального каталога главного узла и удаленных каталогов
дополнительных узлов производится замена имен объектов, фигурирующих в
запросе, на их системные идентификаторы.
2. В главном узле генерируется глобальный план выполнения запроса, в котором
учитывается лишь порядок взаимодействий узлов при реальном выполнении
запроса. Для выработки глобального плана используется расширение техники
оптимизации, применяемой в System R. Глобальный план отображается в
преобразованном соответствующим образом дереве запроса.
3. Если в глобальном плане выполнения запроса участвуют дополнительные узлы,
производится его декомпозиция на части, каждую из которых можно выполнить
в одном узле (например, локальная фильтрация отношения в соответствии с
заданным в условии выборки предикате ограничения). Соответствующие части
запроса (во внутреннем представлении) рассылаются в дополнительные узлы.
4. В каждом узле, участвующем в глобальном плане выполнения запроса (главном
и дополнительных) выполняется завершающая стадия выполнения компиляции.
Эта стадия включает, по существу, две последние фазы процесса компиляции
запроса в System R: оптимизацию и генерацию машинных кодов. Производится
проверка прав пользователя, от имени которого производится компиляция, на
выполнение соответствующих действий; происходит обработка представлений
базы данных (здесь имеются тонкости, связанные с тем, что представления могут
включать удаленные отношения; ниже мы еще остановимся на этом, а пока
будем считать, что в запросе употребляются только имена базовых отношений);
осуществляется локальная оптимизация обрабатываемой части запроса в
соответствии с имеющимися индексами; наконец, производится генерация кода.
Управление транзакциями и синхронизация
Выполнение транзакции в распределенной системе управления базами данных
System R*, естественно, является распределенным. Транзакция начинается в главном узле
при обращении к какой-либо секции ранее подготовленного (на этапе компиляции)
модуля доступа. Как и в System R, модуль доступа загружается в виртуальную память
задачи, обращение к секции модуля доступа - это вызов подпрограммы. Однако, в отличие
от System R, эта подпрограмма, кроме своего локального программного кода и вызовов
функций RSS, содержит еще и вызовы удаленных подсекций модуля доступа. Эти вызовы
традиционном языке программирования (PL/1, Cobol, ассемблер) с включением
предложений SQL, или в динамике выполнения транзакции при выполнении предложения
PREPARE. С точки зрения пользователей процесс компиляции в System R* приводит к
тем же результатам, что и в System R: для каждого предложения SQL образуется
программа к машинных кодах (секция модуля доступа), вызовы которой помещаются в
текст исходной прикладной программы.
Однако, в действительности процесс компиляции запроса в System R* намного более
сложен, чем в System R, что и естественно по причине гораздо более сложных сетевых
взаимодействий, которые потребуются при реальном выполнении транзакции.
Распределенная компиляция запросов в System R* включает множество технических
ухищрений и тонкостей. Мы не будем касаться их всех в этой статье по причинам
недостатка информации и ограниченности объема. Рассмотрим только общую схему
распределенной компиляции.
Будем называть главным узлом тот узел сети, в котором инициирован процесс
компиляции предложения SQL, и дополнительными узлами - те узлы, которые
вовлекаются в этот процесс в ходе его выполнения. На самом грубом уровне процесс
компиляции можно разбить на следующие фазы:
1. В главном узле производится грамматический разбор предложения SQL с
построением внутреннего представления запроса в виде дерева. На основе
информации из локального каталога главного узла и удаленных каталогов
дополнительных узлов производится замена имен объектов, фигурирующих в
запросе, на их системные идентификаторы.
2. В главном узле генерируется глобальный план выполнения запроса, в котором
учитывается лишь порядок взаимодействий узлов при реальном выполнении
запроса. Для выработки глобального плана используется расширение техники
оптимизации, применяемой в System R. Глобальный план отображается в
преобразованном соответствующим образом дереве запроса.
3. Если в глобальном плане выполнения запроса участвуют дополнительные узлы,
производится его декомпозиция на части, каждую из которых можно выполнить
в одном узле (например, локальная фильтрация отношения в соответствии с
заданным в условии выборки предикате ограничения). Соответствующие части
запроса (во внутреннем представлении) рассылаются в дополнительные узлы.
4. В каждом узле, участвующем в глобальном плане выполнения запроса (главном
и дополнительных) выполняется завершающая стадия выполнения компиляции.
Эта стадия включает, по существу, две последние фазы процесса компиляции
запроса в System R: оптимизацию и генерацию машинных кодов. Производится
проверка прав пользователя, от имени которого производится компиляция, на
выполнение соответствующих действий; происходит обработка представлений
базы данных (здесь имеются тонкости, связанные с тем, что представления могут
включать удаленные отношения; ниже мы еще остановимся на этом, а пока
будем считать, что в запросе употребляются только имена базовых отношений);
осуществляется локальная оптимизация обрабатываемой части запроса в
соответствии с имеющимися индексами; наконец, производится генерация кода.
Управление транзакциями и синхронизация
Выполнение транзакции в распределенной системе управления базами данных
System R*, естественно, является распределенным. Транзакция начинается в главном узле
при обращении к какой-либо секции ранее подготовленного (на этапе компиляции)
модуля доступа. Как и в System R, модуль доступа загружается в виртуальную память
задачи, обращение к секции модуля доступа - это вызов подпрограммы. Однако, в отличие
от System R, эта подпрограмма, кроме своего локального программного кода и вызовов
функций RSS, содержит еще и вызовы удаленных подсекций модуля доступа. Эти вызовы
75
Страницы
- « первая
- ‹ предыдущая
- …
- 73
- 74
- 75
- 76
- 77
- …
- следующая ›
- последняя »
