Перестройка индексов MS SQL Server 2005


заметки от 12 августа 2007
Гилёв Вячеслав aka Demiurg


Спасибо Антону Батыркину за корректирование контента!

Для нормальной работы 1С:Предприятия 8.1 с Microsoft SQL Server 2005 в качестве регламентной процедуры, исполняемой с периодичностью, пропорциональной объему вводимых данных (например, 1 раз в сутки):

USE db1cut
GO
DECLARE @MyTable varchar(252)
DECLARE @MyIndex varchar(252)
DECLARE @DSQL varchar(8000)
DECLARE MyCursor CURSOR FOR
SELECT o.name, i.name
FROM sysobjects o INNER JOIN sysindexes i ON o.id = i.id
WHERE (o.xtype = 'U') AND (INDEXPROPERTY(i.id, i.name, 'isStatistics') = 0) AND (i.dpages > 0)
ORDER BY o.name, i.indid

OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @MyTable, @MyIndex
WHILE @@FETCH_STATUS=0

	BEGIN
	PRINT 'Перестройка индекса '+@MyIndex+' из таблицы '+@MyTable
	SET @DSQL = ' BEGIN TRY
	    ALTER INDEX '+@MyIndex+' ON  '+@MyTable+
	    ' REBUILD WITH (ONLINE = ON,
	    SORT_IN_TEMPDB = ON,
	    STATISTICS_NORECOMPUTE = ON)
	END TRY

	BEGIN CATCH ALTER INDEX '+@MyIndex+' ON  '+@MyTable+
	' REBUILD WITH (ONLINE = OFF,
	SORT_IN_TEMPDB = ON,
	STATISTICS_NORECOMPUTE = ON) END CATCH;'
	EXEC(@DSQL)

	FETCH NEXT FROM MyCursor INTO @MyTable, @MyIndex

END
CLOSE MyCursor
DEALLOCATE MyCursor

вместо sp_msforeachtable N'DBCC DBREINDEX (''?'')' для SQL Server 2000

Присылайте свои отзывы и пожелания на gilev_slava@mail.ru


Вернуться к списку статей

 
Copyright © 2007 Гилёв Вячеслав Валерьевич