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

Откуда:
Сообщений: 34
Есть 2 таблицы в которые льются данные, в одну примерно 1 мегабайт в 15 минут, в другую 5-6 мегабайт. Запросы идут с Join по PK. В основном запросы идут за 26 часов(80%) и за 169 часов(15% запросов) назад от текущего времени. Необходимо ускорить выполнение запросов. Предполагаю сделать 12 секций по 8 дней(чтобы 169 часов влезли). Думаю использовать Right-bounded если сегодня 1 апреля, нужно создать следующую функцию RANGE RIGHT FOR VALUES (......., 20130323', '20130331', '20130408').
Я правильно понимаю, что если сегодня 1е апреля, то правая граничная точка должна быть 8 апреля?

Каждые 8 дней нужно отстегивать левую секцию, данные просто удаляются, и добавлять новую секцию, создано 12 file group.
Если я даю split текущей секции, то каким образом выбирается следующая секция?
ведь каждая секция жестко привязана к своей file group?
И каким образом просто удалить данные из самой левой секции(или саму секцию), а потом переиспользовать?
Спасибо
31 мар 13, 17:12    [14118705]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с Partitioning  [new]
accept93
Member

Откуда:
Сообщений: 34
Есть 2 таблицы в которые льются данные, в одну примерно 1 мегабайт в 15 минут, в другую 5-6 мегабайт. Запросы идут с Join по PK. В основном запросы идут за 26 часов(80%) и за 169 часов(15% запросов) назад от текущего времени. Необходимо ускорить выполнение запросов. Предполагаю сделать 12 секций по 8 дней(чтобы 169 часов влезли). Думаю использовать Right-bounded если сегодня 1 апреля, нужно создать следующую функцию RANGE RIGHT FOR VALUES (......., 20130323', '20130331', '20130408').
Я правильно понимаю, что если сегодня 1е апреля, то правая граничная точка должна быть 8 апреля?

Каждые 8 дней нужно отстегивать левую секцию, данные просто удаляются, и добавлять новую секцию, создано 12 file group.
Т.е. схема и функция выглядят так:
CREATE PARTITION FUNCTION [pFunc8Day](datetime) AS RANGE RIGHT FOR VALUES (N'2013-01-10T00:00:00', N'2013-01-18T00:00:00', N'2013-01-26T00:00:00', N'2013-02-03T00:00:00', N'2013-02-11T00:00:00', N'2013-02-19T00:00:00', N'2013-02-27T00:00:00', N'2013-03-07T00:00:00', N'2013-03-15T00:00:00', N'2013-03-23T00:00:00', N'2013-03-31T00:00:00', N'2013-04-08T00:00:00')


CREATE PARTITION SCHEME [pFunc8day] AS PARTITION [pFunc8Day] TO ([FG1], [FG2], [FG3], [FG4], [FG5], [FG6], [FG7], [FG8], [FG9], [FG10], [FG11], [FG12], [PRIMARY])


Если я даю split текущей секции, то каким образом выбирается следующая секция?
ведь каждая секция жестко привязана к своей file group?
И каким образом просто удалить данные из самой левой секции(или саму секцию), а потом переиспользовать?
31 мар 13, 19:03    [14118931]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с Partitioning  [new]
aleks2
Guest
Ну чо ты взываешь к оракулу?
Возьми, да проверь.
31 мар 13, 19:10    [14118942]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с Partitioning  [new]
accept93
Member

Откуда:
Сообщений: 34
да пока не совсем понял механизм, куда будут заливаться данные после split. Вся БД весит под 600 гиг
31 мар 13, 21:38    [14119247]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с Partitioning  [new]
aleks2
Guest
accept93
да пока не совсем понял механизм, куда будут заливаться данные после split. Вся БД весит под 600 гиг

Проверять то нужно и на тестовом сервере.
1 апр 13, 08:12    [14119672]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с Partitioning  [new]
Гость333
Member

Откуда:
Сообщений: 3683
accept93
В основном запросы идут за 26 часов(80%) и за 169 часов(15% запросов) назад от текущего времени.

А остальные 5% запросов?

accept93
Я правильно понимаю, что если сегодня 1е апреля, то правая граничная точка должна быть 8 апреля?

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

accept93
Если я даю split текущей секции, то каким образом выбирается следующая секция?
ведь каждая секция жестко привязана к своей file group?

Так в BOL же всё расписано
http://msdn.microsoft.com/ru-ru/library/ms186307.aspx
SPLIT RANGE ( boundary_value )
Добавляет одну секцию к функции секционирования.Аргумент boundary_value определяет диапазон новой секции, который должен отличаться от существующих пограничных значений функции секционирования.На основе аргумента boundary_value компонент Database Engine разбивает один существующий диапазон на два.Один из них,содержащий новый аргумент boundary_value, является новой секцией.

Файловая группа должна существовать в режиме в сети и быть помеченной схемой секционирования, использующей функцию секционирования, как NEXT USED для сохранения новой секции.В инструкции CREATE PARTITION SCHEME для файловых групп выделяются секции.Если инструкция CREATE PARTITION SCHEME размещает больше файловых групп, чем необходимо (в этой инструкции создано меньше секций, чем файловых групп для их хранения), то появляются неназначенные файловые группы, и одна из них отмечается схемой секционирования как NEXT USED.Данная файловая группа будет содержать новую секцию.Если нет ни одной файловой группы, отмеченной схемой секционирования как NEXT USED, то для хранения новой секции необходимо добавить файловую группу или назначить уже существующую при помощи инструкции ALTER PARTITION SCHEME.Файловая группа, которая уже содержит секции, может быть назначена для содержания дополнительных секций.Так как функция секционирования может использоваться в нескольких схемах секционирования, то все схемы с такой функцией, к которым добавляются секции, должны иметь файловую группу NEXT USED.Иначе ALTER PARTITION FUNCTION дает сбой, и выдает ошибку, в которой показаны схема или схемы секционирования с отсутствующей файловой группой NEXT USED.


accept93
И каким образом просто удалить данные из самой левой секции(или саму секцию), а потом переиспользовать?

Сперва скидываете секцию в другую таблицу: ALTER TABLE ... SWITCH PARTITION, потом делаете TRUNCATE [ДругаяТаблица], потом ALTER PARTITION FUNCTION ... MERGE RANGE.

Вроде ведь в интернете есть много статей про sliding window scenario, даже в BOL об этом написано :-)
1 апр 13, 09:55    [14119933]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с Partitioning  [new]
accept93
Member

Откуда:
Сообщений: 34
Гость333
accept93
В основном запросы идут за 26 часов(80%) и за 169 часов(15% запросов) назад от текущего времени.

А остальные 5% запросов?

accept93
Я правильно понимаю, что если сегодня 1е апреля, то правая граничная точка должна быть 8 апреля?

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

accept93
Если я даю split текущей секции, то каким образом выбирается следующая секция?
ведь каждая секция жестко привязана к своей file group?

Так в BOL же всё расписано
http://msdn.microsoft.com/ru-ru/library/ms186307.aspx
SPLIT RANGE ( boundary_value )
Добавляет одну секцию к функции секционирования.Аргумент boundary_value определяет диапазон новой секции, который должен отличаться от существующих пограничных значений функции секционирования.На основе аргумента boundary_value компонент Database Engine разбивает один существующий диапазон на два.Один из них,содержащий новый аргумент boundary_value, является новой секцией.

Файловая группа должна существовать в режиме в сети и быть помеченной схемой секционирования, использующей функцию секционирования, как NEXT USED для сохранения новой секции.В инструкции CREATE PARTITION SCHEME для файловых групп выделяются секции.Если инструкция CREATE PARTITION SCHEME размещает больше файловых групп, чем необходимо (в этой инструкции создано меньше секций, чем файловых групп для их хранения), то появляются неназначенные файловые группы, и одна из них отмечается схемой секционирования как NEXT USED.Данная файловая группа будет содержать новую секцию.Если нет ни одной файловой группы, отмеченной схемой секционирования как NEXT USED, то для хранения новой секции необходимо добавить файловую группу или назначить уже существующую при помощи инструкции ALTER PARTITION SCHEME.Файловая группа, которая уже содержит секции, может быть назначена для содержания дополнительных секций.Так как функция секционирования может использоваться в нескольких схемах секционирования, то все схемы с такой функцией, к которым добавляются секции, должны иметь файловую группу NEXT USED.Иначе ALTER PARTITION FUNCTION дает сбой, и выдает ошибку, в которой показаны схема или схемы секционирования с отсутствующей файловой группой NEXT USED.


accept93
И каким образом просто удалить данные из самой левой секции(или саму секцию), а потом переиспользовать?

Сперва скидываете секцию в другую таблицу: ALTER TABLE ... SWITCH PARTITION, потом делаете TRUNCATE [ДругаяТаблица], потом ALTER PARTITION FUNCTION ... MERGE RANGE.

Вроде ведь в интернете есть много статей про sliding window scenario, даже в BOL об этом написано :-)

Спасибо, вроде разобрался:
1. Найти начальную секцию(с минимальной датой), и узнать в какой она файл группе
2. Создать в этой файл-группе таблицу индентичную секционированной
3. ALTER TABLE ... SWITCH PARTITION
файл-группах, для быстрого отцепления
4.ALTER PARTITION FUNCTION ...MERGE RANGE, для секции из 1
5.ALTER PARTITION SCHEME.... NEXT USED [Файл-группа из 1]
6.ALTER PARTITION FUNCTION ...SPLIT RANGE - новое верхнее значение, в моем случае GetDate()+8 дней
7. Drop Table Из Пункта 2. Truncate в данном случае бессмысленный, так как каждый раз эта таблица должна создаваться в разных

Остался вопрос как определить в пункте (1) значения
1 апр 13, 11:37    [14120577]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с Partitioning  [new]
Гость333
Member

Откуда:
Сообщений: 3683
accept93
2. Создать в этой файл-группе таблицу индентичную секционированной
7. Drop Table Из Пункта 2. Truncate в данном случае бессмысленный, так как каждый раз эта таблица должна создаваться в разных

Совсем не обязательно. Можно заранее создать пустую таблицу на той же схеме секционирования и выполнять команды:
ALTER TABLE ИсходнаяТаблица SWITCH PARTITION 1 TO ПустаяТаблица PARTITION 1;
TRUNCATE TABLE ПустаяТаблица;

