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

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

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

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

Гайд 1С: Оптимизация алгоритмов поиска дублей элементов справочников

Обновлено: 26.08.2026 · Официальная документация ↗
  • Обработка «Поиск и удаление дублей» в БСП зависает или падает по таймауту на базах с миллионами записей.
  • 100% нагрузка на CPU и переполнение оперативной памяти при расчете расстояния Левенштейна.
  • Блокировки таблиц документов при слиянии и пакетной замене ссылок дублей на оригиналы.

1. Предварительная фильтрация через Полнотекстовый поиск (ППП)

Никогда не выполняйте полное декартово произведение записей для нечеткого сравнения строк. Сначала отбирайте кандидатов через индекс полнотекстового поиска или точные совпадения по маске (ИНН, КПП, нормализованное наименование):

// ПРАВИЛЬНЫЙ ШАГ: Первичный поиск кандидатов по точному хэшу/ИНН
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ ИНН, КОЛИЧЕСТВО(Ссылка) КАК КолВо
    |ИЗ Справочник.Контрагенты
    |ГДЕ НЕ ЭтоГруппа И ИНН <> """"
    |СГРУППИРОВАТЬ ПО ИНН
    |ИМЕЮЩИХ КОЛИЧЕСТВО(Ссылка) > 1";

2. Оптимизация нечеткого сравнения (Сходство строк)

Для поиска дублей по наименованию вычисляйте хэш-сигнатуры (Soundex, Metaphone или очищенные от спецсимволов подстроки) заранее в отдельном реквизите при записи объекта, выполняя поиск по индексу, а не вызовом алгоритмов в цикле.

3. Пакетная замена ссылок с контролем блокировок

Замену дублирующихся ссылок выполняйте порциями с отключением проверки итогов там, где это допустимо регламентом:

// Замена ссылок с использованием механизмов БСП
Параметры = ПоискИУдалениеДублейСлужебный.ПараметрыЗаменыСсылок();
Параметры.УдалятьДубли = Ложь; // Пометить на удаление вместо жесткого DELETE
ПоискИУдалениеДублейСлужебный.ЗаменитьСсылки(МассивДублей, СсылкаОригинал, Параметры);
💡 Практика специалистов: Запускайте масштабную замену дублей номенклатуры или контрагентов только в регламентное ночное окно, предварительно отключив полнотекстовое индексирование на время пакетной транзакции.

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

Почему замена ссылок дублей блокирует всю базу?

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

Как ускорить поиск ссылок на удаляемый элемент?

Используйте встроенную функцию НайтиПоСсылкам() с явным ограничением области поиска только по ключевым используемым метаданным (передавая массив типов вторым параметром).

Помогает ли актуализация индекса полнотекстового поиска (ППП)?

Да, если индекс ППП устарел, типовая обработка БСП переходит в режим прямого перебора таблиц через LIKE '%строка%', что в тысячи раз медленнее.

Безопасно ли заменять ссылки прямым SQL-запросом UPDATE?

Категорически нет. Прямой SQL UPDATE ломает объектный кэш 1С, не пересчитывает итоги регистров и приводит к неконсистентности данных в связанных таблицах движений.

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