![]() |
|
Индексы sql, как посмотреть фрагментацию? | ☑ | ||
---|---|---|---|---|
0
OldCondom
19.02.20
✎
11:11
|
Развернул базу из бекапа, к кластеру еще не подключал.
Формирую стандартный отчет mssql "Физическое состояние индексов". Получаю, к примеру, по таблице "_Acc28" некластеризованный индекс "_Acc28_ByCode_SR", фрагментация 50%, рекомендация - перестроить. Выбираю в дереве этот индекс - перестроить. Операция выполнена успешна. Формирую отчет, изменений нет! Те же 50% фрагментации. Такая же ситуация через план обслуживания. Что не так-то? Как правильно перестраивать/дефрагментировать индексы? Или отчет кривой? |
|||
1
OldCondom
19.02.20
✎
11:16
|
хм, сделал dbcc freeproccache, сейчас отчет формирую заново. Ну хз, может что изменится.
|
|||
2
OldCondom
19.02.20
✎
11:26
|
Такс, команда
ALTER INDEX _Acc28_ByCode_SR ON [имябазы].[dbo].[_Acc28] REBUILT ничего не дала. ФРагментация осталась, хотя при перестроении должна быть равна 0. ALTER INDEX _Acc28_ByCode_SR ON [имябазы].[dbo].[_Acc28] REORGANIZE - фрагментацию убрала. Что-то я не догоняю |
|||
3
Aleksey
19.02.20
✎
11:33
|
UPDATE STATISTICS делал?
|
|||
4
OldCondom
19.02.20
✎
11:36
|
Если не ошибаюсь, делал. С вероятностью в 80%)
|
|||
5
OldCondom
19.02.20
✎
11:36
|
Судя по всему тут вырисовывается вопрос, а rebuilt вообще отрабатывает?
|
|||
6
trad
19.02.20
✎
12:01
|
https://docs.microsoft.com/ru-ru/sql/relational-databases/indexes/reorganize-and-rebuild-indexes?view=sql-server-ver15
на всякий случай, вдруг еще не читал |
|||
7
OldCondom
21.02.20
✎
12:45
|
В общем, либо я не умею смотреть, либо руки не из плеч, но план обслуживания как с реорганизацией, так и перестроением судя по отчету "Физическое состояние индексов" ничего толком не делают. Фрагментация остается.
Отрабатывает ПКМ на индексе, далее реорганизовать или перестроить. Посмотрел, что там за скрипт. "USE [имя базы] GO ALTER INDEX [имя индекса] ON [dbo].[имя таблицы] REORGANIZE WITH ( LOB_COMPACTION = ON ) GO" Нашел такой скрипт, к умному(с анализом процента фрагментации) он не относится, но хоть что-то. Выполняется схожий скрипт, который по ПКМ, но для всех индексов всех таблиц БД. "Use имя БД Declare @TBname nvarchar(255), @SQL nvarchar(max) select @TBname = min(TABLE_NAME) from INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' while @TBname is not null BEGIN set @SQL='ALTER INDEX ALL ON [' + @TBname + '] REORGANIZE;' --print @SQL EXEC SP_EXECUTESQL @SQL select @TBname = min(TABLE_NAME) from INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' and TABLE_NAME > @TBname END" |
|||
8
OldCondom
21.02.20
✎
12:46
|
Фрагментация исчезла.
Теперь надо над перестроением думать. Как там 1С рекомендует? Более 30% фрагментации - перестроить, что ли. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |