|
Построение индекса для каждой секции таблицы по отдельности
|
|||
---|---|---|---|
#18+
Господа, недавно передо мной встала задача. Есть немаленькая БД под 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. Индексирование - по довольно длинным строковым полям. Т.е. процесс это небыстрый, а индекс действительно нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2006, 18:56 |
|
Построение индекса для каждой секции таблицы по отдельности
|
|||
---|---|---|---|
#18+
когда-то я спрашивал, может ли SQL2005 работать с индексами секций независимо (в частности, меня интересовал вопрос об установке разных FillFactor на разных секциях) - мне сказали, что для него все секции все равно один целый объект, поэтому весьма навряд ли... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2006, 19:04 |
|
Построение индекса для каждой секции таблицы по отдельности
|
|||
---|---|---|---|
#18+
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), то следует просто обновить статистику. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2006, 07:09 |
|
Построение индекса для каждой секции таблицы по отдельности
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3.
- ребилдинг отвалившейся партиции индекса. MAXDOP - число процессоров для операции (чтоб не все задействовать. Если можно все, то 0) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2006, 09:48 |
|
Построение индекса для каждой секции таблицы по отдельности
|
|||
---|---|---|---|
#18+
aleks2 Гм... в чем выражается "слетание индекса"? Мож птичий грипп? 1) DBCC CHECKTABLE/CHECKDB нецензурно выражается или 2) просто индекс перестает использоваться в запросах оптимизатором? Ежели 2), то следует просто обновить статистику. Сам я не видел, но, по словам парней из поддержки, бывает и (1), и (2). Вашу рекомендацию учту! saint Код: plaintext 1. 2. 3.
- ребилдинг отвалившейся партиции индекса. MAXDOP - число процессоров для операции (чтоб не все задействовать. Если можно все, то 0) О! То, что надо! Большущее вам спасибо за помощь! Понял, в каком направлении искать, и вот что нашёл: ALTER INDEX вообще Как сделать "выравнивание" партиций индекса по партициям таблицы Ресурсоёмкость операций по восстановлению ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2006, 10:36 |
|
Построение индекса для каждой секции таблицы по отдельности
|
|||
---|---|---|---|
#18+
блин, надеюсь вы меня поняли. REBUILD забыл конечно же Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2006, 11:01 |
|
Построение индекса для каждой секции таблицы по отдельности
|
|||
---|---|---|---|
#18+
Спасибо, я так и понял :) . Просто я почему-то думал, что из SQL такого сделать нельзя (каюсь, чайник я в MS SQL Server... ну или почти чайник). А как увидел, что можно - мигом нашёл в MSDN. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2006, 18:55 |
|
Построение индекса для каждой секции таблицы по отдельности
|
|||
---|---|---|---|
#18+
У меня аналогичная проблема. Правда, как ребилдить партицию индекса, я нашел сразу в BOL. Остается неясным, как сделать DISABLE партиции индекса, а не всего индекса. Это нужно для массовой загрузки. Сценарий такой: 1. Дизаблю партицию индекса 2. Загружаю данные 3. Ребилдю партицию индекса. Так как же сделать №1 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2006, 12:21 |
|
Построение индекса для каждой секции таблицы по отдельности
|
|||
---|---|---|---|
#18+
ГликогенУ меня аналогичная проблема. Правда, как ребилдить партицию индекса, я нашел сразу в BOL. Остается неясным, как сделать DISABLE партиции индекса, а не всего индекса. Это нужно для массовой загрузки. Сценарий такой: 1. Дизаблю партицию индекса 2. Загружаю данные 3. Ребилдю партицию индекса. Так как же сделать №1 ? +1 Может быть, проблема решена в MS SQL 2008? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2009, 16:54 |
|
|
Start [/forum/topic.php?fid=46&gotonew=1&tid=1734691]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
10ms |
check topic access: |
10ms |
track hit: |
20ms |
get topic data: |
12ms |
get first new msg: |
8ms |
get forum data: |
2ms |
get page messages: |
24ms |
get tp. blocked users: |
0ms |
others: | 92ms |
total: | 191ms |
0 / 0 |