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

Есть партиционированная таблица, которая использует:

CREATE PARTITION SCHEME [FY] AS PARTITION [FY] TO ([PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY]);
GO
CREATE PARTITION FUNCTION [FY](INT) AS RANGE LEFT FOR VALUES (20110700, 20120700, 20130700);


При добавление новой партиции, для которой данных еще нету (масимальное значение в таблице 20130630):
ALTER PARTITION SCHEME [FY] NEXT USED [PRIMARY];
GO
ALTER PARTITION FUNCTION [FY] () SPLIT RANGE (20140700);


Сиквел начинает перемещать данные. Этот процесс занимает много времени, а дальше ему не хватает места и база уходит в suspect.
Как сделать чтоб не было перемещения данных?
7 окт 14, 10:15    [16669617]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
Абракадабра
Guest
Простите опечатался, масимальное значение в таблице 20140630
7 окт 14, 12:12    [16670350]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
смотрю_тут
Member

Откуда:
Сообщений: 1368
Абракадабра,

скрипт PARTITION SCHEME [FY] после изменения схемы смотрели, там 5 раз используется файловая группы primary?
7 окт 14, 12:27    [16670453]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
Абракадабра
Guest
смотрю_тут,

Дальше используются 4ре.
Как сделать чтоб было 5 раз?
7 окт 14, 12:40    [16670549]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9161
Вы занимаетесь какими-то странными делами. Создайте сразу таблицу с требуемыми секциями и залейте в нее данные из старой.
7 окт 14, 13:05    [16670713]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
Абракадабра
Guest
Владислав Колосов,

Таблиц много фактов несколько, данных в них много, а места на сервере мало.
7 окт 14, 13:22    [16670812]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9161
Абракадабра,

Вот как раз для этого мой совет, сэкономите место и время. Можете заливать отфильтрованные данные порциями. Перераспределение секций не слишком производительная операция. Убедитесь, особенно, что таблицы не сжаты.
7 окт 14, 13:38    [16670926]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
Абракадабра
Guest
Владислав Колосов,

Спасибо, но как-то такой вариант мне не сильно нравится, т.к. все таблицы сжатые, индексы тоже.
Хотелось, просто добавить в существующую структуру пустые партции.
Ваш вариант самый простой, но я надеюсь, что есть адекватное решение.
7 окт 14, 14:31    [16671294]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
Владислав Колосов
Вы занимаетесь какими-то странными делами. Создайте сразу таблицу с требуемыми секциями и залейте в нее данные из старой.


Зачем тогда партиционирование.

Вы в правильной последовательности команды пускаете?
http://msdn.microsoft.com/en-us/library/hh510199.aspx

USE AdventureWorks2012;
GO
-- add five new filegroups to the AdventureWorks2012 database
ALTER DATABASE AdventureWorks2012
ADD FILEGROUP test1fg;
GO
ALTER DATABASE AdventureWorks2012
ADD FILEGROUP test2fg;
GO
ALTER DATABASE AdventureWorks2012
ADD FILEGROUP test3fg;
GO
ALTER DATABASE AdventureWorks2012
ADD FILEGROUP test4fg;
GO
ALTER DATABASE AdventureWorks2012
ADD FILEGROUP test5fg;
GO
-- if the "myRangePF1" partition function and the "myRangePS1" partition scheme exist,
-- drop them from the AdventureWorks2012 database
IF EXISTS (SELECT * FROM sys.partition_functions
    WHERE name = 'myRangePF1')
DROP PARTITION FUNCTION myRangePF1;
GO
IF EXISTS (SELECT * FROM sys.partition_schemes
    WHERE name = 'myRangePS1')
DROP PARTITION SCHEME myRangePS1;
GO
-- create the new partition function "myRangePF1" with four partition groups
CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );
GO
-- create the new partition scheme "myRangePS1"that will use 
-- the "myRangePF1" partition function with five file groups.
-- The last filegroup, "test5fg," will be kept empty but marked
-- as the next used filegroup in the partition scheme.
CREATE PARTITION SCHEME myRangePS1
AS PARTITION myRangePF1
TO (test1fg, test2fg, test3fg, test4fg, test5fg);
GO
--Split "myRangePS1" between boundary_values 100 and 1000
--to create two partitions between boundary_values 100 and 500
--and between boundary_values 500 and 1000.
ALTER PARTITION FUNCTION myRangePF1 ()
SPLIT RANGE (500);
GO
-- Allow the "myRangePS1" partition scheme to use the filegroup "test5fg"
-- for the partition with boundary_values of 100 and 500
ALTER PARTITION SCHEME myRangePS1
NEXT USED test5fg;
GO
7 окт 14, 15:13    [16671606]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
Владислав Колосов
Абракадабра,

Вот как раз для этого мой совет, сэкономите место и время. Можете заливать отфильтрованные данные порциями. Перераспределение секций не слишком производительная операция. Убедитесь, особенно, что таблицы не сжаты.
Вообще новая секция не будет содержать данных. Более того, вся старая крайняя справа секция, которая разделяется, тоже не содержит данных.
Если такую операцию нельзя сделать без переливки данных, то зачем тогда нужно это партицирование, в чём его смысл? Мне тоже кажется, что где то нарушен порядок операций...
7 окт 14, 15:23    [16671689]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
alexeyvg
Мне тоже кажется, что где то нарушен порядок операций...


Нужно сначала ALTER PARTITION FUNCTION, а уже потом ALTER PARTITION SCHEME
7 окт 14, 15:25    [16671699]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9161
Абракадабра
Владислав Колосов,

Спасибо, но как-то такой вариант мне не сильно нравится, т.к. все таблицы сжатые, индексы тоже.
Хотелось, просто добавить в существующую структуру пустые партции.
Ваш вариант самый простой, но я надеюсь, что есть адекватное решение.


Учтите, что в вашем варианте будут пережаты все данные и индексы, это займет намного больше времени, чем просто залить в подготовленные несжатые таблицы с секциями и затем их сжать.
7 окт 14, 15:58    [16671954]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
Владислав Колосов
Учтите, что в вашем варианте будут пережаты все данные и индексы,


Я вот в упор не могу понять, почему все будут переезжать.
7 окт 14, 16:21    [16672112]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35853
Блог
alexeyvg
Если такую операцию нельзя сделать без переливки данных, то зачем тогда нужно это партицирование, в чём его смысл? Мне тоже кажется, что где то нарушен порядок операций...


ну как же,
на последней секции стоит виртуальный check с одной границей (a > 500), когда ТС пытается выполнить split, сервер просто вынужден сканировать/сортировать все последние секции всех секционированных по некоторой схеме таблиц
7 окт 14, 17:32    [16672666]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
msLex
Member

Откуда:
Сообщений: 9556
Абракадабра,

Делайте split либо пустых секций, либо секций, в которых у всех индексов всех таблиц первое поле ключа индекса = ключу секционирования.
Иначе SQL будет вынужден просканировать всю секцию для выяснения какие записи в какую секцию нужно поместить
7 окт 14, 17:42    [16672741]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
Критик
alexeyvg
Если такую операцию нельзя сделать без переливки данных, то зачем тогда нужно это партицирование, в чём его смысл? Мне тоже кажется, что где то нарушен порядок операций...

ну как же,
на последней секции стоит виртуальный check с одной границей (a > 500), когда ТС пытается выполнить split, сервер просто вынужден сканировать/сортировать все последние секции всех секционированных по некоторой схеме таблиц
А, я как то упустил вот это:
Абракадабра
Простите опечатался, масимальное значение в таблице 20140630

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

Если это правило соблюдать, то всё будет быстро и не будет требовать ресурсов.
7 окт 14, 17:54    [16672794]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9161
Что, если переключить секцию, в таблице образуется пустая, ее разбить, а затем переключить секцию обратно?
7 окт 14, 18:28    [16672974]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35853
Блог
Владислав Колосов
Что, если переключить секцию, в таблице образуется пустая, ее разбить, а затем переключить секцию обратно?


Чтобы переключить обратно, у "вынутого" куска таблицы должны быть несколько несовместимых ограничений по значению поля секционирования, так что не вариант. А уж если у ТС не одна такая таблица... ))

Я бы создал новую схему/функцию и по 1 таблице переносил их туда через таблицы-копии.
Но это будет медленно и печально )
7 окт 14, 21:24    [16673498]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
Абракадабра,

Вот тут все ответы на все озвученные тут вопросы.

ЗЫ: в вашем конкретном случае LEFT - то, что вам мешает. Поставите RIGHT и проблема уйдет. Еще раз это будет верно только в вашем конкретном слечае.
7 окт 14, 21:33    [16673512]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
Абракадабра
Guest
Спасибо всем за помощь.
Помогло отстегивание партиций в таблички и потом сплит пустых.
7 окт 14, 22:10    [16673583]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
pio777
Member

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

Вот и статья по этому поводу: Тыц
7 окт 14, 22:55    [16673630]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пустой партиции  [new]
NickAlex66
Member

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

ТС скорее писатель, нежели читатель. И потом, некоторых участников форума прет от изобретения велосипеда пусть и с квадратными колесами, но своего.
8 окт 14, 01:09    [16673936]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить