Адаптивная оптимизация запросов
С каждым новым выпуском рассматриваемых СУБД в них повышается качество оптимизации запросов. Если еще 15 лет тому назад можно было серьезно относиться к «оценочной» (cost-based) оптимизации запросов только в СУБД IBM DB2, то в настоящее время развитые средства оптимизации запросов поддерживаются и в Oracle [8], и в Microsoft SQL Server [9].
В этой статье невозможно привести сколько-нибудь подробный обзор и анализ применяемых средств оптимизации запросов, поскольку это очень широкая и специальная область, но нужно отметить, что больше всего усилий тратится на поддержание надежной статистической информации о распределениях значений столбцов в таблицах, хранимых в базах данных и динамически образуемых при выполнении запросов. В этой связи нельзя не отметить влияние подхода IBM,
реализованного в экспериментальном адаптивном оптимизаторе LEO [10], на основе которого разрабатывались средства оптимизации запросов в последующих выпусках DB2. В этом оптимизаторе статистическая информация уточняется при выполнении каждого запроса, а запросы, планы которых к моменту выполнения не соответствуют текущей статистической информации, динамически перекомпилируются. Другим важным направлением оптимизации запросов является динамическое создание вспомогательных физических структур данных (индексов и материализованных представлений) на основе анализа потока запросов к базе данных. Здесь заметную роль сыграла группа исследователей компании Microsoft, лидером которой является Сураджит Чаудхари (Surajit Chaudhuri) [11]. Оптимизация запросов к SQL-ориентированным базам данных остается важной исследовательской областью, однако, по всей видимости, серьезный вклад в эти исследования могут внести только специалисты компаний, разрабатывающих основные SQL-ориентированные СУБД.
Управление транзакциями с поддержкой версий
Основной режим управления транзакциями в рассматриваемых СУБД основывается на двухфазном протоколе синхронизационных блокировок объектов базы данных. Этот подход был заложен еще в 1970-е годы в экспериментальном проекте System R компании IBM [12] и очень хорошо технически проработан. Однако применение этого подхода приводит к задержке выполнения транзакций, в которых данные только выбираются из базы данных и никогда не обновляются. Более 10 лет тому назад в СУБД Oracle 7.3 был реализован режим управления транзакциями, в котором чтение объекта базы данных гарантированно не приводило к блокировке транзакции. В этом режиме для каждой строки каждой таблицы поддерживалось две версии, и читающей транзакции выдавалась версия, зафиксированная последней по времени транзакцией, зафиксировавшей изменение этой строки.
Начиная с SQL Server 2005, режим неблокирующего чтения поддерживается и компанией Microsoft [13]. Как и в Oracle 11g [14], в MS SQL Server, наряду с режимом «блокировочного» управления транзакциями пользователями может быть выбран режим
«версионного» управления. Заметим, что IBM пока не следует примеру своих конкурентов, утверждая, что поддержка версий неоправданно повышает накладные расходы системы, не принося существенных преимуществ пользователям. По-видимому, и здесь требуются дополнительные исследования.
Встроенные файловые системы
Относительно возможности встраивания функций файловой системы в СУБД много говорилось еще до выхода Microsoft SQL Server 2005. Однако реальный шаг в этом направлении был сделан компанией Oracle в выпуске 11g. В этой СУБД появился новый тип данных SecureFiles [15], позволяющий создавать LOB-объекты, с которыми можно работать в файловом интерфейсе с сохранением всех прочих возможностей СУБД, в частности, журнализации и восстановления после сбоев. Oracle утверждает, что эта встроенная в базу данных файловая система исключительно эффективна, и призывает активно ей пользоваться для хранения обычных файлов. В SQL Server 2008 Microsoft делает ответный ход, объявляя о поддержке типа данных FILESTREAM [16]. В решении Microsoft пользователи получают возможность доступа средствами SQL Server к файлам, хранящимся в файловой системе NTFS (при этом сохраняется ограниченная возможность доступа к тем же файлам на основе интерфейса Win32). Доступ к объектам типа FILESTREAM из SQL Server производится в транзакционном режиме с поддержкой журнализации и восстановления. По-видимому, организация файловых систем, интегрированных с базами данных, – это только первый шаг на пути к созданию единой информационной среды с общими средствами поддержки целостности данных и их поиска.