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

       

Моделирование развитых возможностей менеджера данных


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

В DB2.* сканирование таблицы может производиться как в прямом, так и в обратном направлении (смена направления изменяется при достижении начала или конца таблицы). Этот метод называется двунаправленным (boustrophedonic) сканированием. (Истоки этого термина восходят к сельскому хозяйству. Крестьянин, вспахивающий поле, начинает с единственной борозды. По достижению края поля он разворачивается и начинает вспахивать новую борозду, параллельную начальной.) Это позволяет при следующем сканировании использовать страницы, уже находящиеся в буфере, а не замещать эти страницы в соответствии с алгоритмом LRU менеджера буферного пула. В DB2/* также выполняется агрегация или вставка в кучу сортировки с удержанием страницы в буферном пуле.

В DB2 для MVS таблицы могут сегментироваться, что позволяет выполнять инкрементное резервное копирование, восстановление и реорганизацию. У сегментированных таблиц имеются страницы отображения пространства, так что считываются только страницы данных, действительно содержащие данные. Эти страницы отображения пространства могут обеспечить громадное увеличение скорости выполнения операторов DELETE, не содержащих раздела WHERE. По ним также можно определить, что таблица слишком мала для того, чтобы было полезным последовательное упреждающее чтение (см. ниже).

В DB2 для MVS имеются два типа упреждающего чтения страниц, минимизирующего время ввода-вывода при последовательном (или почти последовательном) доступе: последовательное упреждающее чтение и последовательное упреждающее чтение со скачками (skip sequential prefetch).
Оптимизатор может воспользоваться последовательным упреждающим чтением при сканировании таблицы, временной таблицы или кластеризованного индекса. При любом сканировании таблицы будет использоваться последовательное упреждающее чтение, если только таблица пространства (для сегментированной таблицы) не показывает, что в таблице содержится очень мало страниц данных, или если в запросе содержится раздел OPTIMIZE FOR N ROWS с небольшим значением N. Последовательное упреждающее чтение со скачками основано на специальных возможностях ввода-вывода MVS для асинхронного чтения списка страниц, которые упорядочены, но не обязательно смежны. Такой список страниц появляется, например, при чтении страниц на основе упорядоченного списка RID’ов. Обычно для этих разновидностей ввода-вывода имеются разные оценочные формулы.

Менеджер данных в DB2 для MVS может также распознавать фактический последовательный доступ во время выполнения и обеспечивать обнаруживаемое упреждающее чтение. Оптимизатор пытает моделировать такие ситуации всегда, когда это возможно. Например, в тех случаях, когда внешний источник ввода соединения методом вложенных циклов полностью упорядочен, упреждающее чтение, вероятно, будет обнаружено во время выполнения для сканирования индекса и, возможно, страниц данных внутренней таблицы. Наконец, в DB2 для MVS пользователь может выбирать размер страницы в 32К или 4К при создании таблицы. Размер страницы влияет на характеристики ввода-вывода, и это моделируется в оптимизаторе.

В DB2 для MVS имеется возможность сжимать или шифровать данные на уровне строки. Стоимость распаковки или дешифрации моделируется оптимизатором.

В DB2 для MVS также можно оптимизировать запрос для использования параллелизма ввода-вывода. Эта возможность является новой для DB2 Version 3. Поскольку это очень сложное и новое средство, оно не рассматривается в этой статье.

В DB2/* с использованием Starburst также будет распознаваться последовательный доступ во время выполнения и производиться упреждающее чтение данных, в отличие от DB2/6000 Version 1, в которой распознавание последовательного доступа возложено на операционную систему.Также можно будет выбрать упреждающее чтение листовых страниц индекса в зависимости от их положения на диске. Этот механизм будет тесно увязан с основанной на экстентах системой хранения, чтобы использовать многоблочный ввод-вывод. Тот же самый механизм будет использоваться для обеспечения поддержки последовательного упреждающего чтения с прыжками.


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