powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Увеличить размер страницы tablespace
22 сообщений из 22, страница 1 из 1
Увеличить размер страницы tablespace
    #38556745
greifeld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую!

СУБД IBM DB2 v8.2, в дальнейшем планируем 9.7
Есть база с 600 таблицами (множество индексов и триггеров)
Размер бэкапа - 45GB
Размер страницы 4кб
А страниц уже почти 16 000 000 и этого не хватает.
Требуется переход на страницу с размером 32кб

Ознакомился с темой:
http://www.sql.ru/forum/868543/peremestit-tablicy-v-drugoy-tablespace?hl=???????????
но она похожа всего лишь на набросок плана действий.


Подскажите, есть ли рабочий механизм изменения размера страницы? Если есть, то в какой версии DB2 ?
Может у кого есть свои наработки?
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38557018
greifeld,

У вас все таблицы/индексы в одном tablespace ? Это не есть хорошо. Для крупных таблиц/индексов желательно индивидуальные TS.

ИМХО вначале полноценно смигрировать в 9.7, потом создать дополнительные tablespace с нужным размером страницы и туда "увести" крупные таблицы/индексы постепенно.
В 9.7 для этого есть процедура ADMIN_MOVE_TABLE procedure - Move tables online .
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38557202
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Хабаров,

Мы в своё время отлично совместили две этих работы. Миграцию лучше проводить пересозданием структуры в пустой БД с последующей перезаливкой данных (избавляясь от унаследованных структур хранения).
При пересоздании таблиц можно их распихать по своим пространствам в соответствии с имеющимися соображениями.
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38557318
CawaSPbЕвгений Хабаров,

Мы в своё время отлично совместили две этих работы. Миграцию лучше проводить пересозданием структуры в пустой БД с последующей перезаливкой данных (избавляясь от унаследованных структур хранения).
При пересоздании таблиц можно их распихать по своим пространствам в соответствии с имеющимися соображениями.
Да, такой вариант вполне допустим, но, не всегда возможен.
Миграция существующей БД по времени обычно "короче", чем пересоздание структуры/заливка данных.
Естественно в случае, если перед окончательной миграцией весь сценарий "прогнали" на тестовой конфигурации и убедились, что это работает.
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38558442
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Хабаров,

Если есть необходимость сократить время переключения (а можни считать априори, что такая необходимость есть), то можно:
а) дозаливать итеративно только изменяющиеся таблицы (отслеживая, к примеру, по изменениям в результатах MON_GET_TABLE(...) значений rows_inserted, rows_updated, rows_deleted). Во множестве случаев в период низкой нагрузки этого хватит.
б) в конце концов просто настроить Q репликацию (запретив нелогирумые операции).

Важно при этом, чтобы за период миграции никто "чужой" структуру базу не правил, но это вообще правильно и, в крайнем случае отслеживаемо (с 10.1 Q репликация и изменения структуры реплицировать умеет, но я бы на это не полагался).

Но да, нужны предварительные репетиции.
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38558636
greifeld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Предварительные репетиции начались)


db2 => call sysproc.admin_move_table('ACCESS','WIZARDS','DATASPACE_32','INDEXSPA
CE_32','LONG_32','','','','','','MOVE')
SQL2103N Процедуру ADMIN_MOVE_TABLE не удалось выполнить, поскольку какой-то
аспект исходной таблицы или таблицы назначения процедурой ADMIN_MOVE_TABLE не
поддерживается. Код причины : "6". SQLSTATE=5UA0M

Если удаляю все ключи с таблицы, перемещается успешно.

НО! У меня 600 таблиц и на большинстве из них есть первичный ключ плюс несколько внешних.
Как быть?
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38558845
greifeld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё admin_move_table судя по всему не понимает пользовательские типы данных
А также ругается, если в комментариях в столбцам таблицы есть запятая... Это тихий ужас.

Зачем она вообще нужна с такими ограничениями?
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38558977
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greifeld,

Это одно из ограничений ADMIN_MOVE_TABLE(). Оно там не единственное (триггера, ...).

Проще "руками".

1. Снять DDL. Что-нибудь типа:
db2look -d <dbname> -td @ -e -o <dbname>.ddl -a -l -xd -f
(это с федеративными объектами)
Или с отдельной схемы:
db2look -d <dbname> -nofed -td @ -e -o <schema>.ddl -z <schema>

2. Внести желаемые правки в DDL.

3. Накатить DDL на новую пустую базу, выставив предварительно параметр базы AUTO_REVAL в DEFERRED_FORCE (требуется рестарт базы, хотя дока и говорит обратное).

4. Убедиться, что все объекты создались корректно (все инвалидные объекты ревалидируются):
Код: sql
1.
2.
call admin_revalidate_db_objects();
select* from syscat.invalidobjects;


и вернуть AUTO_REVAL обратно в DEFERRED.

5. Создать список таблиц для выгрузки (для таблиц с LOB'ами, для таблиц с автоинкрементными и генерируемыми полями) в различных комбинациях.
С LOB'ами/без LOB'ов:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
-- tables with LOB objects
select t.tabschema, t.tabname 
from syscat.tables t
where t.tabschema not like 'SYS%' AND t.type = 'T' 
  AND EXISTS(select 1 from syscat.columns 
             where (tabschema, tabname) = (t.tabschema, t.tabname)
                   AND c.typeschema = 'SYSIBM' AND c.typename LIKE '%LOB');

-- tables without LOB objects
select t.tabschema, t.tabname 
from syscat.tables t
where t.tabschema not like 'SYS%' AND t.type = 'T' 
  AND NOT EXISTS(select 1 from syscat.columns
                 where (tabschema, tabname) = (t.tabschema, t.tabname)
                       AND typeschema = 'SYSIBM' AND typename LIKE '%LOB');


С генерируемыми неавтоинкрементными полями/без них:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
-- tables with generated non-identity columns
select t.tabschema, t.tabname 
from syscat.tables t
where t.tabschema not like 'SYS%' AND t.type = 'T' 
  AND EXISTS(select 1 from syscat.columns 
             where (tabschema, tabname) = (t.tabschema, t.tabname)
                   AND identity <> 'Y' AND generated <> '');

-- tables without generated non-identity columns
select t.tabschema, t.tabname 
from syscat.tables t
where t.tabschema not like 'SYS%' AND t.type = 'T' 
  AND NOT EXISTS(select 1 from syscat.columns  
                 where (tabschema, tabname) = (t.tabschema, t.tabname)
                       AND identity <> 'Y' AND generated <> '');


С генерируемыми всегда автоинкрементными полями/без них:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
-- tables with generated always identity columns
select t.tabschema, t.tabname 
from syscat.tables t
where t.tabschema not like 'SYS%' AND t.type = 'T' 
  AND EXISTS(select 1 from syscat.columns 
             where (tabschema, tabname) = (t.tabschema, t.tabname)
                   AND identity = 'Y' AND generated = 'A');

-- tables without generated always identity columns
select t.tabschema, t.tabname 
from syscat.tables t
where t.tabschema not like 'SYS%' AND t.type = 'T' 
  AND NOT EXISTS(select 1 from syscat.columns  
                 where (tabschema, tabname) = (t.tabschema, t.tabname)
                       AND identity <> 'Y' AND generated = 'A');



Базовые команды для экспорта/load'а:
Код: sql
1.
2.
3.
4.
export to IXF/tabschema.tabname.ixf of ixf messages export_messages.log 
  select * from tabschema.tabname;
load from IXF/tabschema.tabname.ixf of ixf messages load_messages.log replace 
  into tabschema.tabname NONRECOVERABLE CHECK PENDING CASCADE IMMEDIATE;


Для LOB'ов:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
export to IXF_LOB/tabschema.tabname.ixf of ixf 
  LOBS TO IXF_LOB/ LOBFILE tabschema.tabname.lob 
  MODIFIED BY LOBSINFILE 
  messages ...
load from IXF_LOB/tabschema.tabname.ixf of ixf 
  LOBS FROM IXF_LOB/ 
  MODIFIED BY LOBSINFILE 
  messages ...


Для генерируемых полей:
Код: sql
1.
2.
3.
load from IXF_LOB/tabschema.tabname.ixf of ixf 
  MODIFIED BY GENERATEDOVERRIDE 
  messages ...


Для GENERATED ALWAYS IDENTITY полей:
Код: sql
1.
2.
3.
load from IXF_LOB/tabschema.tabname.ixf of ixf 
  MODIFIED BY IDENTITYOVERRIDE 
  messages ...


Для XML полей (когда они есть) немного по-другому.

5. Прочекать в несколько проходов все таблицы - "set integrity for tabschema.tabname immediate checked" по списку:
Код: sql
1.
SELECT  tabschema, tabname FROM  SYSCAT.TABLES WHERE status = 'C';


Теоретически там могут остаться неконсистентные таблицы (в случае, если где-то load не прошёл или есть циклические зависимости). Разбираться с ними вручную.

6. Рестартовать sequence'ы по списку:
Код: sql
1.
2.
3.
select SEQSCHEMA, SEQNAME, NEXTCACHEFIRSTVALUE 
from SYSCAT.SEQUENCES
where seqschema not like 'SYS%' and SEQTYPE='S'


и IDENTITY поля (они есть в DDL, но за время переливки данных последовательности могли уйти вперёд):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select c.tabschema, c.tabname, c.colname, s.NEXTCACHEFIRSTVALUE
from SYSCAT.SEQUENCES s join SYSIBM.SYSDEPENDENCIES as d
        on (s.SEQSCHEMA, s.SEQNAME) = (d.BSCHEMA, d.BNAME)
     join syscat.tables as t 
        on (d.DSCHEMA, d.DNAME) = (t.tabschema, t.tabname)
     join syscat.columns as c
        on (t.tabschema, t.tabname) = (c.tabschema, c.tabname)
where s.seqschema not like 'SYS%' and s.SEQTYPE='I'
  and d.BTYPE= 'Q' and C.identity = 'Y';



7. Пройтись по всем таблицам RUNSTATS, отребиндить пакеты. Прибиндить те, что нужны.

При промежуточных накатах данных (если они делаются не из поднятого бэкапа, к которому закрыт доступ, а с живой системы) какие-то изтаблиц могут оставаться в check pending за счёт возникающих расхождений (экспорт делается в разное время).
При финальном накате всех успевших измениться таблиц всё должно сойтись.


Мороки, вроде, много, но всё это отлично скриптуется, и потом всегда найдётся куда это применить (перенос даных в тестовых/девелоперских средах, сохранение части БД при обновлении тестовых/девелоперских сред из production и т.п.)
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38559326
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greifeld,

У вас все таблицы в базе постоянно увеличиваются в размерах? Проще выделить наиболее быстро растущие таблицы, создать для них отдельный tablespace с размером страницы 32К и перенести их туда (не забыть про индексы). Ну а потом если потребуется, постепенно переносить остальные.
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38559421
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще, начиная с версии 9 в db2 все tablespace создаются как large, т.е. при том же размере страницы что и в 8 версии, ограничения на размер tablespace более чем приемлемые для большинства систем:

Table space type4K page size limit8K page size limit16K page size limit32K page size limitDMS and nontemporary automatic storage table spaces ( regular )64G128G256G512GDMS and temporary DMS and nontemporary automatic storage table spaces ( large )8192G16 384G32 768G65 536G

Но после миграции с 8 на версию 9 надо сделать конвертацию с помощью ALTER TABLESPACE tablespace_name CONVERT TO LARGE

Поэтому наверно проще сделать миграцию а затем сконвертировать пользовательские tablespace чем заниматься потабличным переносом :)
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38559426
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно вот ссылка на документацию http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.dbobj.doc/doc/c0052381.html с ограничениями в старых (regular) и новых (large) таблеспейсах.
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38559483
CawaSPbЕвгений Хабаров,

Если есть необходимость сократить время переключения (а можни считать априори, что такая необходимость есть), то можно:
а) дозаливать итеративно только изменяющиеся таблицы (отслеживая, к примеру, по изменениям в результатах MON_GET_TABLE(...) значений rows_inserted, rows_updated, rows_deleted). Во множестве случаев в период низкой нагрузки этого хватит.
б) в конце концов просто настроить Q репликацию (запретив нелогирумые операции).

Важно при этом, чтобы за период миграции никто "чужой" структуру базу не правил, но это вообще правильно и, в крайнем случае отслеживаемо (с 10.1 Q репликация и изменения структуры реплицировать умеет, но я бы на это не полагался).

Но да, нужны предварительные репетиции.
Могу только согласиться. :)
Собственно задача миграции это особый процесс, требующий проектирования и планирования. И хорошо, что есть несколько вариантов и пространство для маневра.
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38559498
greifeldЕщё admin_move_table судя по всему не понимает пользовательские типы данных
А также ругается, если в комментариях в столбцам таблицы есть запятая... Это тихий ужас.

Зачем она вообще нужна с такими ограничениями?
Для случаев, когда не натыкаешься на ограничения, или же натыкаешься, но на малом проценте таблиц.
Запятая в комментариях - это похоже на баг. Фикспак какой стоит?
На этой же хранимой натыкались на проблему на одном из ранних фикспаков - давало ошибку переноса, если на таблицу были выданы права для идентификатора "PUBLIC".
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38559912
greifeld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений ХабаровЗапятая в комментариях - это похоже на баг. Фикспак какой стоит?
На этой же хранимой натыкались на проблему на одном из ранних фикспаков - давало ошибку переноса, если на таблицу были выданы права для идентификатора "PUBLIC".

Версия "DB2 v9.7.600.458", Fix Pack "6"
Ругается на комментарии к некоторым столбцам:
SQL00101N Строчная константа, начинающаяся с "<обрезанная часть комментария>", не содержит ограничителя конца строки. SQLSTATE=42603
Дело наверно не в запятой. Может в длине текстовых строк, но она небольшая, не более 100... Служебных символов не вижу...
В крайнем случае удалю все комментарии, хотя очень не хочется.
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38559913
greifeld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndronА вообще, начиная с версии 9 в db2 все tablespace создаются как large, т.е. при том же размере страницы что и в 8 версии, ограничения на размер tablespace более чем приемлемые для большинства систем:

Table space type4K page size limit8K page size limit16K page size limit32K page size limitDMS and nontemporary automatic storage table spaces ( regular )64G128G256G512GDMS and temporary DMS and nontemporary automatic storage table spaces ( large )8192G16 384G32 768G65 536G

Но после миграции с 8 на версию 9 надо сделать конвертацию с помощью ALTER TABLESPACE tablespace_name CONVERT TO LARGE

Поэтому наверно проще сделать миграцию а затем сконвертировать пользовательские tablespace чем заниматься потабличным переносом :)

Это был бы просто шикарный вариант, если бы не:

db2 => ALTER TABLESPACE DATASPACE CONVERT TO LARGE
SQL1237W Для табличного пространства "DATASPACE" выполняется преобразование
из типа REGULAR в тип LARGE. Нужно реорганизовать или перестроить индексы для
таблиц в этом табличном пространстве для поддержки больших RID.
SQLSTATE=01686

Все индексы я реорганизовывал сразу после миграции на 9.7.
В руководстве не вижу пока ключей для какой-то особенной реорганизации "для поддержки больших RID"



------------------------------------------------------------------
Остальные предложенные здесь варианты решения проблемы требуют создания 32-страничных копий для каждого из 6 имеющихся табличных пространств. Для полноценных тестов пока нет свободного места.
И самая главная проблема: пока нет возможности создать пустую базу требуемой структуры.
Предложенная команда db2look -d <dbname> -td @ -e -o <dbname>.ddl -a -l -xd -f делает снимок не всех табличных пространств... но тут ещё буду разбираться.
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38559928
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greifeld,

Если реорганизация не помогает, попробовать удалить индексы, конвертировать tablespace и снова создать их?
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38559938
greifeldAndronА вообще, начиная с версии 9 в db2 все tablespace создаются как large, т.е. при том же размере страницы что и в 8 версии, ограничения на размер tablespace более чем приемлемые для большинства систем:

Table space type4K page size limit8K page size limit16K page size limit32K page size limitDMS and nontemporary automatic storage table spaces ( regular )64G128G256G512GDMS and temporary DMS and nontemporary automatic storage table spaces ( large )8192G16 384G32 768G65 536G

Но после миграции с 8 на версию 9 надо сделать конвертацию с помощью ALTER TABLESPACE tablespace_name CONVERT TO LARGE

Поэтому наверно проще сделать миграцию а затем сконвертировать пользовательские tablespace чем заниматься потабличным переносом :)

Это был бы просто шикарный вариант, если бы не:

db2 => ALTER TABLESPACE DATASPACE CONVERT TO LARGE
SQL1237W Для табличного пространства "DATASPACE" выполняется преобразование
из типа REGULAR в тип LARGE. Нужно реорганизовать или перестроить индексы для
таблиц в этом табличном пространстве для поддержки больших RID.
SQLSTATE=01686

Все индексы я реорганизовывал сразу после миграции на 9.7.
В руководстве не вижу пока ключей для какой-то особенной реорганизации "для поддержки больших RID"

SQL1237W - это не ошибка, а предупреждение. Смотрим внимательно описание сообщения.
А далее читаем описание опции CONVERT TO LARGE в разделе ALTER TABLESPACE statement
Там написано следующее:Раздел NotesConversion to large DMS table spaces: After conversion, it is recommended that you issue the COMMIT statement and then increase the storage capacity of the table space.

If the table space is enabled for auto-resize, the MAXSIZE table space attribute should be increased, unless it is already set to NONE.
If the table space is not enabled for auto-resize:
Enable auto-resize by issuing the ALTER TABLESPACE statement with the AUTORESIZE YES option, or
Add more storage by adding stripe sets, extending the size of existing containers, or both

Indexes for tables in a converted table space must be reorganized or rebuilt before they can support large record identifiers (RIDs).

The indexes can be reorganized using the REORG INDEXES ALL command (without the CLEANUP ONLY clause). Specify the ALLOW NO ACCESS option for partitioned tables.
Alternatively, the tables can be reorganized (not INPLACE), which will rebuild all indexes and enable the tables to support more than 255 rows per page.

To determine which tables do not yet support large RIDs, use the ADMIN_GET_TAB_INFO table function.
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38559940
greifeld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений Хабаровэто не ошибка, а предупреждение
[/quot]

Извиняюсь, действительно конвертация выполнилась. Проверяю работоспособность базы.
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38559970
greifeld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное спасибо Евгению и Andron'у на помощь.
Пока остановлюсь на варианте экспорта в 9.7 и конвертации табличных пространств без перехода на 32-страничные табличные пространства.

Но в 9.7 есть другие проблемы, в частности отсутствие XMLExtender.

Поэтому если у кого-нибудь есть наработки переноса данных в DB2 8.2, буду премного благодарен.
В частности я встречал 2 самописные процедуры DisintegrateTable и IntegrateTable, которые не разрушая индексов, проверочных ограничений и триггеров могут пересоздать таблицу даже в другом табличном пространстве.
Но на таблицах большого размера процесс зависает.
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38559976
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greifeld,

Унаследованные DMS табличные пространства, как их ни конверти в LARGE, останутся унаследованными, на которых, к примеру, невозможна операция "ALTER TABLESPACE tbspacename LOWER HIGH WATER MARK". Это одно из серьёзнейших улучшений в 9.7, снимающее много ручной работы при maintenance DMS табличных пространств.

Как ни конверти, старые структуры останутся.

PS DDL для пересоздания правильней снять с восстановленной "рядом" и сконвертированной в 9.7 базы. В 8.x у db2look'а много багов.
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38560216
greifeld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CawaSPb ,

На счёт db2look'а спасибо за совет.
А можно поинтересоваться на счёт эффективности "ALTER TABLESPACE tbspacename LOWER HIGH WATER MARK" и не уменьшит ли это производительность?

Вообще нет необходимости сильно сжимать базу. Наша задача избавиться от искусственных ограничений на tablespace
...
Рейтинг: 0 / 0
Увеличить размер страницы tablespace
    #38560256
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greifeld,

Проседать будет. Как сильно - зависит от множества обстоятельств.
Это процесс "дефрагментации" пустого пространства и собирания его в конце.
Мувит оно экстентами без необходимости их как-то специально перетасовывать, т.е. во многих случаях процесс не сильно тяжёл.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Увеличить размер страницы tablespace
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]