То есть ПустаяТаблица будет использоваться только для сбора и удаления мусора, и её не надо будет каждый раз создавать-удалять.

accept93
6.ALTER PARTITION FUNCTION ...SPLIT RANGE - новое верхнее значение, в моем случае GetDate()+8 дней

Почему GetDate()+8 дней? Надо бы "Максимальное значение функции секционирования + 8 дней", не?

accept93
Остался вопрос как определить в пункте (1) значения

select * from sys.partition_range_values where function_id = <id функции> and boundary_id = 1
1 апр 13, 11:54    [14120714]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с Partitioning  [new]
accept93
Member

Откуда:
Сообщений: 34
Гость333
accept93
2. Создать в этой файл-группе таблицу индентичную секционированной
7. Drop Table Из Пункта 2. Truncate в данном случае бессмысленный, так как каждый раз эта таблица должна создаваться в разных

Совсем не обязательно. Можно заранее создать пустую таблицу на той же схеме секционирования и выполнять команды:
ALTER TABLE ИсходнаяТаблица SWITCH PARTITION 1 TO ПустаяТаблица PARTITION 1;
TRUNCATE TABLE ПустаяТаблица;

То есть ПустаяТаблица будет использоваться только для сбора и удаления мусора, и её не надо будет каждый раз создавать-удалять.

+++ Это нужно ее создавать во всех 12 FG, так как если она будет в другой группе, то при отцеплении будут физически переноситься данные, так как у меня раскиданы секции по 3 физическим Partition
accept93
6.ALTER PARTITION FUNCTION ...SPLIT RANGE - новое верхнее значение, в моем случае GetDate()+8 дней

Почему GetDate()+8 дней? Надо бы "Максимальное значение функции секционирования + 8 дней", не?
[/quot]
++Да, спасибо,так правильней
accept93
Остался вопрос как определить в пункте (1) значения

select * from sys.partition_range_values where function_id = <id функции> and boundary_id = 1
1 апр 13, 12:28    [14120949]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с Partitioning  [new]
Гость333
Member

Откуда:
Сообщений: 3683
accept93
+++ Это нужно ее создавать во всех 12 FG, так как если она будет в другой группе, то при отцеплении будут физически переноситься данные, так как у меня раскиданы секции по 3 физическим Partition

Я написал, что
Гость333
заранее создать пустую таблицу на той же схеме секционирования
, а не "во всех 12 FG".
1 апр 13, 12:41    [14121038]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить