Гайд 1С: Анализ и удаление неиспользуемых индексов метаданных в конфигурации
- Медленная запись и проведение документов при высокой утилизации дисков на запись.
- Размер индексов в базе данных превышает размер самих таблиц данных в несколько раз.
- Блокировки страниц индексов (
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 обнуляются при перезапуске службы сервера баз данных.