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

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

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

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

Гайд 1С: Анализ и удаление неиспользуемых индексов метаданных в конфигурации

Обновлено: 26.08.2026 · Официальная документация ↗
  • Медленная запись и проведение документов при высокой утилизации дисков на запись.
  • Размер индексов в базе данных превышает размер самих таблиц данных в несколько раз.
  • Блокировки страниц индексов (PAGELATCH_EX, LCK_M_X) при параллельной вставке строк.
  • Большой объем лишней дисковой памяти, занимаемой индексами в буферном кэше СУБД.

1. Поиск неиспользуемых индексов в MS SQL Server

Выполните скрипт анализа системных динамических представлений (DMV):

SELECT 
    OBJECT_NAME(s.object_id) AS TableName,
    i.name AS IndexName,
    s.user_seeks, s.user_scans, s.user_lookups, 
    s.user_updates AS TotalWrites,
    (s.user_seeks + s.user_scans + s.user_lookups) AS TotalReads
FROM sys.dm_db_index_usage_stats s
INNER JOIN sys.indexes i ON i.object_id = s.object_id AND i.index_id = s.index_id
WHERE database_id = DB_ID()
  AND OBJECTPROPERTY(s.object_id, 'IsUserTable') = 1
  AND s.user_updates > 1000
  AND (s.user_seeks + s.user_scans + s.user_lookups) = 0
ORDER BY TotalWrites DESC;

2. Анализ неиспользуемых индексов в PostgreSQL

SELECT 
    schemaname || '.' || relname AS table_name,
    indexrelname AS index_name,
    pg_size_pretty(pg_relation_size(indexrelid)) AS index_size,
    idx_scan AS index_scans
FROM pg_stat_user_indexes
WHERE idx_scan = 0
  AND indexrelname NOT LIKE '%_pkey'
ORDER BY pg_relation_size(indexrelid) DESC;

3. Корректировка в конфигурации 1С

Найдите в конфигураторе метаданные, порождающие избыточный индекс:

  • Снимите флаг Индексировать или Индексировать с доп. упорядочиванием у неиспользуемых в реальных отборах реквизитов.
  • Удалите дублирующие критерии отбора и составные индексы, покрываемые первичными ключами.
💡 Практика специалистов: Особое внимание уделите реквизитам с типом Булево — установка на них флага 'Индексировать' практически бессмысленна из-за крайне низкой селективности данных, но гарантированно замедляет запись.

Частые вопросы (FAQ)

Почему нельзя удалять неиспользуемые индексы напрямую в СУБД через DROP INDEX?

Платформа 1С строго контролирует соответствие схемы СУБД метаданным конфигурации. При очередной реструктуризации базы (обновлении конфигурации) платформа автоматически воссоздаст все удаленные в СУБД индексы заново.

Сколько времени нужно собирать статистику СУБД перед принятием решения об удалении индекса?

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

Какую нагрузку создает один лишний индекс на таблице документов?

Каждая операция INSERT, UPDATE или DELETE требует синхронной модификации B-Tree дерева каждого индекса таблицы, увеличивая число операций ввода-вывода и провоцируя фрагментацию страниц.

Сбрасывается ли статистика использования индексов при перезапуске СУБД?

Да. Динамические представления DMV (в MSSQL) и счетчики pg_stat обнуляются при перезапуске службы сервера баз данных.

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