Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Создание партиций на существующей таблицах с минимальным напрягом  [new]
Daba
Member

Откуда:
Сообщений: 135
Добрый день,

Мне нужно двинуть много больших не партицированных таблиц на партиции.
Идея примерно такова: существующие данные остануться в одной "старой" партиции а новые будут добавляться в "маленькие" дневные партиции. Где-то через полгода "старую" партицию можно будет двинуть в мусор/архив. Таким образом через пол-года все таблицы будут партицированны по дню.
Теперь вопрос: т.к. старых данных много, как сделать так что бы перенос данных в партицию прошел с минимальным IO и временем простоя?

Заранее спасибо.
29 июл 15, 18:01    [17951654]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Daba
Добрый день,

Мне нужно двинуть много больших не партицированных таблиц на партиции.
Идея примерно такова: существующие данные остануться в одной "старой" партиции а новые будут добавляться в "маленькие" дневные партиции. Где-то через полгода "старую" партицию можно будет двинуть в мусор/архив. Таким образом через пол-года все таблицы будут партицированны по дню.
Теперь вопрос: т.к. старых данных много, как сделать так что бы перенос данных в партицию прошел с минимальным IO и временем простоя?

Заранее спасибо.


прочитать про switch partition
29 июл 15, 18:05    [17951667]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Daba, я не помню, RIGHT или LEFT границу вам надо сделать, чтобы при создании новой партиции данные не переливались.

Почитайте тут: http://www.sqlskills.com/blogs/kimberly/clarifying-left-and-right-in-the-defintion-of-a-partition-function-in-sql-server-2005/
29 июл 15, 18:09    [17951680]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
Daba
Member

Откуда:
Сообщений: 135
Дорогой churupaha,

я конечно прочитаю, но, вопрос скорее не как это сделать, а как это сделать с минимальной нагрузкой на систему и с минимальным временем.
Насколькоя понимаю для switch partition мне нужно сначала все существующие данные "перенести" на партиционную схему. Вопрос насколько это операция тяжелая с точки зрения IO (и времени)?
29 июл 15, 18:37    [17951763]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
Daba
Дорогой churupaha,

я конечно прочитаю, но, вопрос скорее не как это сделать, а как это сделать с минимальной нагрузкой на систему и с минимальным временем.
Насколькоя понимаю для switch partition мне нужно сначала все существующие данные "перенести" на партиционную схему. Вопрос насколько это операция тяжелая с точки зрения IO (и времени)?



1) Создать копию с новой схемой партиционирования пока без индексов
2) Скопировать данные
3) Создать индексы, констрейнты
4) Переименовать

На 100+ лямах по другому вообще вряд ли
29 июл 15, 18:44    [17951787]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
Daba
Member

Откуда:
Сообщений: 135
a_voronin,

2) Скопировать данные ?
3) Создать индексы, ?

незачёт :(
Кучу время возьмёт...
29 июл 15, 19:08    [17951875]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Daba
я конечно прочитаю switch partition ...


конечно, почитай

Daba
насколько это операция тяжелая с точки зрения IO (и времени)?


там написано
29 июл 15, 19:13    [17951899]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
Daba
a_voronin,

2) Скопировать данные ?
3) Создать индексы, ?

незачёт :(
Кучу время возьмёт...


Вы спросили, я ответил. 700 лямов у меня переливала 4 часа.

Предложите метод быстрее: alter partition schema -- вперед -- посмотрите сколько это времени займёт.
29 июл 15, 19:15    [17951907]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
Daba
Теперь вопрос: т.к. старых данных много, как сделать так что бы перенос данных в партицию прошел с минимальным IO и временем простоя?
Оно будет быстро, с использованием switch partition.
Единственно, нужно сделать CHECK-констрэйн для несекционированных таблиц. Это займёт время, конечно.
29 июл 15, 21:19    [17952290]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
a_voronin
Вы спросили, я ответил. 700 лямов у меня переливала 4 часа.

Предложите метод быстрее: alter partition schema -- вперед -- посмотрите сколько это времени займёт.
У меня полтеррабайта (15 миллиардов строк) "перелилось" за 10 миллисекунд (на тестовом сервере, завтра переключу рабочий на пяток террабайт).

Это же просто изменение метаданных.
Естественно, "alter partition schema" делать не надо :-)

Единственно, нужно чек-констрейн создать, это у меня заняло 20 минут, на рабочем будет часа два.
29 июл 15, 21:24    [17952310]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
Daba
Насколькоя понимаю для switch partition мне нужно сначала все существующие данные "перенести" на партиционную схему. Вопрос насколько это операция тяжелая с точки зрения IO (и времени)?
Вам написали про:
churupaha
прочитать про switch partition

Не нужно переносить данные, и места дополнительного не нужно. Просто этим "switch partition" существующий файл данных назначается секции таблицы, т.е. это всего лишь изменение метаданных.
29 июл 15, 21:26    [17952316]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
Мумба
Guest
alexeyvg
Единственно, нужно чек-констрейн создать

А для чего чек-констрейн?
29 июл 15, 21:47    [17952406]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
o-o
Guest
Мумба
alexeyvg
Единственно, нужно чек-констрейн создать

А для чего чек-констрейн?

потому что данные уже "там".
допустим, вы переключаете исходную таблицу в секцию со значениями <=2013,
а сервер должен "на слово" поверить, что в таблице нет 2015-ого года?
29 июл 15, 21:52    [17952423]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
alexeyvg
Daba
Теперь вопрос: т.к. старых данных много, как сделать так что бы перенос данных в партицию прошел с минимальным IO и временем простоя?
Оно будет быстро, с использованием switch partition.
Забыл сказать - тут решение (и его "тяжесть") зависит от того, что вы хотите в итоге получить.

Что бы ощутить в полной мере преимущества секционирования, нужно делать файлгруппу на каждый день.

И соответственно, для этого нужно, что бы существующие таблицы лежали не в PRIMARY файлгруппе, а в отдельной.
Вот у меня именно такая ситуация, и я могу так сделать, переключить методом "переключения существующих таблиц в секцию и потом - естественного вытеснения старых данных".

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

В общем, нужно перед началом всего тщательно спланировать будущую систему, что вы хотите получить от секционирования и как вы это собираетесь получать.
29 июл 15, 22:15    [17952536]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
alexeyvg
А у вас, если табицы в той файлгруппе, которую потом нельзя удалить, то тут уже нужно будет решить - отказываться от разбиения на отдельные файлы по дням, и переключить быстро, или не отказываться, и выбирать вариант с переливкой данных.


Daba
существующие данные остануться в одной "старой" партиции а новые будут добавляться в "маленькие" дневные партиции.


- сделать одну огромную секцию со старыми данными (date_time < завтрашнего_дня), оставив ее в текущей файловой группе, чтобы switch прошел
- для datetime >= завтрашний_день нарезать мелких дневных пустышек партиций наперед (и не зевать добавлять вовремя, чтбы это были операции уровня метаданных). можно каждую в отдельную файловую группу.

|большая_партиция|dayM|dayM+1|dayM+2|...|dayM+K|


автор
Где-то через полгода "старую" партицию можно будет двинуть в мусор/архив.


а потом switch большой партиции в таблицу той же структуры и truncate таблицы.
29 июл 15, 22:32    [17952610]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
+

и это заранее продумать 17951680
29 июл 15, 22:35    [17952631]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
churupaha
можно каждую в отдельную файловую группу.
Вообще да, согласен, не додумал, преувеличил трудности. Новые то партиции никто не запрещает создавать в новых файлгруппах.
29 июл 15, 22:48    [17952691]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
Roust_m
Member

Откуда: Сидней
Сообщений: 1197
Daba
Добрый день,

Мне нужно двинуть много больших не партицированных таблиц на партиции.
Идея примерно такова: существующие данные остануться в одной "старой" партиции а новые будут добавляться в "маленькие" дневные партиции. Где-то через полгода "старую" партицию можно будет двинуть в мусор/архив. Таким образом через пол-года все таблицы будут партицированны по дню.
Теперь вопрос: т.к. старых данных много, как сделать так что бы перенос данных в партицию прошел с минимальным IO и временем простоя?

Заранее спасибо.


Пару месяцев назад, я задавал подобный вопрос, но мне не смогли ответить. Решение нашел сам.

Мы делали через репликацию в новую таблицу, которая уже партицированна. В это время и основная таблица доступна и данные синхронизируются. Темной ночью остановили приложение и поменяли таблицы местами путем переименования. Этот метод позволит партицировать и старые данные по дням, никакой разницы не будет.

Только надо быть очень аккуратным с identity, в новой таблице он будет равен 1. Надо его поменять после переименования таблиц на ту же величину, что и в старой таблице.
30 июл 15, 09:19    [17953391]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Roust_m
Daba
Добрый день,

Мне нужно двинуть много больших не партицированных таблиц на партиции.
Идея примерно такова: существующие данные остануться в одной "старой" партиции а новые будут добавляться в "маленькие" дневные партиции. Где-то через полгода "старую" партицию можно будет двинуть в мусор/архив. Таким образом через пол-года все таблицы будут партицированны по дню.
Теперь вопрос: т.к. старых данных много, как сделать так что бы перенос данных в партицию прошел с минимальным IO и временем простоя?

Заранее спасибо.


Пару месяцев назад, я задавал подобный вопрос, но мне не смогли ответить. Решение нашел сам.

Мы делали через репликацию в новую таблицу, которая уже партицированна. В это время и основная таблица доступна и данные синхронизируются. Темной ночью остановили приложение и поменяли таблицы местами путем переименования. Этот метод позволит партицировать и старые данные по дням, никакой разницы не будет.

Только надо быть очень аккуратным с identity, в новой таблице он будет равен 1. Надо его поменять после переименования таблиц на ту же величину, что и в старой таблице.


create index pk__mytable on sch.mytable(...) with(online = on, drop_existing = on, ...) on my_part_scheme
30 июл 15, 09:34    [17953452]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
Daba
Member

Откуда:
Сообщений: 135
Всем спасибо, буду рыть в этом направлении, о результатах доложу :).
30 июл 15, 15:25    [17955668]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
alexeyvg
У меня полтеррабайта (15 миллиардов строк) "перелилось" за 10 миллисекунд



"Перелилось" -- это switch partition или что?
30 июл 15, 15:36    [17955762]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
o-o
Guest
a_voronin
alexeyvg
У меня полтеррабайта (15 миллиардов строк) "перелилось" за 10 миллисекунд



"Перелилось" -- это switch partition или что?

о боже, ну переключились метаданные и все,
ничего никуда не лилось.
здесь "перелилось" в ответ на ваш "перелив",
а так-то все выступившие в этой теме, ратуют за то, чтоб данные не трогать вообще
30 июл 15, 16:06    [17956040]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
o-o
a_voronin
"Перелилось" -- это switch partition или что?

здесь "перелилось" в ответ на ваш "перелив",
а так-то все выступившие в этой теме, ратуют за то, чтоб данные не трогать вообще
Ага. switch partition.
30 июл 15, 19:13    [17957058]     Ответить | Цитировать Сообщить модератору
 Re: Создание партиций на существующей таблицах с минимальным напрягом  [new]
Daba
Member

Откуда:
Сообщений: 135
Сегодня накарябал что-то типа первого драфта.
Плюсы:
-система работает и двинуть "старую" непартицированную таблицу как первая партиция в новую партицированную взяло 0 сек.
Минусы:
-пришлось на старой таблице убивать индексы дабы подогнать их структуру под новую. Даже не уникальные. Два свиду одинаковых индекса скуль определяет как неидентичные, повидимому из за того, что партицированный индекс содержит в себе (не явно) поле партиции которого нет в непартицированной таблице. Короче, сначала убрал индексы с обоих таблиц, сделал свич, и построил все индексы на парт. схему.
- check constraint таки нужен, но это как-раз не "биг дил".

Вот пока все.

Всем спасибо.
30 июл 15, 22:03    [17957493]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить