1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- begin
- declare @databaseName sysname = N'SN7_SERVER_SCHEMA';
- declare @rebuildFloor float = 40;
- declare @schemaName sysname;
- declare @tableName sysname;
- declare @indexName sysname;
- declare @fragmentation float;
- declare @command nvarchar(500);
- print N'Rebuild index started at: ' + convert( nvarchar(100), SYSDATETIME(), 20 );
- print N'-------------------------------------------------------------------------';
- -- select indexes for rebuild
- declare indexCursor cursor fast_forward local for
- select s.name schema_name, t.name table_name, i.name index_name, d.avg_fragmentation_in_percent fragmentation
- from sys.dm_db_index_physical_stats( DB_ID(@databaseName), null, null, null, null) d
- inner join sys.tables t on d.object_id = t.object_id
- inner join sys.schemas s on t.schema_id = s.schema_id
- inner join sys.indexes i on d.object_id = i.object_id AND d.index_id = i.index_id
- where d.index_id > 0
- and d.avg_fragmentation_in_percent > 10
- and d.page_count > 8
- open indexCursor;
- while( 1=1 )
- begin
- fetch next from indexCursor into @schemaName, @tableName, @indexName, @fragmentation;
- if @@FETCH_STATUS <> 0 break;
- begin try
- set @command = N'ALTER INDEX ' + @indexName + N' ON ' + @databaseName + N'.' + @schemaName + N'.' + @tableName;
- if @fragmentation < @rebuildFloor
- begin
- set @command = @command + N' REORGANIZE;';
- set @command = @command + N' UPDATE STATISTICS ' + @databaseName + N'.' + @schemaName + N'.' + @tableName + N' ' + @indexName + N';';
- end
- else
- begin
- set @command = @command + N' REBUILD WITH (ONLINE = ON); ';
- end;
-
- --print @command;
- exec (@command);
- print N'INDEX ' + @indexName + N'ON ' + @databaseName + N'.' + @schemaName + N'.' + @tableName + N' SUCCESSFULLY PROCESSED';
- end try
- begin catch
- print N'ERROR REBUILD INDEX ' + @indexName;
- print N'ERROR MESSAGE: ' + ERROR_MESSAGE();
- end catch
- end;
- print N'-------------------------------------------------------------------------';
- print N'Rebuild index completed at: ' + convert( nvarchar(100), SYSDATETIME(), 20 );
- close indexCursor;
- deallocate indexCursor;
- end;
|