Гайд 1С: Устранение фрагментации таблиц и индексов с помощью дефрагментации онлайн
- Просадка скорости выполнения выборок и отчетов 1С при росте объема базы.
- Фрагментация индексов превышает 30–50% в системных отчетах СУБД.
- Раздувание дискового пространства из-за полупустых страниц данных (Page Density < 70%).
- Блокировки пользователей при выполнении стандартного автономного регламента обслуживания.
1. Стратегия выбора метода дефрагментации (MS SQL Server)
- Фрагментация от 10% до 30%: Выполняйте
REORGANIZE(онлайн-уплотнение страниц без блокировки таблицы). - Фрагментация > 30%: Выполняйте
REBUILD WITH (ONLINE = ON)(перестроение индекса онлайн, доступно в Enterprise Edition).
2. Скрипт интеллектуального обслуживания MS SQL Server
DECLARE @TableName NVARCHAR(256), @IndexName NVARCHAR(256), @Frag FLOAT, @SQL NVARCHAR(MAX);
DECLARE cur CURSOR FOR
SELECT
OBJECT_NAME(object_id), name, avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED')
WHERE avg_fragmentation_in_percent > 10 AND index_id > 0 AND page_count > 1000;
OPEN cur;
FETCH NEXT FROM cur INTO @TableName, @IndexName, @Frag;
WHILE @@FETCH_STATUS = 0
BEGIN
IF @Frag < 30
SET @SQL = 'ALTER INDEX [' + @IndexName + '] ON [' + @TableName + '] REORGANIZE;';
ELSE
SET @SQL = 'ALTER INDEX [' + @IndexName + '] ON [' + @TableName + '] REBUILD WITH (ONLINE = ON, SORT_IN_TEMPDB = ON);';
EXEC sp_executesql @SQL;
FETCH NEXT FROM cur INTO @TableName, @IndexName, @Frag;
END;
CLOSE cur;
DEALLOCATE cur;3. Онлайн дефрагментация в PostgreSQL (pg_repack)
Стандартный VACUUM FULL блокирует таблицы монопольно. Для онлайн-перестроения таблиц 1С используйте утилиту pg_repack:
pg_repack -k -d enterprise_base -t _inforg12345 Частые вопросы (FAQ)
Почему нельзя дефрагментировать маленькие таблицы (менее 1000 страниц)?
В СУБД для маленьких таблиц страницы выделяются смешанными экстентами (Mixed Extents). Фрагментация на них всегда будет отображаться высокой, но это не оказывает никакого влияния на скорость чтения.
Блокирует ли ALTER INDEX ... REBUILD WITH (ONLINE = ON) пользователей 1С?
Онлайн-перестроение удерживает кратковременную блокировку Sch-M (Schema Modification) только в самом начале и в конце процесса на доли секунды. В остальное время пользователи могут полноценно читать и писать в таблицу.
Нужно ли обновлять статистику после REBUILD и REORGANIZE?
После REBUILD статистика обновляется автоматически со 100% выборкой (Full Scan). После REORGANIZE статистика НЕ обновляется, поэтому команду UPDATE STATISTICS необходимо запускать отдельно.
Как часто нужно запускать дефрагментацию в базах 1С?
В активных базах регламент дефрагментации настраивается ежедневно в ночное окно или раз в неделю с обязательной фильтрацией по порогу фрагментации.