Многие администраторы и разработчики сталкиваются со странной ситуацией: утром полнотекстовый поиск (ППД) в 1С работает мгновенно, но к середине дня время отклика увеличивается с долей секунды до 20–30 секунд. При этом ресурсы сервера (процессор, оперативная память) могут быть свободны, а база данных MSSQL работает в штатном режиме. В этой статье мы подробно разберем, почему это происходит, как механизмы 1С управляют индексами и какие шаги нужно предпринять для стабилизации скорости поиска.
Первое и самое важное, что нам необходимо усвоить: механизм полнотекстового поиска в 1С практически не связан с SQL-сервером. Как правильно отмечено в обсуждении, полнотекстовый поиск — это собственная программная реализация фирмы «1С», которая работает на уровне сервера приложений (процесс rmngr).
Рассмотрим подробнее: когда вы вводите запрос в строку поиска, система не обращается к стандартным индексам таблиц базы данных. Вместо этого она считывает данные из специальных индексных файлов, которые хранятся в каталоге описания кластера (обычно это папка srvinfo на диске сервера приложений). Таким образом, планы обслуживания MSSQL, реиндексация таблиц базы данных и обновление статистики никак не влияют на скорость ППД. Если поиск тормозит, проблему нужно искать в файловой системе сервера приложений и настройках регламентных заданий 1С.
Полнотекстовый поиск в 1С основан на создании и поддержке специальных индексных файлов. Процесс их наполнения делится на два этапа, которыми управляют соответствующие регламентные задания:
Проанализируем ситуацию: если «Обновление» работает каждую минуту, а «Слияние» настроено всего раз в сутки (например, ночью), то к середине дня в папке index скапливаются сотни и тысячи мелких фрагментов. При выполнении поиска системе приходится сканировать каждый такой файл. Именно это объясняет, почему утром (после ночного слияния) поиск летает, а днем начинает тормозить — нарастает фрагментация поискового индекса.
Для исправления ситуации нам необходимо сбалансировать частоту выполнения заданий. Разберем по шагам, что нужно сделать:
Проверьте расписание задания СлияниеИндексаППД. Если оно выполняется только ночью, попробуйте настроить его выполнение несколько раз в день (например, в обеденный перерыв). Это позволит «схлопывать» накопившиеся фрагменты индекса и поддерживать высокую скорость поиска.
Однако помните, что слияние — ресурсоемкая операция. Если база очень большая, частое слияние может нагрузить дисковую подсистему. Оптимальный баланс подбирается экспериментально.
Если штатные задания не помогают, или индекс был поврежден (например, из-за некорректного завершения работы сервера), рекомендуется выполнить полное перестроение. Рассмотрим, как это сделать программно или через консоль администратора:
В интерфейсе программы (обычно в разделе «Администрирование» — «Поддержка и обслуживание» — «Управление полнотекстовым поиском») выполните следующие действия:
srvinfo.Важно: На больших базах процесс первичного построения может занять несколько часов. В это время поиск будет недоступен или будет выдавать неполные результаты.
Программно это можно сделать с помощью следующего кода:
// Очистка индекса полнотекстового поиска
ПолнотекстовыйПоиск.ОчиститьИндекс();
// Запуск фонового обновления индекса
ПолнотекстовыйПоиск.ОбновитьИндекс(Истина, Ложь);
Поскольку ППД активно работает с множеством мелких файлов в каталоге index, любые задержки на уровне операционной системы становятся критичными. Выясним, что может мешать серверу 1С:
srvinfo и все ее подкаталоги в исключения антивируса.В примере автора упоминается поиск по части номера «233». Нужно понимать, как 1С обрабатывает такие запросы. Полнотекстовый поиск наиболее эффективен, когда вы ищете целое слово. Поиск по части слова (особенно в середине или начале) заставляет систему использовать механизмы триграмм или выполнять более сложное сканирование индекса.
Если ваша специфика работы требует постоянного поиска по подстроке, возможно, стоит рассмотреть альтернативные варианты (например, использование стандартного поиска в динамическом списке, который работает через SQL LIKE), предварительно убедившись, что соответствующие поля в базе данных проиндексированы.
В сообщении упоминается ежедневный перезапуск служб 1С и MSSQL. Рассмотрим целесообразность этого действия. В современных версиях платформы (8.3.18+) процессы стали значительно стабильнее. Если вы наблюдаете «зависание» ППД, которое лечится только перезапуском rmngr, это может свидетельствовать об утечке памяти или баге в конкретном релизе платформы. Однако регулярный перезапуск — это скорее «костыль», чем решение. Лучше сосредоточиться на корректной настройке регламентных заданий слияния и исключении влияния антивируса.
Резюме для исправления проблемы: