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

       

Другие аспекты оптимизации


Оптимизаторы DB2 должны иметь дело с блокировками и транзакционной семантикой, требуемой пользователем (уровнем изоляции). Если для пользователя требуется уровень изоляции «стабильности курсора», то блокировки, установленные на индексах, могут быть сняты до осуществления доступа к соответствующим страницам данных. Поскольку другой пользователь в промежутке может поменять соответствующие страницы данных, оптимизатору требуется повторно применять любой предикат, уже примененный к индексу.

Как часть плана, оптимизатор выбирает тип блокировки и гранулярность блокирования для каждой таблицы, к которой требуется доступ. Выбор уровня блокирования представляет собой интересный компромисс: более крупное гранулирование блокировок существенно сокращает стоимость получения и снятия блокировки, но в то же время снижает уровень параллелизма при доступе к таблицам.

Ряд новых проблем представляют определяемые пользователями функции в DB2/* с использованием Starburst. Человек, определяющий новую функцию, должен передать оптимизатору различные характеристики функции, включая функцию стоимости. Чтобы не заставлять лиц, определяющих функции, писать функцию стоимости, в DB2/* будет использоваться родовая функция, представляющая собой функцию от ряда задаваемых пользователями параметров, которые могут сохраняться в каталоге при каждой функции. Кроме того, функции, определяемые пользователями, могу быть недетерминированными, т.е. они могут умышленно производить разные результаты при каждом вызове. Примером такой функции является генератор случайных чисел. Для таких функций требуется, чтобы оптимизатор сохранял их результаты во временной таблице, если нужно обеспечить повторное согласованное обращение к ним, например, как в внутренней таблице соединения с вложенными циклами.



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