Оптимизация большого табличного пространства
У нас есть очень большая таблица LARGEHISTORY, в которой миллионы записей. В настоящее время таблица использует 50 ГБ табличного пространства, а максимально допустимое табличное пространство в DB2 составляет 65 ГБ (DB2 v9.5.301.436). Стол растет очень быстро, и нам нужно что-то сделать очень быстро, чтобы преодолеть проблему.
База данных: DB2 v9.5.301.436
Решения, о которых мы уже думали:
Увеличьте размер табличного пространства, чего можно достичь, используя следующие два параметра:
Изменить табличное пространство LARGEHISTORY от 65 ГБ до 2 ТБ
Преимущество:
- Для увеличения табличного пространства нужно выполнить всего несколько команд.
Недостаток:
Нам нужно выполнить reorg, что потребует огромных простоев.
Увеличение табличного пространства не даст эффекта, если мы не сделаем реорганизацию
Создайте новое отдельное (2 ТБ) табличное пространство и переместите таблицу LARGEHISTORY из старого в новое табличное пространство, используя процедуру или оператор вставки select
Преимущество:
Для создания нового табличного пространства нужно выполнить всего несколько команд.
Таблица может быть безопасно перемещена в новое табличное пространство.
Недостаток:
LARGEHISTORY должна быть переведена в автономный режим, чтобы гарантировать отсутствие транзакции до завершения миграции.
Копирование 50 ГБ данных может потребовать огромных простоев. Существует вероятность сбоя процедуры, поскольку она может не справиться с такими огромными данными.
Оператор вставки select может не работать для таких огромных данных.
Примечание: последняя версия DB2 имеет функцию перемещения таблицы из старой в новую без простоя.
Архивирование или удаление старых данных
Преимущество:
- Может быть легко сделано с помощью запланированной работы.
Недостаток:
Старые данные перейдут в автономный режим. Если потребуется получить отчет, нам потребуется ручное вмешательство.
Все существующие отчеты будут затронуты и потребуют изменения.
Нам потребуется часто выполнять reorg, чтобы оптимизировать таблицу и табличное пространство для повышения производительности.
Создайте новую таблицу в новом табличном пространстве и переименуйте старую таблицу в LARGEHISTORY_OLD
Преимущество:
- Мы можем легко вставить новые данные в новую таблицу очень быстро.
Недостаток:
При извлечении нам нужно использовать объединение / объединение всех на старой и новой таблицах или создание нового представления.
Мы не можем обновить данные, используя представление (если не используется материализованное представление, которое является дорогим)
Все существующие отчеты будут затронуты и потребуют изменения.
Пожалуйста, дайте мне знать, если у вас есть лучший вариант. На данный момент мы рассматриваем вариант 1.1. С опцией 1.1 я не уверен, будет ли какое-либо влияние на код.
2 ответа
Используйте разбиение таблицы. Это требует простоя, однако это предотвратит будущие проблемы: http://www.ibm.com/developerworks/data/library/techarticle/dm-0605ahuja2/
Вы создаете раздел таблицы для каждого периода (месяц, семестр) и просто присоединяете и отключаете разделы.
Вы должны проверить лицензию (издание db2)
create table t1
( ...
, sales_date date not null
check ( sales_date between '2012-01-01' and '2012-12-31' )
) in tblspc1 index in inxspc1 long in longspc1;
create table t2
( ...
, sales_date date not null
check ( sales_date between '2013-01-01' and '2013-12-31' )
) in tblspc2 index in inxspc2 long in longspc2;
create table t3
( ...
, sales_date date not null
check ( sales_date between '2014-01-01' and '2014-12-31' )
) in tblspc3 index in inxspc3 long in longspc3;
create view LARGEHISTORY as (
select ..., sales_date from t1
union all
select ..., sales_date from t2
union all
select ..., sales_date from t3
)
attach/detach partitions by recreate the view