Почему DB2 предлагает одну таблицу на табличное пространство? - PullRequest
4 голосов
/ 21 февраля 2012

Документы DB2 для DB2 / z v10 имеют следующий фрагмент в разделе табличных пространств :

Как правило, в каждом табличном пространстве должна быть только одна таблица..

Но на самом деле это не дает никакого обоснования для этого.

У нас есть несколько таблиц, хранящих историческую информацию, основанную на времени, в следующих строках (значительно уменьшена по сложности, но должна бытьдостаточно, чтобы проиллюстрировать):

Table HOURLY_CPU_USAGE:
    RecDate        date
    RecTime        time
    Node           char(32)
    MaxCpuUsage    float
    primary key    (RecDate, RecTime, Node)
Table DAILY_CPU_USAGE:
    RecDate        date
    Node           char(32)
    MaxCpuUsage    float
    primary key    (RecDate, Node)
Table MONTHLY_CPU_USAGE:
    RecDate        date
    Node           char(32)
    MaxCpuUsage    float
    primary key    (RecDate, Node)

(ежедневная таблица объединяет все почасовые записи в один день, а месячная таблица делает то же самое с ежедневными данными, свернув их в строку с датойYYYY-MM-01).

Теперь мне кажется, что все эти таблицы очень похожи по назначению, и я не уверен , почему мы хотели бы хранить их в отдельных табличных пространствах.

Пока что не исключено, что я могу объединить их в одну таблицу, это предложение, которое я сделал, но есть препятствия, мешающие этому.

Что является логическим обоснованием здесьd "один стол на табличное пространство"?Какие есть исключения, если таковые имеются?Я предполагаю, что они могут быть исключениями, так как это кажется скорее руководством, чем жестким правилом.

Ответы [ 4 ]

5 голосов
/ 19 марта 2012

В наши дни главная причина сохранения одной таблицы на табличное пространство - административная.Большинство утилит DB2 работают на уровне табличного пространства.Например, если вы выполняете ЗАГРУЗКУ ЗАМЕНЫ для табличного пространства для конкретной таблицы, тогда все остальные таблицы будут в конечном итоге пустыми, поскольку в первую очередь ЗАМЕНА ЗАГРУЗКИ будет удалять все строки.

Итак "почему бы неВы держите одну таблицу на табличное пространство?Я думаю, что разумно и даже желательно включать несколько таблиц в одно табличное пространство, когда таблица связана с тем, что одна бесполезна без другой.Например.CustomerTable + NextCustomerIDTable.

Еще одним соображением является тип табличного пространства.В зависимости от типа созданного вами табличного пространства могут возникнуть проблемы с производительностью при создании нескольких таблиц в одном табличном пространстве.Если вы не используете сегментированные табличные пространства, при сканировании табличного пространства будут прочитаны все страницы в табличном пространстве, включая страницы из других таблиц.Смотрите тему "Проверка табличного пространства" здесь: http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=%2Fcom.ibm.db2.doc.ve%2Fdvnhlpcn_tablescan.htm

4 голосов
/ 03 февраля 2015

Похоже, что они изменили текст в своей документации.

Ссылка , указанная в Вопросе, теперь содержит следующую информацию:

Количество таблиц, которые вы должны определить в табличном пространстве, зависит по характеристикам таблиц:

Если таблица может стать большой по размеру, лучше поместить таблицу в собственное табличное пространство. Этот дизайн упрощает производительность настройка и, в частности, настройка пула буферов. Для небольших таблиц лучше использовать сегментированные табличные таблицы с несколькими таблицами. Такая конструкция помогает уменьшить количество наборов данных, которые необходимо быть управляемым для резервного копирования и восстановления, а также количество наборов данных что система баз данных должна открываться и закрываться во время DB2 операции.

Лучше минимизировать количество табличных пространств в каждая база данных по следующим причинам:

Во время выполнения операторов определения данных система базы данных удерживает монопольную блокировку всей базы данных до фиксации операция выполнена. Эксклюзивный замок выполняет следующие функции: Эксклюзивная блокировка предотвращает одновременное выполнение операторов определения данных для таблиц и индексов в одной базе данных. Если динамический кэш операторов отключен (параметр подсистемы CACHEDYN = NO), система базы данных использует блокировку базы данных для сериализовать выполнение операторов определения данных и динамического SQL операторы, которые обращаются к таблицам и индексам в базе данных.

Если в базе данных меньше табличных пространств, одновременно блокируется меньше табличных пространств. Во время выполнения фазы SWITCH операций утилиты REORG в режиме онлайн система базы данных получает эксклюзивную блокировку всю базу данных для сериализации выполнения операций REORG онлайн и операторы определения данных для таблиц и индексов в базе данных.

Если в базе данных меньше таблиц, одновременно блокируется меньше таблиц. Объем журнала для операторов определения данных меньше, когда в базе данных меньше табличных пространств.

2 голосов
/ 22 февраля 2012

Просто дикая догадка ... но, возможно, IBM рекомендует не более одной таблицы на табличное пространство, потому что многие утилиты db / 2 работают на уровне табличного пространства. Если вы помещаете несколько таблиц в одно табличное пространство, утилиты работают со всеми таблицами как единое целое.

Например, резервное копирование и восстановление работают на уровне табличного пространства. Вы не можете выполнять резервное копирование / восстановление отдельных таблиц в одном табличном пространстве. Все они резервируются или восстанавливаются как единое целое. Я полагаю, что то же самое относится и к другим утилитам и, вероятно, ко многим параметрам настройки.

0 голосов
/ 03 апреля 2012

Обычно это связано с тем, что параметры производительности, как правило, лучше для конфигураций «одна таблица на табличное пространство». Например, возможность выполнять ограниченное сканирование разделов для определенных запросов, если таблица разделена (что ТРЕБУЕТ 1 ТБ на TS).

(Но я бы сказал, что как человек, работающий с мэйнфреймами, не так ли?): -)

...