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

Откуда:
Сообщений: 10
Кто-нибудь с партициями в mssql знаком? Хоть поверхностно.. Вопросик есть.. Если генерить скрипт по добавлению секций для существующей таблицы, через мастера в sql mgmnt studio, то в целом выглядит так..
1) подготавливаем (удаляем все ключи которые нам мешают)
2) создаем схему, ф-ю партиционирования и кластерный индекс на столбец секционирования через ф-ю секционирования
3) !!!! удаляем этот индекс
4) создаем что удалили в п.1

вот п.3 вызывает вопросы.. нафиг удалять индекс, по которому в дальнейшем и будет происходить волшебство? )
10 фев 14, 14:31    [15546398]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование и индексы  [new]
giir
Member

Откуда:
Сообщений: 10
да, забыл сказать, таблица была не секционирована, а станет секционирована
10 фев 14, 15:36    [15546880]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование и индексы  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35382
Блог
giir
3) !!!! удаляем этот индекс

вот п.3 вызывает вопросы.. нафиг удалять индекс, по которому в дальнейшем и будет происходить волшебство? )


Вы же секционируете таблицу, а не индекс.
А из-за очевидных причин при секционировании кластерного индекса - секционируется и таблица.
Если же временный индекс не удалять, то будет крик - "MS SQL оставляет в таблице "мусор!"

ps если вам не нравится, то сделайте руками кластерный индекс и секционируйте именно его, а не таблицу
10 фев 14, 16:08    [15547080]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование и индексы  [new]
partition
Guest
giir
нафиг удалять индекс

надо полагать его не было в схеме, на каком основании он должен остаться?
giir
, по которому в дальнейшем и будет происходить волшебство? )

а каком волшебстве вы говорите?
индекс нужен для поиска данных для каждой из секций среди существующих
10 фев 14, 16:12    [15547098]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование и индексы  [new]
giir
Member

Откуда:
Сообщений: 10
изначально в несекционной таблице был кластерный индекс на Id (PK), и просто столбец по которому хочу секционировать (назовем его Col).
Потом создал файловые группы, по одной на каждую секцию и на каждую есть свой датафайл.
Потом просекционировал.
Как я говорил после прогона сгенеренного скрипта PK стал не кластерным, создался кластерный индекс на Col (с указанием ф-и секционирования) и потом он удалился.

не понял тогда следующее:
1) сами данные сейчас не в отдельных дата файлах?
2) раз секционный индекс на Col удалился, то при вставке в таблицу, данные не будут ложиться автоматом в нужную файловую группу


под волшебством я имел ввиду как раз автоматическое записывание данных в ф.группу, при insert'е в таблицу
10 фев 14, 16:25    [15547170]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование и индексы  [new]
giir
Member

Откуда:
Сообщений: 10
автор
А из-за очевидных причин при секционировании кластерного индекса - секционируется и таблица


т.е. в момент когда было вызвано
CREATE CLUSTERED INDEX [ClusteredIndex_Col] ON [dbo].[MyTable] ([Col] )WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [MyPartitionScheme]([Col])

таблица все-таки распилилась по файловым группам?

и после
DROP INDEX ClusteredIndex_Col
все строки таблицы остались тех группах куда были перемещены при создании индекса?

но при insert'е записи будут вставляться в группу Primary?
10 фев 14, 16:56    [15547398]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование и индексы  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35382
Блог
файловые группы и секционирование - разные вещи...
10 фев 14, 17:17    [15547507]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование и индексы  [new]
giir
Member

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

я понимаю. Мне как раз нужно чтобы в данные на основании схемы секц. при вставке ложились в разные ф.группы.
нужно ли для этого оставлять индекс в котором прописана схема секционирования?
10 фев 14, 17:20    [15547526]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование и индексы  [new]
NickAlex66
Member

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

Упрощенная схема создания секционированной таблицы:

1. Создаете партишн функцию
2. Создаете партишн схему на созданной в п1 партишн функции
3. Создаете кластерный индекс по нужному полю на созданной в п2 партишн схеме - куда же без него :)

ЗЫ: допущение - исходная таблица в куче
ЗЫЗЫ: совет - используйте TSQL, а физардом лучше не пользоваться. он скрывает от вас самое интересное - детали
10 фев 14, 18:19    [15547784]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование и индексы  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
giir
вот п.3 вызывает вопросы.. нафиг удалять индекс, по которому в дальнейшем и будет происходить волшебство? )

Если у Вас хранение таблицы было бы в кластерном индексе, то был бы скрипт иной. Из вопроса очевидно, что у Вас изначально таблица без кластерного индекса - данные хранятся в куче (heap). Соответственно, что бы не потерять данные и секционировать таблицу, необходимо построить кластерный индекс по заданной схеме секционирования и удалить этот индекс. Удаление именно для того, что бы Ваша таблица осталась в той же куче (heap) но уже секционированной.
Вообще для общего понимания рекомендую почитать статьи про секционирование, например
11 фев 14, 09:35    [15549421]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование и индексы  [new]
giir
Member

Откуда:
Сообщений: 10
как таблица в куче, кластерный индекс-то был?
автор
изначально в несекционной таблице был кластерный индекс на Id (PK)


но вопрос даже не в этом. Наверное как-то не правильно изъясняюсь. Вот конкретная ситуация. Поле секционирования для удобства пусть будет DateTime.

1) изначально был файл myDb, привязаный к файловой группе primary
2) добавил файл f2 привязаный к новой группе fg2
3) удалил кластерный индекс на Id
4) добавил функцию секц. Func1 (Date < 2013г) и схему секционирования Scheme1 AS PARTITION [Func1] TO ([Primary], [fg2])
5) добавил кластерный индекс на поле секционирования с использованием схемы Scheme1
6) удалил этот индекс, и вернул индекс на Id (но теперь не кластерный)

**до п.1 в таблице присутствовали данные и до 2013г и после

Очень конкретные вопросы )):
1) в каком файле будут данные в myDb или f2
2) если теперь сделать инсерт 2х записей (первая 2012, вторая 2014г). В какой файл попадут данные,
а) 2012 в f2, 2014 в myDb?
б) оба в myDb?
в) как-то по другому. как?
11 фев 14, 11:00    [15549848]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование и индексы  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
giir
1) изначально был файл myDb, привязаный к файловой группе primary
2) добавил файл f2 привязаный к новой группе fg2
3) удалил кластерный индекс на Id - данные стали храниться в heap
4) добавил функцию секц. Func1 (Date < 2013г) и схему секционирования Scheme1 AS PARTITION [Func1] TO ([Primary], [fg2])
5) добавил кластерный индекс на поле секционирования с использованием схемы Scheme1 - таблица стала секционированной по кластерному индексу
6) удалил этот индекс, и вернул индекс на Id (но теперь не кластерный) - снова куча, но уникальный индекс по полю которое не в функции секционирования у вас не секционирован. Если при создании уникального индекса у Вас не указана явно файловая группа, то этот индекс в дефалтовой файловой группе (предполагаю что в PRIMARY)

**до п.1 в таблице присутствовали данные и до 2013г и после

Очень конкретные вопросы )):
1) в каком файле будут данные в myDb или f2 - данные кучи хранятся в обоих файлах. Данные индексов под вопросом, смотреть нужно по скрипту пересоздания индексов когда делали секционирования
2) если теперь сделать инсерт 2х записей (первая 2012, вторая 2014г). В какой файл попадут данные,
а) 2012 в f2, 2014 в myDb?
б) оба в myDb?
в) как-то по другому. как?
11 фев 14, 12:09    [15550347]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить