|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
Доброго времени суток! Есть необходимость партицировать уже существующую таблицу. Во всех источниках указывается как создать(CREATE TABLE) партицированную таблицу, но к сожалению ничего нет про партицирование существующей. Может кто сталкивался? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 11:59 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
balanov.s.v, Добрый день. Это действительно делается пересозданием таблицы и перезагрузкой ее данными старой. Автоматизировать процесс, в т.ч. сделать это в онлайне, можно с помощью встроенной хранимой процедуры. Moving tables online by using the ADMIN_MOVE_TABLE procedure ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 12:11 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
Mark Barinstein, Т.е. я правильно понимаю что нужно создать сначала таблицу (CREATE TABLE) аналогичную исходной только с партицированием и потом уже воспользоваться процедурой CALL_ADMIN_MOVE, переместив данные? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 05:41 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
balanov.s.v, Нет, не правильно. В примерах этого нигде не делается. Вызовом хранимой процедуры вы определяете новую структуру своей существующей таблицы. Процедура сама создаёт таблицу с этой новой структурой и другим именем, все другие необходимые для операции служебные объекты, копирует данные из старой таблицы в новую, удаляет старую и переименовывает новую. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 08:27 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
Mark Barinstein, В продолжении темы: в базе созданы 2 дополнительных табличных пространства TS1 и TS2. Есть таблица с именем PAYSUM.NON_PAY с целочисленным столбцом TYPE_NONPAY. Пытаюсь переместить таблицу в TS1 и сделать партицирование таблицы по столбцу TYPE_NONPAY. Команда: call admin_move_table('PAYSUM','NON_PAY','TS1','TS1','TS1','','','(TYPE_NONPAY)(STARTING FROM (31) ENDING AT (33) in TS2)','','','MOVE'); В ответ получаю ошибку: SQL0327N Строку нельзя вставить в таблицу "PAYSUM.NON_PAYADREQ5t", поскольку она выходит за пределы заданного диапазона разделения данных. SQLSTATE=22525 SQL0327N Строку нельзя вставить в таблицу "PAYSUM.NON_PAYADREQ5t ", поскольку она выходит за пределы заданного диапазона разделения данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 18:45 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
balanov.s.v, Сообщение говорит о том, что значение поля TYPE_NONPAY в некоторой записи таблицы выходит за заданный единственный диапазон значений [31, 33]. Это не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 20:31 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
Mark Barinstein, Так и есть, но я пытаюсь вынести в табличное пространство TS2 именно строки со значениями с 31 по 33 в столбце TYPE_NONPAY ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2021, 03:07 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
balanov.s.v, Вы обязаны сделать так, чтобы для каждой записи в секционированной таблице существовала соответствующая секция, в диапазон значений которой попадает значение поля этой записи. Нарушающие это правило изменения таблицы будут вызывать ошибку, которую вы получили. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2021, 09:25 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
Mark Barinstein, К сожалению, не совсем понимаю что я делаю не так... Я правильно понимаю что мне также нужно указать столбец TYPE_NONPAY как MDC в параметрах процедуры, чтобы по нему прошло упорядочивание таблицы? можете привести пример правильного синтаксиса? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2021, 17:35 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
balanov.s.v, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
В несекционированной таблице - 4 записи. При ее секционировании я должен сделать так, чтобы каждое значения в поле секционирования обязательно попадало в один из диапазонов определяемых секций. Если бы в моей таблице была запись со значением 10, то вызов процедуры завершился с такой же как у вас ошибкой - среди определяемых секций нет такой, в диапазон значений которой попадало бы это значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2021, 18:29 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
Mark Barinstein, Получилось, спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2021, 16:35 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
Mark Barinstein, Добрый день! Попробовал сделать партицирование уже существующей таблицы ещё одним способом(без admin_move_table): Создаю пустую таблицу: "Create table like исходная таблица newtabname с условиями партицирования". Получаю пустую таблицу-близнец исходной таблицы, но с партицированием. Из исходной делаю экспорт в файл, в новой таблице делаю импорт данных из файла. Затем удаляется исходная таблица и переименовывается вновь созданная уже партицированная. Вопрос только есть в размерах таблицы: у меня новая таблица по размеру получается примерно в пять раз меньше старой. Хотя все строки на месте... Размер таблицы оцениваю следующим скриптом: select tabschema || '.' || tabname "table", decimal((data_object_p_size + index_object_p_size + long_object_p_size + lob_object_p_size + xml_object_p_size)/1024,10,2) "physical_space_mb", decimal((data_object_l_size + index_object_l_size + long_object_l_size + lob_object_l_size + xml_object_l_size)/1024,10,2) "logical_space_mb" from sysibmadm.admintabinfo where tabschema not like 'SYS%' order by 2 desc; Нормальна ли такая ситуация или я неправильно оцениваю размер таблицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 10:45 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
balanov.s.v, Добрый день. Я надеюсь, что вы не сравниваете сжатую и несжатую таблицы. Старая таблица может быть не реорганизована после массивных удалений / изменений. Запустите на старую REORGCHK и посмотрите, что выведет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 10:57 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
Mark Barinstein, ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 11:21 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
balanov.s.v, ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 11:22 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
balanov.s.v, Статистика таблиц: F1: 100 * OVERFLOW / CARD < 5 F2: 100 * (Эффективное использование пространства страниц данных) > 70 F3: 100 * (Требуемые страницы / Общее число страниц) > 80 SCHEMA.NAME CARD OV NP FP ACTBLK TSIZE F1 F2 F3 REORG ---------------------------------------------------------------------------------------- Таблица: PAYSUM.RECIPIENT_FILE 6457112 0 49557 49557 - 1,61e+09 0 99 100 --- ---------------------------------------------------------------------------------------- Статистика индексов: F4: CLUSTERRATIO или нормализованный CLUSTERFACTOR > 80 F5: 100 * (пространство, использованное конечными страницами / пространство, доступное для непустых конечных страниц) > MIN(50, (100 - PCTFREE)) F6: (100 - PCTFREE) * (пространство, доступное в индексе на единицу меньшего уровня / пространство, необходимое для всех ключей) < 100 F7: 100 * (число псевдоудаленных RID / общее число RID) < 20 F8: 100 * (число псевдоудаленных конечных страниц / общее число конечных страниц) < 20 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 12:28 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
balanov.s.v, Статистика таблиц: F1: 100 * OVERFLOW / CARD < 5 F2: 100 * (Эффективное использование пространства страниц данных) > 70 F3: 100 * (Требуемые страницы / Общее число страниц) > 80 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 12:29 |
|
Партицирование существующей таблицы
|
|||
---|---|---|---|
#18+
Вы в файлах своих только статистику по индексам привели, из которой видно, что у вас гораздо больше индексов на старой таблице. Те цифры по таблице (с F1, F2, F3), что вы дописали после - они одинаковые? Функция ADMIN_GET_TAB_INFO (лучше ее использовать вместо sysibmadm.admintabinfo, т.к. с ней на конкретную таблицу получать, а не на всю базу) на данные и индексы отдельно по обоим таблицам что выдает? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 13:02 |
|
|
start [/forum/topic.php?fid=43&fpage=2&tid=1600129]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 308ms |
total: | 437ms |
0 / 0 |