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

Откуда:
Сообщений: 7
Есть таблица, которая занимает около 200 Гб.

На ней есть кластерный индекс.

При попытке его перестроить лог занимает все место на диске, разрастаясь до 400 Гб и перестройка прерывается.



Как его перестроить? Мож по частям можно?
22 мар 17, 10:50    [20320273]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
o-o
Guest
модель полная?
возможен ли перевод в bulk logged на время ребилда?
22 мар 17, 10:53    [20320288]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
РомакРома
Member

Откуда:
Сообщений: 7
o-o
модель полная?
возможен ли перевод в bulk logged на время ребилда?


Модель полная, перевод, как я понимаю, прервет цепочки бэкапирования логов, так что нежелателен, только в самом крайнем случае.
22 мар 17, 11:01    [20320327]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
o-o
Guest
РомакРома
o-o
модель полная?
возможен ли перевод в bulk logged на время ребилда?


Модель полная, перевод, как я понимаю, прервет цепочки бэкапирования логов, так что нежелателен, только в самом крайнем случае.

нифига не прервет, неправильно понимаете.
снимаете бэкап лога непосредственно до и сразу после ребилда.
никаких прерываний,
единственное неудобство -- невозможность восстановления на период ребилда.
т.е. на любой момент до -- да, после -- тоже,
на момент времени в середине ребилда -- нет
22 мар 17, 11:05    [20320350]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
aleksrov
Member

Откуда:
Сообщений: 948
Здесь про это есть.
https://technet.microsoft.com/ru-ru/library/ms190203(v=sql.105)
А здесь сравнение Full и Bulk, Online и Offline
http://sqlblog.com/blogs/kalen_delaney/archive/2011/03/08/what-gets-logged-for-index-rebuilds.aspx
22 мар 17, 11:08    [20320363]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
o-o
Guest
бэкап лога "сразу после" подгребет все 200Гб перестроенного индекса.
но восстановление из такого бэкапа даст полную картину на момент снятия этого бэкапа,
не даст "половину индекса", если пытаться делать со stop at <время в середине ребилда>,
соответственно, надо продумать,
чтобы в это самое время не было операций, которые вдруг вам захочется откатить.
22 мар 17, 11:09    [20320370]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
РомакРома
Member

Откуда:
Сообщений: 7
o-o
РомакРома
пропущено...


Модель полная, перевод, как я понимаю, прервет цепочки бэкапирования логов, так что нежелателен, только в самом крайнем случае.

нифига не прервет, неправильно понимаете.
снимаете бэкап лога непосредственно до и сразу после ребилда.
никаких прерываний,
единственное неудобство -- невозможность восстановления на период ребилда.
т.е. на любой момент до -- да, после -- тоже,
на момент времени в середине ребилда -- нет



Это хорошо, большое спасибо!


Т.е. делаем так:

1) бэкап лога при фул
2) перевод в булклоад
3)перестройка индекса
4)перевод в фул
5)бэкап лога

И имея фул бэкап, например вчерашний, можно по логам будет востановится, даже не смотря на перевод в булклоад?
22 мар 17, 11:16    [20320410]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
РомакРома
Member

Откуда:
Сообщений: 7
aleksrov
Здесь про это есть.
https://technet.microsoft.com/ru-ru/library/ms190203(v=sql.105)
А здесь сравнение Full и Bulk, Online и Offline
http://sqlblog.com/blogs/kalen_delaney/archive/2011/03/08/what-gets-logged-for-index-rebuilds.aspx



Читаю, благодарю!
22 мар 17, 11:16    [20320413]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
РомакРома
Member

Откуда:
Сообщений: 7
o-o
бэкап лога "сразу после" подгребет все 200Гб перестроенного индекса.
но восстановление из такого бэкапа даст полную картину на момент снятия этого бэкапа,
не даст "половину индекса", если пытаться делать со stop at <время в середине ребилда>,
соответственно, надо продумать,
чтобы в это самое время не было операций, которые вдруг вам захочется откатить.


Кстати, при булклоад он намного меньше потребует места чем при фул?

Я понимаю что там массовые операции не логгируются, но является ли перестроение индекса массаобой операцией - непонятно.
22 мар 17, 11:18    [20320422]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
aleksrov
Member

Откуда:
Сообщений: 948
РомакРома,

Правильно понимаете, грубо говоря, нельзя востановиться на момент времени когда в лог попала информация о массовых операциях.
Минимальное протоколирование
https://technet.microsoft.com/ru-ru/library/ms191244(v=sql.105).aspx
22 мар 17, 11:27    [20320466]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
o-o
Guest
РомакРома
o-o
бэкап лога "сразу после" подгребет все 200Гб перестроенного индекса.
но восстановление из такого бэкапа даст полную картину на момент снятия этого бэкапа,
не даст "половину индекса", если пытаться делать со stop at <время в середине ребилда>,
соответственно, надо продумать,
чтобы в это самое время не было операций, которые вдруг вам захочется откатить.


Кстати, при булклоад он намного меньше потребует места чем при фул?

Я понимаю что там массовые операции не логгируются, но является ли перестроение индекса массаобой операцией - непонятно.

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

разумеется, bulk logged не лекарство какое-то от *всех* напастей,
в этой модели minimally logged operations будут minimally logged.
(в full все и всегда fully logged)
и разумеется, ребилд это minimally logged operation,
иначе смысла бы не было затевать эту смену моделей
22 мар 17, 11:28    [20320472]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
РомакРома
Member

Откуда:
Сообщений: 7
o-o
РомакРома
пропущено...


Кстати, при булклоад он намного меньше потребует места чем при фул?

Я понимаю что там массовые операции не логгируются, но является ли перестроение индекса массаобой операцией - непонятно.

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

разумеется, bulk logged не лекарство какое-то от *всех* напастей,
в этой модели minimally logged operations будут minimally logged.
(в full все и всегда fully logged)
и разумеется, ребилд это minimally logged operation,
иначе смысла бы не было затевать эту смену моделей


Таблица занимает 200 Гб, индекс 10 Гб.

Я думал что надо будет свободного места в файле БД 10 Гб для пересоздания, а не 200.
22 мар 17, 13:36    [20321088]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
РомакРома,
автор
Таблица занимает 200 Гб, индекс 10 Гб.

Я думал что надо будет свободного места в файле БД 10 Гб для пересоздания, а не 200
а как вы дошли до таких таблиц, не зная что такое кластерный индекс?
22 мар 17, 13:37    [20321093]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
o-o
Guest
+

а чего не дойти-то.
персонал отбирает HR.
зачем что-то знать, кого это вообще волнует,
надо, чтобы согласились задешево, бросили все сразу и к ним пошли,
ну и наверное чтобы еще в галстуке были.
человек не знает модели восстановления и админит.
а в соседней теме искореняют фрагментацию индексов восстановлением из бэкапа
и замеряют "срок годности лога", и ведь это тоже админ
22 мар 17, 13:53    [20321154]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
o-o
Guest
РомакРома
Я думал что надо будет свободного места в файле БД 10 Гб для пересоздания, а не 200.

вас даже не смутило, что же там заставляет лог разрастаться до 400Гб,
если всего 10Гб будут перестроены?
неужели сервер логирует 10Гб аж по 40 раз?
-------------------------------------------------------------
листья кластерного индекса это в аккурат данные.
страницы данных (data pages) отличаются по структуре от страниц индекса (index pages),
поэтому, когда студия вам пишет, что индекса там 10Гб,
это она посчитала объем data pages.
новый кластерный индекс это примерно те же 200Гб
(за вычетом пустого места, если оно образовалось от сплитов),
места в файле данных под него надо все те же 200Гб,
сперва строится новый индекс, потом дропается старый,
т.е. в какой-то момент под конец ребилда имеем оба индекса.
в лог при полном логировании идут полностью страницы нового индекса, т.е. все те же 200Гб.
и ровно столько же места (и даже несколько больше)
необходимо зарезервировать в логе под возможный роллбэк.
отсюда и минимум 400Гб лога
22 мар 17, 14:02    [20321201]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
РомакРома
Member

Откуда:
Сообщений: 7
o-o
листья кластерного индекса это в аккурат данные.
страницы данных (data pages) отличаются по структуре от страниц индекса (index pages),
поэтому, когда студия вам пишет, что индекса там 10Гб,
это она посчитала объем data pages.
новый кластерный индекс это примерно те же 200Гб
(за вычетом пустого места, если оно образовалось от сплитов),
места в файле данных под него надо все те же 200Гб,
сперва строится новый индекс, потом дропается старый,
т.е. в какой-то момент под конец ребилда имеем оба индекса.
в лог при полном логировании идут полностью страницы нового индекса, т.е. все те же 200Гб.
и ровно столько же места (и даже несколько больше)
необходимо зарезервировать в логе под возможный роллбэк.
отсюда и минимум 400Гб лога


Благодарю за ответ.
22 мар 17, 14:12    [20321267]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
o-o
Guest
упс,
у меня же там написано наоборот:
10Гб это именно INDEX(не DATA!!!) pages.
но, я думаю, это вы поняли
22 мар 17, 14:21    [20321325]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
Nimua
Member

Откуда: Ростов-на-Дону
Сообщений: 344
РомакРома,

а вам точно надо именно Rebuild делать? вы можете сделать reorg и понемногу,
REORG сохраняет все изменения в индексе, если вы прерываете процесс в отличие от REBUILD
может вам проще так?
22 мар 17, 15:08    [20321518]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
o-o
Guest
Nimua
РомакРома,

а вам точно надо именно Rebuild делать? вы можете сделать reorg и понемногу,
REORG сохраняет все изменения в индексе, если вы прерываете процесс в отличие от REBUILD
может вам проще так?

правда, лога он нагенерит еще больше,
причем в любой модели
22 мар 17, 15:17    [20321575]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
o-o
Nimua
РомакРома,

а вам точно надо именно Rebuild делать? вы можете сделать reorg и понемногу,
REORG сохраняет все изменения в индексе, если вы прерываете процесс в отличие от REBUILD
может вам проще так?

правда, лога он нагенерит еще больше,
причем в любой модели

@понемногу@
22 мар 17, 15:19    [20321584]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
o-o
Guest
лучше уж цивильно организовать "понемногу":
секционировать и ребилдить по секции за раз
22 мар 17, 15:24    [20321617]     Ответить | Цитировать Сообщить модератору
 Re: Как перестроить огромный кластерный индекс?  [new]
Nimua
Member

Откуда: Ростов-на-Дону
Сообщений: 344
Про понемногу - для некоторых систем переключение в другую модель кроме full не подойдет,
и поэтому запускать процесс reorga и стопать его - в общем решение через одно место, но если скорость того что будет делать REORG будет выше появляющегося хаоса то есть шансы так вывести в нормальное состояние.

Хотя конечно метод через одно место.
22 мар 17, 15:54    [20321781]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить