Вход | Регистрация
 

Индексы sql, как посмотреть фрагментацию?

Индексы sql, как посмотреть фрагментацию?
Я
   OldCondom
 
19.02.20 - 11:11
Развернул базу из бекапа, к кластеру еще не подключал.
Формирую стандартный отчет mssql "Физическое состояние индексов". Получаю, к примеру, по таблице "_Acc28" некластеризованный индекс "_Acc28_ByCode_SR", фрагментация 50%, рекомендация - перестроить.
Выбираю в дереве этот индекс - перестроить. Операция выполнена успешна. Формирую отчет, изменений нет! Те же 50% фрагментации. Такая же ситуация через план обслуживания.
Что не так-то? Как правильно перестраивать/дефрагментировать индексы? Или отчет кривой?
 
 
   OldCondom
 
1 - 19.02.20 - 11:16
хм, сделал dbcc freeproccache, сейчас отчет формирую заново. Ну хз, может что изменится.
   OldCondom
 
2 - 19.02.20 - 11:26
Такс, команда
ALTER INDEX _Acc28_ByCode_SR ON [имябазы].[dbo].[_Acc28] REBUILT ничего не дала. ФРагментация осталась, хотя при перестроении должна быть равна 0.
ALTER INDEX _Acc28_ByCode_SR ON [имябазы].[dbo].[_Acc28] REORGANIZE - фрагментацию убрала.

Что-то я не догоняю
   Aleksey
 
3 - 19.02.20 - 11:33
UPDATE STATISTICS делал?
   OldCondom
 
4 - 19.02.20 - 11:36
Если не ошибаюсь, делал. С вероятностью в 80%)
   OldCondom
 
5 - 19.02.20 - 11:36
Судя по всему тут вырисовывается вопрос, а rebuilt вообще отрабатывает?
   trad
 
6 - 19.02.20 - 12:01
   OldCondom
 
7 - 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"
   OldCondom
 
8 - 21.02.20 - 12:46
Фрагментация исчезла.
Теперь надо над перестроением думать. Как там 1С рекомендует? Более 30% фрагментации - перестроить, что ли.

Список тем форума
Рекламное место пустует  Рекламное место пустует
Закон Брукера: Даже маленькая практика стоит большой теории.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.