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

Откуда: Москва
Сообщений: 879
Господа, недавно передо мной встала задача.

Есть немаленькая БД под MS SQL Server 2005. Самая тяжёлая таблица в ней может "весить" порядка 10 Тб. Разумеется, она секционирована, например, на 100 кусков примерно по 100 Гб, и проиндексирована.

Как показывает практика, в какой-то момент индекс "слетает". Полностью перестраивать его днём, когда всё жутко загружено - некогда.

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

Как вариант: "быстренько" построить индекс для последних 10'000'000 записей, потом - для предыдущих 10'000'000, и т.д.

Вопрос: MS SQL Server 2005 такое может? Если да, то как? Может быть, кто-нибудь такое реализовывал? Может, есть ссылка на MSDN?

P.S. Поиском я пользовался. Нашёл статью:
SQL Server 2005. Partitioned Tables and Indexes
Прочитал. Прямого ответа в ней не нашёл.

P.P.S. Знаю, что Oracle 10g такое умеет. Более, того, на нём такое уже реализовано. Теперь надо реализовать на MS SQL Server 2005.

P.P.P.S. Индексирование - по довольно длинным строковым полям. Т.е. процесс это небыстрый, а индекс действительно нужен.
6 мар 06, 18:56    [2422981]     Ответить | Цитировать Сообщить модератору
 Re: Построение индекса для каждой секции таблицы по отдельности  [new]
.....
Guest
когда-то я спрашивал, может ли SQL2005 работать с индексами секций независимо (в частности, меня интересовал вопрос об установке разных FillFactor на разных секциях) - мне сказали, что для него все секции все равно один целый объект, поэтому весьма навряд ли...
6 мар 06, 19:04    [2423010]     Ответить | Цитировать Сообщить модератору
 Re: Построение индекса для каждой секции таблицы по отдельности  [new]
aleks2
Guest
AlexTheRaven
Господа, недавно передо мной встала задача.

Есть немаленькая БД под MS SQL Server 2005. Самая тяжёлая таблица в ней может "весить" порядка 10 Тб. Разумеется, она секционирована, например, на 100 кусков примерно по 100 Гб, и проиндексирована.

Как показывает практика, в какой-то момент индекс "слетает". Полностью перестраивать его днём, когда всё жутко загружено - некогда.

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

Как вариант: "быстренько" построить индекс для последних 10'000'000 записей, потом - для предыдущих 10'000'000, и т.д.

Вопрос: MS SQL Server 2005 такое может? Если да, то как? Может быть, кто-нибудь такое реализовывал? Может, есть ссылка на MSDN?

P.S. Поиском я пользовался. Нашёл статью:
SQL Server 2005. Partitioned Tables and Indexes
Прочитал. Прямого ответа в ней не нашёл.

P.P.S. Знаю, что Oracle 10g такое умеет. Более, того, на нём такое уже реализовано. Теперь надо реализовать на MS SQL Server 2005.

P.P.P.S. Индексирование - по довольно длинным строковым полям. Т.е. процесс это небыстрый, а индекс действительно нужен.


Гм... в чем выражается "слетание индекса"? Мож птичий грипп?
1) DBCC CHECKTABLE/CHECKDB нецензурно выражается или 2) просто индекс перестает использоваться в запросах оптимизатором?
Ежели 2), то следует просто обновить статистику.
7 мар 06, 07:09    [2423883]     Ответить | Цитировать Сообщить модератору
 Re: Построение индекса для каждой секции таблицы по отдельности  [new]
saint
Member

Откуда: Архангельск
Сообщений: 2262
ALTER INDEX index_name
ON table_name
PARTITION = part_num  WITH (MAXDOP=1)

- ребилдинг отвалившейся партиции индекса. MAXDOP - число процессоров для операции (чтоб не все задействовать. Если можно все, то 0)
7 мар 06, 09:48    [2424117]     Ответить | Цитировать Сообщить модератору
 Re: Построение индекса для каждой секции таблицы по отдельности  [new]
AlexTheRaven
Member

Откуда: Москва
Сообщений: 879
aleks2

Гм... в чем выражается "слетание индекса"? Мож птичий грипп?
1) DBCC CHECKTABLE/CHECKDB нецензурно выражается или 2) просто индекс перестает использоваться в запросах оптимизатором?
Ежели 2), то следует просто обновить статистику.


Сам я не видел, но, по словам парней из поддержки, бывает и (1), и (2). Вашу рекомендацию учту!

saint
ALTER INDEX index_name
ON table_name
PARTITION = part_num  WITH (MAXDOP=1)

- ребилдинг отвалившейся партиции индекса. MAXDOP - число процессоров для операции (чтоб не все задействовать. Если можно все, то 0)


О! То, что надо! Большущее вам спасибо за помощь! Понял, в каком направлении искать, и вот что нашёл:

ALTER INDEX вообще

Как сделать "выравнивание" партиций индекса по партициям таблицы

Ресурсоёмкость операций по восстановлению
7 мар 06, 10:36    [2424338]     Ответить | Цитировать Сообщить модератору
 Re: Построение индекса для каждой секции таблицы по отдельности  [new]
saint
Member

Откуда: Архангельск
Сообщений: 2262
блин, надеюсь вы меня поняли. REBUILD забыл
конечно же
ALTER INDEX index_name
ON table_name
REBUILD
PARTITION = part_num  WITH (MAXDOP=1)
7 мар 06, 11:01    [2424473]     Ответить | Цитировать Сообщить модератору
 Re: Построение индекса для каждой секции таблицы по отдельности  [new]
AlexTheRaven
Member

Откуда: Москва
Сообщений: 879
Спасибо, я так и понял :) . Просто я почему-то думал, что из SQL такого сделать нельзя (каюсь, чайник я в MS SQL Server... ну или почти чайник). А как увидел, что можно - мигом нашёл в MSDN.
7 мар 06, 18:55    [2426871]     Ответить | Цитировать Сообщить модератору
 Re: Построение индекса для каждой секции таблицы по отдельности  [new]
Гликоген
Member

Откуда:
Сообщений: 846
У меня аналогичная проблема. Правда, как ребилдить партицию индекса, я нашел сразу в BOL.
Остается неясным, как сделать DISABLE партиции индекса, а не всего индекса.

Это нужно для массовой загрузки.
Сценарий такой:
1. Дизаблю партицию индекса
2. Загружаю данные
3. Ребилдю партицию индекса.

Так как же сделать №1 ?
24 сен 06, 12:21    [3176854]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Построение индекса для каждой секции таблицы по отдельности  [new]
Artur Bondarenko
Member

Откуда:
Сообщений: 21
Гликоген
У меня аналогичная проблема. Правда, как ребилдить партицию индекса, я нашел сразу в BOL.
Остается неясным, как сделать DISABLE партиции индекса, а не всего индекса.

Это нужно для массовой загрузки.
Сценарий такой:
1. Дизаблю партицию индекса
2. Загружаю данные
3. Ребилдю партицию индекса.

Так как же сделать №1 ?


+1 Может быть, проблема решена в MS SQL 2008?
18 июн 09, 16:54    [7316699]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить