Yvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
0
11:12, 28 апреля 2009

Реорганизация таблиц и индексов в DB2

Соcтавление списка таблиц и индексов для реорганизации в данном запросе происходит с использованием хранимых процедур reorgchk_tb_stats, reorgchk_ix_stats соответственно (эквивалент команды REORGCHK CURRENT STATISTICS).

При реорганизации таблиц внимание акцентируется на таблицах, содержащих поля типов BLOB,CLOB, LONG VARCHAR и тд и тп. Процесс реорганизации данных таблиц будет протекать только при указании опции LONGLOBDATA. В остальном, как обычно: оффлайн-реорганизация (то есть, отсутствие полного доступа к таблице), используется временное табличное пространство (в данном случае TEMP32) в целях избежания переполнения основного табличного пространства. При подготовке реорганизации индексов уделяется значение формул F4-F8 (в таблице SESSION.IX_STATS данные значения хранятся в полях F4-F8 соответственно). Разъяснение по этим формулам и их значениям описано в справочной документации по команде REORGCHK.

Вот и сам скрипт, генерирующий набор инструкций для реорганизации таблиц.

--сначала реорганизуем таблицы, содержащих BLOB и LONG-поля

call reorgchk_tb_stats('T', 'ALL');

---------------------------------------------------------

select 'reorg table '||trim(table_schema)||'.'||trim(table_name)||

' allow no access longlobdata use temp32;'

from session.tb_stats

join syscat.columns on table_schema=tabschema

and table_name=tabname

where reorg like '%*%' and (typename like 'LONG%' or typename like '%LOB%')

---------------------------------------------------------

union

---------------------------------------------------------

--затем все остальное

select 'reorg table '||trim(table_schema)||'.'||trim(table_name)||

' allow no access use temp32;'

from session.tb_stats

join syscat.columns on table_schema=tabschema

and table_name=tabname

where reorg like '%*%' and (typename not like 'LONG%' or typename not like '%LOB%');

А ниже скрипт, генерирующий набор инструкций для реорганизаций индексов

call reorgchk_ix_stats('T', 'ALL');

---------------------------------------------------------

select 'reorg table '||trim(table_schema)||'.'||trim(table_name)||

' index '||trim(table_schema)||'.'||trim(index_name)||

' indexscan allow no access uses temp32;'

from session.ix_stats where F5< 80 and F4 !=1

---------------------------------------------------------

union

---------------------------------------------------------

select 'reorg indexes all for table '||trim(table_schema)||'.'|| trim(table_name)||';'

from session.ix_stats where (F5 != -1 and F5<50) or F6 > 100

---------------------------------------------------------

union ---------------------------------------------------------

select 'reorg indexes all for table '||trim(table_schema)||'.'|| trim(table_name)||' cleanup only all;' from session.ix_stats where F7>20 or F8>20;

При реализации данного решения, основная идея была почерпнута у rpillai, и небольшие подробности были взяты в статье "Automatic table maintenance in DB2, Part 2: Automatic table and index reorganization in DB2 for Linux, UNIX, and Windows"

0
2336
0