Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Порядок выполнения регламентной операции (статистика, индексы)  [new]
trew
Member

Откуда: Москва
Сообщений: 2645
Порядок выполнения регламентной операции.
Перестроение индексов и обновление статистики по всем таблицам.
В каком порядке их запускать (эти две операции)? (настраиваю план обслуживания)
9 авг 19, 14:43    [21945660]     Ответить | Цитировать Сообщить модератору
 Re: Порядок выполнения регламентной операции (статистика, индексы)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7017
trew,

Обновление статистик раз в 1-3 дня, перестроение индексов раз в 1-2 недели.
9 авг 19, 14:55    [21945685]     Ответить | Цитировать Сообщить модератору
 Re: Порядок выполнения регламентной операции (статистика, индексы)  [new]
1C Developer
Member

Откуда:
Сообщений: 58
Владислав Колосов
trew,

Обновление статистик раз в 1-3 дня, перестроение индексов раз в 1-2 недели.


Данный алгоритм подойдет для любой базы?:)

И для архивной и для той в которой данные в течении суток изменяются полностью?:)
9 авг 19, 15:05    [21945697]     Ответить | Цитировать Сообщить модератору
 Re: Порядок выполнения регламентной операции (статистика, индексы)  [new]
PsyMisha
Member

Откуда: другая столица
Сообщений: 547
trew,

если речь про Хранилище Данных - то я бы рекомендовал делать перестроение индексов каждое технологическое окно, после полной/инкрементной загрузки данных в СУБД.
Причем на рассмотрение вам - есть паттерн, когда перед вставкой данных в большую таблицу фактов некластерные индексы временно опускаются, дабы ускорить процедуру, далее - в модуле, ответственном именно за эту таблицу фактов - индексы поднимаются снова.
Можно делать программно, курсором в цикле пройтись по всем индексам вначале и в конце кода.

Если речь про оперативные источники - например 1С - то нужно смотреть по месту, применять скрипты анализа текущей фрагментации индексов, коррелировать их с бизнес-операциями, выполняемыми "сверху", с уровня приложения, - например, как часто делаются перепроводки документов
9 авг 19, 15:49    [21945734]     Ответить | Цитировать Сообщить модератору
 Re: Порядок выполнения регламентной операции (статистика, индексы)  [new]
PsyMisha
Member

Откуда: другая столица
Сообщений: 547
PsyMisha,
Если кстати мало ли пригодится кому - выкладывают код курсора по работе с некластерными индексами
Вызывается так:
+
EXEC dbo.usp_Process_NCIndexes_On_Table @Table_Name = 'sysdiagrams', @Schema_Name = 'dbo', @Action_Type = 'disable'

CREATE PROCEDURE [dbo].[usp_Process_NCIndexes_On_Table]
--EXEC dbo.usp_Process_NCIndexes_On_Table @Table_Name = 'sysdiagrams', @Schema_Name = 'dbo', @Action_Type = 'disable'
@Action_Type AS NVARCHAR(MAX),
@Table_Name AS NVARCHAR(MAX),
@Schema_Name AS NVARCHAR(10)

AS
BEGIN
-- ###########################
IF NOT (LOWER(@Action_Type) = 'enable' OR LOWER(@Action_Type) = 'disable')
	BEGIN
		SELECT 'Action type provided incorrectly. Please call the procedure either with ''enable'' or ''disable'' parameter'
		GOTO BRANCH_END
	END
-- ###########################
	
DECLARE @SQLCMD AS NVARCHAR(MAX)
DECLARE @Final_SQL AS NVARCHAR(MAX)
DECLARE @Index_Name AS NVARCHAR(2000)

--DECLARE @Table_Name AS NVARCHAR(100)
--SET @Table_Name = 'sysdiagrams'
--DECLARE @Schema_Name AS NVARCHAR(10)
--SET @Schema_Name = 'dbo'

SET @SQLCMD = 'DECLARE indexes_cursor CURSOR READ_ONLY FOR 
SELECT i.name AS [Index Name]
FROM sys.tables AS tbl
INNER JOIN sys.indexes AS i ON (i.index_id > 0 and i.is_hypothetical = 0) AND (i.object_id=tbl.object_id)
WHERE i.type = 2 --NC INDEX TYPE
AND tbl.name = ''' + @Table_Name + ''' AND schema_name(schema_id) = ''' + @Schema_Name + ''''

EXEC sp_executesql @SQLCMD

IF @Action_Type = 'enable' 
	BEGIN
		GOTO BRANCH_ENABLE
	END
ELSE
	BEGIN
		GOTO BRANCH_DISABLE
	END
	
-- ############
BRANCH_DISABLE:
OPEN indexes_cursor
FETCH NEXT FROM indexes_cursor INTO @Index_Name

WHILE @@FETCH_STATUS = 0
	BEGIN
		SET @Final_SQL = 'ALTER INDEX [' + @Index_Name + '] ON ' + '[' + @Schema_Name + '].[' + @Table_Name + ']' + ' DISABLE'
		--EXEC @Final_SQL
		PRINT @Final_SQL
			FETCH NEXT FROM indexes_cursor INTO @Index_Name
	END

CLOSE indexes_cursor
DEALLOCATE indexes_cursor
GOTO BRANCH_END

-- ############
BRANCH_ENABLE:
OPEN indexes_cursor
FETCH NEXT FROM indexes_cursor INTO @Index_Name

WHILE @@FETCH_STATUS = 0
	BEGIN
		SET @Final_SQL = 'ALTER INDEX [' + @Index_Name + '] ON ' + '[' + @Schema_Name + '].[' + @Table_Name + ']' + ' REBUILD WITH (FILLFACTOR=100, PAD_INDEX=ON)'
		--EXEC @Final_SQL
		PRINT @Final_SQL
			FETCH NEXT FROM indexes_cursor INTO @Index_Name
	END

CLOSE indexes_cursor
DEALLOCATE indexes_cursor
GOTO BRANCH_END

BRANCH_END:
	PRINT 'Done'
END
GO


Сообщение было отредактировано: 9 авг 19, 15:59
9 авг 19, 15:58    [21945744]     Ответить | Цитировать Сообщить модератору
 Re: Порядок выполнения регламентной операции (статистика, индексы)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7017
1C Developer,

как правило да, если автоматический перерасчет статистик не отключён.
Для понимания того, какие статистики необходимо пересчитывать, а какие нет - можно использовать динамические административные представления. На мой взгляд, в лучшие практики должно входить сервисное приложение обслуживания статистик и индексов: https://ola.hallengren.com.
9 авг 19, 16:27    [21945776]     Ответить | Цитировать Сообщить модератору
 Re: Порядок выполнения регламентной операции (статистика, индексы)  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 32617
Блог
trew
В каком порядке их запускать (эти две операции)? (настраиваю план обслуживания)


при перестроении индекса обновляется и статистика
9 авг 19, 17:00    [21945806]     Ответить | Цитировать Сообщить модератору
 Re: Порядок выполнения регламентной операции (статистика, индексы)  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5090
Критик
trew
В каком порядке их запускать (эти две операции)? (настраиваю план обслуживания)


при перестроении индекса обновляется и статистика

отдельная по-колоночная нет
9 авг 19, 17:21    [21945823]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить