Введение
Начинающим или только обучающимся администраторам баз данных DB2 вопросы, которые приходится решать при проектировании и оптимизации производительности новой базы данных, могут показаться довольно запутанными. В данной статье рассматриваются две области, в которых администратор сталкивается с важным выбором: табличные пространства и буферные пулы. Организация и настройка табличных пространств и буферных пулов могут заметно влиять на качество работы сервера DB2.
В примерах для этой статьи используется версия DB2 9.7, Enterprise Server Edition. Большинство примеров, если нет других указаний, применимо также и к более ранним версиям.
В статье рассматриваются следующие темы:
Табличные пространства
Все данные базы данных хранятся в табличных пространствах. Табличное пространство можно представить себе как дочерний элемент, для которого родительским элементом является база данных. При этом табличное пространство может быть дочерним элементом по отношению не более чем к одной базе данных. Поскольку табличные пространства используются различными способами, они классифицируются в соответствии со способами их применения и управления ими. Существует пять типов табличных пространств:
- Табличное пространство каталога
- В базе данных может присутствовать только одно табличное пространство каталога, создаваемое в ходе выполнения команды CREATE DATABASE. В DB2 табличное пространство каталога называется SYSCATSPACE и содержит таблицы системного каталога. Это табличное пространство создается всегда при создании базы данных.
- Обычное табличное пространство
- Обычные табличное пространство содержит все постоянные данные, в том числе обычные таблицы и индексы. В этом пространстве можно хранить также и длинные данные, такие как большие объекты данных (Large Objects - LOB), если они не выделены в особое табличное пространство. Таблицу и ее индексы можно разделить на отдельные обычные табличные пространства, если это пространства, управляемые базой данных (DMS) для несекционированных таблиц или пространства, управляемые системой (SMS) для секционированных таблиц. DMS и SMS описаны в разделе Управление табличным пространством. Примером обычного табличного пространства служит табличное пространство каталога. По умолчанию это единственное обычное табличное пространство, которое создается при создании базы данных.
- Табличное пространство длинных данных
- В табличном пространстве длинных данных хранятся все постоянные данные, как и в пространстве обычных таблиц, включая объекты LOB. Такие табличные пространства должны иметь тип DMS, который присваивается им по умолчанию. Таблица, созданная в табличном пространстве длинных данных, может быть больше таблицы в обычном табличном пространстве. Такая таблица поддерживает более 255 строк на страницу данных, что улучшает использование страниц данных. При создании базы данных DB2 создает одно табличное пространство длинных данных с именем USERSPACE1.
- Временные системные табличные пространства
- Временные системные табличные пространства используются для хранения внутренних временных данных, необходимых для операций SQL, например, для сортировки, преобразования таблиц, создания индексов и объединения таблиц. База данных должна иметь хотя бы одно такое пространство. По умолчанию вместе с базой данных создается временное системное табличное пространство TEMPSPACE1.
- Временные табличные пространства пользователя
- Временные табличные пространства пользователя служат для хранения объявленных глобальных временных таблиц. При создании базы данных временные табличные пространства пользователя не создаются. Для определения декларированных временных таблиц требуется, чтобы существовало хотя бы одно временное табличное пространство пользователя. Временные табличные пространства пользователя не обязательны. По умолчанию они не создаются.
Управление табличными пространствами
Существует два способа управления табличными пространствами:
- Пространство, управляемое системой (SMS)
- Табличными пространствами SMS управляет операционная система. Контейнеры определяются как обычные файлы операционной системы, и доступ к ним осуществляется с помощью вызовов операционной системы. Это означает, что следующие операции выполняются с помощью обычных функций операционной системы:
- операции ввода-вывода буферизуются операционной системой;
- выделение пространства осуществляется в соответствии с соглашениями операционной системы;
- табличное пространство автоматическое расширяется по мере необходимости.
Однако из табличных пространств SMS нельзя удалять контейнеры, а добавление новых контейнеров ограничено секционированными базами данных. Начиная с DB2 версии 9.1 единственным табличным пространством SMS, которое создается по умолчанию при создании базы данных, является TEMPSPACE1.
- Пространство, управляемое базой данных (DMS)
- Табличными пространствами DMS управляет DB2. Контейнеры можно определять как файлы (целиком занимающие размер, выделенный при создании табличного пространства) или как устройства. DB2 управляет вводом-выводом в той мере, в какой это позволяют метод выделения и операционная система. С помощью команды ALTER TABLESPACE контейнеры можно расширять. Неиспользуемые фрагменты контейнеров DMS можно освобождать (начиная с версии 8).
В листинге 1 показано, как увеличить размеры контейнера:
Листинг 1. Увеличение размера контейнера
ALTER TABLESPACE TS1 RESIZE (FILE '/conts/cont0' 2000,
DEVICE '/dev/rcont1' 2000, FILE 'cont2' 2000)
|
Для увеличения или сокращения размера контейнера можно использовать также такие параметры, как EXTEND или REDUCE.
Создание и просмотр табличных пространств
При создании базы данных создаются три табличных пространства (SYSCATSPACE, TEMPSPACE1 и USERSPACE1). В листинге 2 показано, как создать базу данных с именем testdb, подключиться к ней и получить список табличных пространств с помощью командного окна DB2 или командной строки UNIX.
Листинг 2. Создание, подключение и вывод списка
CREATE DATABASE testdb
CONNECT TO testdb
LIST TABLESPACES
|
В листинге 3 приведен пример выходных данных команды LIST TABLESPACES.
Листинг 3. Выходные данные команды LIST TABLESPACES
Tablespaces for Current Database
Tablespace ID = 0
Name = SYSCATSPACE
Type = Database managed space
Contents = All permanent data. Regular table space.
State = 0x0000
Detailed explanation:
Normal
Tablespace ID = 1
Name = TEMPSPACE1
Type = System managed space
Contents = System Temporary data
State = 0x0000
Detailed explanation:
Normal
Tablespace ID = 2
Name = USERSPACE1
Type = Database managed space
Contents = All permanent data. Large table space.
State = 0x0000
Detailed explanation:
Normal
|
В листинге 3 команда CREATE DATABASE автоматически создает три табличных пространства. Режим создания табличных пространств по умолчанию можно переопределить, включив в команду параметры табличных пространств, но в любом случае при создании базы данных необходимо создать табличное пространство каталога и хотя бы одно обычное или длинное и одно временное системное табличное пространство. Дополнительные табличные пространства любого типа (за исключением табличного пространства каталога) можно создавать с помощью команды CREATE DATABASE или, позднее, с помощью команды CREATE TABLESPACE.
Контейнеры
Каждое табличное пространство содержит один или несколько контейнеров. Контейнер опять-таки можно представить как дочерний элемент, для которого родительским является табличное пространство. Каждый контейнер может принадлежать только одному табличному пространству, тогда как табличное пространство может содержать несколько контейнеров. В табличных пространствах DMS можно добавлять и удалять контейнеры, а также менять размеры контейнеров. Добавлять контейнеры к табличным пространствам SMS можно только в секционированных базах данных, в раздел, где еще нет контейнера, выделенного для табличного пространства. При добавлении новых контейнеров выполняется автоматическое перераспределение данных по всем контейнерам. Перераспределение не мешает одновременному доступу к базе данных.
Параметры табличных пространств
Во время создания табличных пространств или позднее можно задать несколько параметров с помощью оператора ALTER TABLESPACE. Эти параметры перечислены в следующем списке.
- Размер страницы
- Определяет размер страниц, используемых для табличного пространства. Поддерживаются форматы 4K, 8K, 16K и 32K. Размер страниц ограничивает длину строк и число столбцов таблиц, которые можно разместить в табличном пространстве, в соответствии с предельными значениями, приведенными в таблице 1.
Таблица 1. Влияние размера страниц
Размер страницы | Предельный размер строки | Предельное число столбцов | Максимальная емкость (табличное пространство DMS) |
---|
4 KБ | 4 005 | 500 | 64 ГБ |
---|
8 KБ | 8 101 | 1 012 | 128 ГБ |
---|
16 KБ | 16 293 | 1 012 | 256 ГБ |
---|
32 KБ | 32 677 | 1 012 | 512 ГБ |
---|
Табличные пространства ограничены 16384 страницами, поэтому, чем больше размер страницы, тем больше емкость табличного пространства.
- Размер экстента
- Число страниц в контейнере, при достижении которого осуществляется переход к следующему контейнеру. Система управления базой данных циклически перебирает контейнеры по мере записи данных. Этот параметр учитывается только при наличии для табличного пространства нескольких контейнеров.
- Размер предварительной выборки
- Количество страниц, считываемых из табличного пространства при выполнении предварительной выборки данных. Предварительная выборка заключается в считывании данных, необходимых для выполнения запроса, до того, как они будут указаны в запросе, чтобы не тратить время на операции ввода-вывода при обработке запроса. Предварительная выборка выполняется системой управления базы данных, когда та решает, что имеет место последовательный ввод-вывод и можно повысить производительность за счет предварительной выборки.
- Непроизводительные издержки и скорость передачи данных
- Определяет затраты на ввод-вывод при оптимизации запросов. Оба значения измеряются в миллисекундах и должны быть усреднены для всех контейнеров. Непроизводительные издержки - это время, связанное с операциями контроллера ввода-вывода, временем поиска данных на диске и задержкой вращения диска. Скорость передачи - время, необходимое для считывания в память одной страницы. По умолчанию для базы данных, созданной в DB2 версии 9, используются значения 7,5 мс и 0,06 мс соответственно. Для базы данных, перенесенной из предыдущей версии DB2, значения по умолчанию составляют 12,67 мс и 0,18 мс соответственно. Эти значения можно рассчитать, основываясь на спецификациях оборудования.
Пример оператора CREATE TABLESPACE
В листинге 4 создается обычное табличное пространство с использованием всех параметров настройки из этой статьи.
Листинг 4. Создание табличного пространства
CREATE TABLESPACE USERSPACE3
PAGESIZE 8K
MANAGED BY SYSTEM
USING ('d:\usp3_cont1', 'e:\usp3_cont2', 'f:\usp3_cont3')
EXTENTSIZE 64
PREFETCHSIZE 32
BUFFERPOOL BP3
OVERHEAD 7.5
TRANSFERRATE 0.06
|
Как просматривать атрибуты табличного пространства и контейнеров
Задание параметра SHOW DETAIL для команды LIST TABLESPACES приводит к отображению дополнительной информации: LIST TABLESPACES SHOW DETAIL
.
В листинге 5 показан результат для табличного пространства USERSPACE1. По умолчанию будут перечислены три табличных пространства, созданных при создании базы данных.
Листинг 5. Выходные данные команды LlST TABLESPACES SHOW DETAIL
Tablespaces for Current Database
Tablespace ID = 2
Name = USERSPACE1
Type = Database managed space
Contents = All permanent data. Large table space.
State = 0x0000
Detailed explanation:
Normal
Total pages = 8192
Useable pages = 8160
Used pages = 96
Free pages = 8064
High water mark (pages) = 96
Page size (bytes) = 4096
Extent size (pages) = 32
Prefetch size (pages) = 32
Number of containers = 1
|
Для отображения данных о контейнерах, необходимых для использования табличного пространства с идентификатором Tablespace ID из приведенного выше листинга, введите LIST TABLESPACE CONTAINERS FOR 2
.
Листинг 6. Выходные данные команды LlST TABLESPACES CONTAINERS
Tablespace Containers for Tablespace 2
Container ID = 0
Name = C:\DB2\NODE0000\SQL00004\SQLT0002.0
Type = Path
|
Команда выдает список всех контейнеров для указанного табличного пространства. Путь, представленный в листинге 6, указывает на физическое местоположение контейнеров.