Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 EXEC sp_MSForEachTable 'Print "Rebuild index on: ?"; ALTER INDEX ALL ON ? REBUILD WITH  [new]
rebuild indexes
Guest
Здравствуйте!

Необходимо выполнять в БД ребилд индексов,
в гугле для этих целей нашёл простое решение:

EXEC sp_MSForEachTable 'Print "Rebuild index on: ?"; ALTER INDEX ALL ON ? REBUILD WITH (FILLFACTOR = 80);'


меня смущает уровень заполненности 80. Нормально ли это для ребилда индексов?

автор
Создание индекса с низким значением fill factor означает,
что в вашей таблице зарезервировано место для последующего роста,
что предотвращает разбиение страниц, откладывая, таким образом,
связанные с этим проблемы.


у меня в БД очень много вставок!
боюсь, что при таком уровне заполненности будут образовываться переносы с одной страницы на другую, т.е. возникнут цепочки страниц
20 июн 13, 23:57    [14462868]     Ответить | Цитировать Сообщить модератору
 Re: EXEC sp_MSForEachTable 'Print "Rebuild index on: ?"; ALTER INDEX ALL ON ? REBUILD WITH  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
rebuild indexes
меня смущает уровень заполненности 80

Правильно смущает.
rebuild indexes
Нормально ли это для ребилда индексов?

Для одних индексов - нормально. Для других - нет.
21 июн 13, 00:06    [14462879]     Ответить | Цитировать Сообщить модератору
 Re: EXEC sp_MSForEachTable 'Print "Rebuild index on: ?"; ALTER INDEX ALL ON ? REBUILD WITH  [new]
rebuild indexes
Guest
Гавриленко Сергей Алексеевич
rebuild indexes
меня смущает уровень заполненности 80

Правильно смущает.
rebuild indexes
Нормально ли это для ребилда индексов?

Для одних индексов - нормально. Для других - нет.


так с каким же fillfactor запускать ребилд, если у меня 11 тысяч индексов в БД?

или просто не указывать его вовсе, пускай ms sql сам решает? тогда нужно кажется 0 указать.

поправьте, если не прав.
21 июн 13, 00:39    [14462963]     Ответить | Цитировать Сообщить модератору
 Re: EXEC sp_MSForEachTable 'Print "Rebuild index on: ?"; ALTER INDEX ALL ON ? REBUILD WITH  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
rebuild indexes
так с каким же fillfactor запускать ребилд, если у меня 11 тысяч индексов в БД?
Вы с самых больших начните, или с тех, которые больше всего модифицировать данные мешают.
rebuild indexes
или просто не указывать его вовсе, пускай ms sql сам решает?
Ничего он не решает.
21 июн 13, 02:02    [14463060]     Ответить | Цитировать Сообщить модератору
 Re: EXEC sp_MSForEachTable 'Print "Rebuild index on: ?"; ALTER INDEX ALL ON ? REBUILD WITH  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
rebuild indexes
так с каким же fillfactor запускать ребилд, если у меня 11 тысяч индексов в БД?
И вы решили сразу все 11 тысяч то и перестроить? При таком количестве индексов, поумнее можно было бы найти скрипт, который например проверяет фрагментацию перед тем как перестраивать. Например http://ola.hallengren.com/sql-server-index-and-statistics-maintenance.html

Что касается самого вопроса, если не знаете какой fillfactor ставить, то ставьте всем минимум 95, можно и больше. Перестравивать все индексы с 80% это глупость, только потеря места и памяти и какой то сомнительный выигрыш.

Можно еще посмотреть на характер добавления данных в индекс, рандомный или последовательный. Для второго случая % должен быть всегда 100. Если индекс рандомный, но при этом имеет очень небольшое количество уникальных значений, то % тоже должен стремиться к 100.

Если уж совсем по-правильному, то нужно регулярно мониторить фрагментацию и % заполнения индексов и на основании этого решать, какой % выставлять индивидуально каждому индексу, но это долго и муторно.
21 июн 13, 20:00    [14467898]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить