Классика баз данных - статьи

       

Оптимизация запроса является частью процесса


Оптимизация запроса является частью процесса компиляции запроса, в котором оператор манипулирования данными, представленный на выскоуровневом, непроцедурном языке, таком как SQL, транслируется в более детальную, процедурную последовательность операций, называемую планом. Оптимизаторы запросов обычно выбирают план путем моделирования оценочной стоимости выполнения многих возможных планов и выбора из них наименее дорогостоящего плана. После появления в 1970 г. реляционной модели IBM активно участвует в исследованиях оптимизации реляционных запросов, начиная с пионерской работы над проектом System R [SAC+79] и продолжив работами на прототипом распределенной реляционной СУБД System R* [DN82], [LDH+84] и прототипом расширяемой СУБД Starburst [Loh88a], [LFL88], [HP88], [HCL+90], [PHH92]. Внедрение этой технологии в лидирующие промышленные продукты документировано, прежде всего, в руководствах IBM, за несколькими исключениями [Mal90], [TMG93], [Moh93], [Wan92]. Без подобной документации в исследовательской литературе исследователи легко могут потерять из виду проблемы, стоящие перед разработчиками продуктов, которые просто не могут не принимать во внимание изобилие деталей языка SQL и должны строить оптимизаторы промышленного уровня для раpнообразных пользовательских приложений и конфигураций.
В статье приводится сводка некоторых «индустриальных» возможностей оптимизаторов в семействе продуктов IBM DB2, включая исходную DB2, работающую в среде ОС MVS [DB293b] [DB293a] [DB293d], и более современные клиент-серверные продукты DB2 для ОС AIX и OS/2: DB2/6000 and DB2/2 [DB293e] [DB293f]. Чтобы избежать путаницы, в этой статье "исходной" DB2 будет называться DB2 для MVS. Из-за ограниченного объема статьи в ней не обсуждаются аналогичные продукты для ОС VM/ESA и VM/ESA (SQL/DS, первая реляционная СУБД IBM [SQL93a] [SQL93b]) и ОС OS/400 (SQL/400). Все эти продукты происходят от прототипа System R, и в них используются многие достоинства этой работы: однократная оптимизация запросов во время компиляции для повторяющегося выполнения; использование детализированной модели для оценки стоимости выполнения возможных планов; широкий репертуар возможных путей доступа и методов соединений.


Однако каждый продукт подгонялся под свою среду, для чего часто требовались разные реализации, в особенности, разные стратегии выполнения. Оптимизатор запросов для DB2 для MVS, впервые появившийся в 1983 г., в основном был выполнен по образу оптимизатора System R, но был полностью переписан для обеспечения надежного управления ошибочными ситуациями и эффективности, а также полного покрытия SQL, корректной работы с неопределенными значениями и поддержки разных языков и наборов символов. DB2 для MVS, написанный на собственном языке разработки систем, продолжает совершенствоваться в лаборатории IBM Santa Teresa в Сан-Хосе, Калифорния. В декабре 1993 г. была выпущена третья версия продукта со значительно улучшенной производительностью и доступностью.
Клиент-серверные продукты DB2 происходят от OS/2 Extended Edition DatabaseManager, который был написан на языке Си в подразделении IBM Entry Systems Division в Остине, Техас. В нем использовался некоторый исходный код (в основном, в менеджере данных) и концепции (ранняя версия Query Graph Model [PHH92] и оценочный вариант жадного алгоритма [Loh88b]) из прототипа Starburst по состоянию на то время. Продукт был впервые выпущен в 1988 г. как OS/2 Extended Edition 1.0 Database Manager и несколько раз совершенствовался. В 1992 г. разработка и поддержка продуктов баз данных для OS/2 была перемещена в лабораторию IBM в Торонто, Канада, которая в мае 1993 г. выпустила 32-разрядную версию DBM, названную DB2/2 для OS/2 2.x. В Остине началось и в Торонто продолжилась работа по портированию этого продукта на AIX, что привело к выпуску в ноябре 1993 г. DB2/6000. IBM планирует расширять клиент-серверные продукты DB2 за счет использования значительных частей прототипа Starburst (компилятора SQL, включая его технологии основанной на правилах перезаписи запросов [PHH92] и оптимизации [Loh88a] [LFL88]), добавления нескольких важных объектно-ориентированных расширений (совместная работа Института технологии баз данных (Database Technology Institute) в лаборатории Santa Teresa и проекта Sturburst), поддержки параллельного выполнения запросов (совместная работа лаборатории Торонто и IBM T.J.Watson Research Center in Hawthorne, NY) и портирования на платформы не IBM, включая рабочие станции и серверы Hewlett-Packard HP 9000 с ОС HP/UX. Поскольку в DB2/2 и DB2/6000 используется общий базовый код, в статье используется название DB2/*, когда между этими продуктами нет разницы. Имеется в виду третья версия DB2 для MVS и первая версия DB2/*.

Содержание раздела