|
Сделать партиционирование на живых таблицах
|
|||
---|---|---|---|
#18+
Есть задача - партиционировать табличку с данными на несколько разных. Как это лучше сделать? До этого не сталкивались с подобными решениями. Табличка (вообще их несколько разных, но не суть) очень большая (20 млн записей) и жирная (400 Gb). Диски заканчиваются и хочется разнести данные на т.н. архивные данные на другой диск (партиция в другом TABLESPACE) и это бОльшая часть данных и т.н. оперативные данные. Архивные данные при этом также партицируем (например помесячно), чтобы ну очень старые данные отцеплять и куда-то убирать с сервера вообще. При этом - почему по партициям, потому что существующий софт не переписывается и должен видеть при желании весь набор данных. Какие есть решения для этого? И какие требования к ним? Свободное дисковое пространство и пр... Конечно хотелось бы чтобы это работало на живой БД - без остановки существующих на сервере процессов. Такое вообще возможно? Решение нужно для серверов начиная с версии 9.6. Если такого нет, то конечно сможем обновляться вверх. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 17:08 |
|
Сделать партиционирование на живых таблицах
|
|||
---|---|---|---|
#18+
balykovdron Есть задача - партиционировать табличку с данными на несколько разных. Как это лучше сделать? До этого не сталкивались с подобными решениями. Табличка (вообще их несколько разных, но не суть) очень большая (20 млн записей) и жирная (400 Gb). Диски заканчиваются и хочется разнести данные на т.н. архивные данные на другой диск (партиция в другом TABLESPACE) и это бОльшая часть данных и т.н. оперативные данные. Архивные данные при этом также партицируем (например помесячно), чтобы ну очень старые данные отцеплять и куда-то убирать с сервера вообще. При этом - почему по партициям, потому что существующий софт не переписывается и должен видеть при желании весь набор данных. Какие есть решения для этого? И какие требования к ним? Свободное дисковое пространство и пр... Конечно хотелось бы чтобы это работало на живой БД - без остановки существующих на сервере процессов. Такое вообще возможно? Решение нужно для серверов начиная с версии 9.6. Если такого нет, то конечно сможем обновляться вверх. Если от 9.6 то только старая схема партиционирования на наследовании и триггерах. И вот как раз её проще внедрять на живую чем нативное. PS: что вы под "решением" понимает? софтину которая за вас всё сделает? такого не бывает. просто руками задача вполне реалистично решается... https://www.postgresql.org/docs/9.6/ddl-partitioning.html -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 19:59 |
|
Сделать партиционирование на живых таблицах
|
|||
---|---|---|---|
#18+
А если не 9.6? Какие могут быть варианты? Например для 14й версии. Под решением я понимаю какой-то набор команд, при котором табличка станет партиционируемой, без изменения стороннего софта, который с ней работает. При этом работа БД не остановится (это идеальный вариант) или БД может быть недоступна только кратковременно. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2022, 10:33 |
|
Сделать партиционирование на живых таблицах
|
|||
---|---|---|---|
#18+
balykovdron А если не 9.6? Какие могут быть варианты? Например для 14й версии. Под решением я понимаю какой-то набор команд, при котором табличка станет партиционируемой, без изменения стороннего софта, который с ней работает. При этом работа БД не остановится (это идеальный вариант) или БД может быть недоступна только кратковременно. В эту сторону смотри Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
https://www.depesz.com/2019/03/19/migrating-simple-table-to-partitioned-how/ ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2022, 11:13 |
|
Сделать партиционирование на живых таблицах
|
|||
---|---|---|---|
#18+
mefman, долго будет. Если место не совсем уже 95% used, то обычно делается просто вот так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
То есть имеющаяся таблица цепляется как есть одним куском исторического артефакта, дальше уже пишете партиции. Если данные insert-only (не нужно волноваться про update/delete в старых данных) - то делаете копию этой исторической таблицы уже нарезанную на партиции и затем делаете detach partition плюс группу attach partition этих новых партиций. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2022, 11:30 |
|
|
start [/forum/topic.php?fid=53&msg=40127171&tid=1993705]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
others: | 264ms |
total: | 374ms |
0 / 0 |