Реорганизация индексов в случае фрагментации — это T-SQL

Чтобы сохранить низкий уровень фрагментации индексов, вам следует время от времени реорганизовывать индексы на MSSQL. В приведенной ниже ссылке Microsoft описывает, как вы можете проверить фрагментацию индексов в таблицах в MSSQL, а затем как вы можете реорганизовать (перестроить) индексы, чтобы уменьшить процент фрагментации:

https://docs.microsoft.com/en-us/sql/relational-databases/indexes/reorganize-and-rebuild-indexes?view=sql-server-ver15

Было бы неплохо иметь процедуру, которая автоматически реорганизует индексы в случае, если процент фрагментации достигает определенного порога. Следующая процедура делает это:

create procedure ui_reorganize_indices @db_name nvarchar(127), @table_name nvarchar(127)
as
begin 
    declare @avg_fragmentation_in_percent float
    declare @index_name nvarchar(127)
    declare @alter_index_command nvarchar(256)

    declare rebuild_index_cursor cursor local for 
        select name AS IndedxName, avg_fragmentation_in_percent
        FROM sys.dm_db_index_physical_stats
            (DB_ID (@db_name)
                , OBJECT_ID(@table_name)
                , NULL
                , NULL
                , NULL) AS a
        INNER JOIN sys.indexes AS b
            ON a.object_id = b.object_id
            AND a.index_id = b.index_id
            and avg_fragmentation_in_percent > 20.0;

    open rebuild_index_cursor
        fetch next from rebuild_index_cursor into @index_name, @avg_fragmentation_in_percent
        while @@fetch_status = 0
        begin
            select @alter_index_command = formatmessage('alter index %s on %s REORGANIZE', @index_name, @table_name)
            print @alter_index_command
            exec (@alter_index_command)
            fetch next from rebuild_index_cursor into @index_name, @avg_fragmentation_in_percent
        end
    close rebuild_index_cursor
end
go

Ребята, вы прибегали к подобным процедурам для улучшения своих показателей?

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *