Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
Приветствую! СУБД 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 ? Может у кого есть свои наработки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 10:45 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
greifeld, У вас все таблицы/индексы в одном tablespace ? Это не есть хорошо. Для крупных таблиц/индексов желательно индивидуальные TS. ИМХО вначале полноценно смигрировать в 9.7, потом создать дополнительные tablespace с нужным размером страницы и туда "увести" крупные таблицы/индексы постепенно. В 9.7 для этого есть процедура ADMIN_MOVE_TABLE procedure - Move tables online . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 13:30 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
Евгений Хабаров, Мы в своё время отлично совместили две этих работы. Миграцию лучше проводить пересозданием структуры в пустой БД с последующей перезаливкой данных (избавляясь от унаследованных структур хранения). При пересоздании таблиц можно их распихать по своим пространствам в соответствии с имеющимися соображениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 15:01 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
CawaSPbЕвгений Хабаров, Мы в своё время отлично совместили две этих работы. Миграцию лучше проводить пересозданием структуры в пустой БД с последующей перезаливкой данных (избавляясь от унаследованных структур хранения). При пересоздании таблиц можно их распихать по своим пространствам в соответствии с имеющимися соображениями. Да, такой вариант вполне допустим, но, не всегда возможен. Миграция существующей БД по времени обычно "короче", чем пересоздание структуры/заливка данных. Естественно в случае, если перед окончательной миграцией весь сценарий "прогнали" на тестовой конфигурации и убедились, что это работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 15:54 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
Евгений Хабаров, Если есть необходимость сократить время переключения (а можни считать априори, что такая необходимость есть), то можно: а) дозаливать итеративно только изменяющиеся таблицы (отслеживая, к примеру, по изменениям в результатах MON_GET_TABLE(...) значений rows_inserted, rows_updated, rows_deleted). Во множестве случаев в период низкой нагрузки этого хватит. б) в конце концов просто настроить Q репликацию (запретив нелогирумые операции). Важно при этом, чтобы за период миграции никто "чужой" структуру базу не правил, но это вообще правильно и, в крайнем случае отслеживаемо (с 10.1 Q репликация и изменения структуры реплицировать умеет, но я бы на это не полагался). Но да, нужны предварительные репетиции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 13:53 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
Предварительные репетиции начались) 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 таблиц и на большинстве из них есть первичный ключ плюс несколько внешних. Как быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 15:44 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
Ещё admin_move_table судя по всему не понимает пользовательские типы данных А также ругается, если в комментариях в столбцам таблицы есть запятая... Это тихий ужас. Зачем она вообще нужна с такими ограничениями? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 17:29 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
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. и вернуть AUTO_REVAL обратно в DEFERRED. 5. Создать список таблиц для выгрузки (для таблиц с LOB'ами, для таблиц с автоинкрементными и генерируемыми полями) в различных комбинациях. С LOB'ами/без LOB'ов: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. С генерируемыми неавтоинкрементными полями/без них: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. С генерируемыми всегда автоинкрементными полями/без них: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Базовые команды для экспорта/load'а: Код: sql 1. 2. 3. 4. Для LOB'ов: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Для генерируемых полей: Код: sql 1. 2. 3. Для GENERATED ALWAYS IDENTITY полей: Код: sql 1. 2. 3. Для XML полей (когда они есть) немного по-другому. 5. Прочекать в несколько проходов все таблицы - "set integrity for tabschema.tabname immediate checked" по списку: Код: sql 1. Теоретически там могут остаться неконсистентные таблицы (в случае, если где-то load не прошёл или есть циклические зависимости). Разбираться с ними вручную. 6. Рестартовать sequence'ы по списку: Код: sql 1. 2. 3. и IDENTITY поля (они есть в DDL, но за время переливки данных последовательности могли уйти вперёд): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 7. Пройтись по всем таблицам RUNSTATS, отребиндить пакеты. Прибиндить те, что нужны. При промежуточных накатах данных (если они делаются не из поднятого бэкапа, к которому закрыт доступ, а с живой системы) какие-то изтаблиц могут оставаться в check pending за счёт возникающих расхождений (экспорт делается в разное время). При финальном накате всех успевших измениться таблиц всё должно сойтись. Мороки, вроде, много, но всё это отлично скриптуется, и потом всегда найдётся куда это применить (перенос даных в тестовых/девелоперских средах, сохранение части БД при обновлении тестовых/девелоперских сред из production и т.п.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 19:38 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
greifeld, У вас все таблицы в базе постоянно увеличиваются в размерах? Проще выделить наиболее быстро растущие таблицы, создать для них отдельный tablespace с размером страницы 32К и перенести их туда (не забыть про индексы). Ну а потом если потребуется, постепенно переносить остальные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 08:58 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
А вообще, начиная с версии 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 чем заниматься потабличным переносом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 10:20 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
Собственно вот ссылка на документацию http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.dbobj.doc/doc/c0052381.html с ограничениями в старых (regular) и новых (large) таблеспейсах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 10:22 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
CawaSPbЕвгений Хабаров, Если есть необходимость сократить время переключения (а можни считать априори, что такая необходимость есть), то можно: а) дозаливать итеративно только изменяющиеся таблицы (отслеживая, к примеру, по изменениям в результатах MON_GET_TABLE(...) значений rows_inserted, rows_updated, rows_deleted). Во множестве случаев в период низкой нагрузки этого хватит. б) в конце концов просто настроить Q репликацию (запретив нелогирумые операции). Важно при этом, чтобы за период миграции никто "чужой" структуру базу не правил, но это вообще правильно и, в крайнем случае отслеживаемо (с 10.1 Q репликация и изменения структуры реплицировать умеет, но я бы на это не полагался). Но да, нужны предварительные репетиции. Могу только согласиться. :) Собственно задача миграции это особый процесс, требующий проектирования и планирования. И хорошо, что есть несколько вариантов и пространство для маневра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 10:50 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
greifeldЕщё admin_move_table судя по всему не понимает пользовательские типы данных А также ругается, если в комментариях в столбцам таблицы есть запятая... Это тихий ужас. Зачем она вообще нужна с такими ограничениями? Для случаев, когда не натыкаешься на ограничения, или же натыкаешься, но на малом проценте таблиц. Запятая в комментариях - это похоже на баг. Фикспак какой стоит? На этой же хранимой натыкались на проблему на одном из ранних фикспаков - давало ошибку переноса, если на таблицу были выданы права для идентификатора "PUBLIC". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 10:55 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
Евгений ХабаровЗапятая в комментариях - это похоже на баг. Фикспак какой стоит? На этой же хранимой натыкались на проблему на одном из ранних фикспаков - давало ошибку переноса, если на таблицу были выданы права для идентификатора "PUBLIC". Версия "DB2 v9.7.600.458", Fix Pack "6" Ругается на комментарии к некоторым столбцам: SQL00101N Строчная константа, начинающаяся с "<обрезанная часть комментария>", не содержит ограничителя конца строки. SQLSTATE=42603 Дело наверно не в запятой. Может в длине текстовых строк, но она небольшая, не более 100... Служебных символов не вижу... В крайнем случае удалю все комментарии, хотя очень не хочется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 15:00 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
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 делает снимок не всех табличных пространств... но тут ещё буду разбираться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 15:01 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
greifeld, Если реорганизация не помогает, попробовать удалить индексы, конвертировать tablespace и снова создать их? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 15:08 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 15:16 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
Евгений Хабаровэто не ошибка, а предупреждение [/quot] Извиняюсь, действительно конвертация выполнилась. Проверяю работоспособность базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 15:19 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
Огромное спасибо Евгению и Andron'у на помощь. Пока остановлюсь на варианте экспорта в 9.7 и конвертации табличных пространств без перехода на 32-страничные табличные пространства. Но в 9.7 есть другие проблемы, в частности отсутствие XMLExtender. Поэтому если у кого-нибудь есть наработки переноса данных в DB2 8.2, буду премного благодарен. В частности я встречал 2 самописные процедуры DisintegrateTable и IntegrateTable, которые не разрушая индексов, проверочных ограничений и триггеров могут пересоздать таблицу даже в другом табличном пространстве. Но на таблицах большого размера процесс зависает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 15:38 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
greifeld, Унаследованные DMS табличные пространства, как их ни конверти в LARGE, останутся унаследованными, на которых, к примеру, невозможна операция "ALTER TABLESPACE tbspacename LOWER HIGH WATER MARK". Это одно из серьёзнейших улучшений в 9.7, снимающее много ручной работы при maintenance DMS табличных пространств. Как ни конверти, старые структуры останутся. PS DDL для пересоздания правильней снять с восстановленной "рядом" и сконвертированной в 9.7 базы. В 8.x у db2look'а много багов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 15:40 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
CawaSPb , На счёт db2look'а спасибо за совет. А можно поинтересоваться на счёт эффективности "ALTER TABLESPACE tbspacename LOWER HIGH WATER MARK" и не уменьшит ли это производительность? Вообще нет необходимости сильно сжимать базу. Наша задача избавиться от искусственных ограничений на tablespace ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 17:57 |
|
||
|
Увеличить размер страницы tablespace
|
|||
|---|---|---|---|
|
#18+
greifeld, Проседать будет. Как сильно - зависит от множества обстоятельств. Это процесс "дефрагментации" пустого пространства и собирания его в конце. Мувит оно экстентами без необходимости их как-то специально перетасовывать, т.е. во многих случаях процесс не сильно тяжёл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 18:21 |
|
||
|
|

start [/forum/topic.php?fid=43&fpage=28&tid=1601169]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
92ms |
get forum data: |
3ms |
get page messages: |
133ms |
get tp. blocked users: |
2ms |
| others: | 20ms |
| total: | 349ms |

| 0 / 0 |
