Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

PERF_INDEX_FRAGMENTATION_DEFRAG 1С:Предприятие и СУБД

Гайд 1С: Устранение фрагментации таблиц и индексов с помощью дефрагментации онлайн

Обновлено: 26.08.2026 · Официальная документация ↗
  • Просадка скорости выполнения выборок и отчетов 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
💡 Практика специалистов: При выполнении REBUILD ONLINE всегда указывайте опцию SORT_IN_TEMPDB = ON — это предотвратит раздувание и фрагментацию самого файла данных базы 1С за счет использования ресурсов tempdb.

Частые вопросы (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С?

В активных базах регламент дефрагментации настраивается ежедневно в ночное окно или раз в неделю с обязательной фильтрацией по порогу фрагментации.

Полезные материалы
Рекомендуем