Развитие идей и приложений реляционной СУБД System R


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


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

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

Заметим, что модуль доступа не может стать некорректным во время выполнения. Как и многое другое в System R, это достигается на основе правильно построенного протокола синхронизационных захватов. До загрузки модуля доступа в виртуальную память интерфейсная программа XRDI начинает служебную транзакцию (вернее, служебную часть пользовательской транзакции), в ходе которой читает описатель модуля доступа из отношения каталога. При этом, как обычно, устанавливается синхронизационный захват описателя, который удерживается до конца транзакции. Синхронизация при выполнении операций изменения базы данных, могущих повлечь некорректность модулей доступа, ведется таким образом, что реальные изменения не производятся до удовлетворения захвата на описатели модулей и тем самым откладываются до завершения пользовательской транзакции, в которой выполняется потенциально некорректный модуль доступа.

| |




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