Полнотекстовый поиск данных (ППД) — это важный встроенный механизм платформы «1С:Предприятие 8.3», который значительно облегчает жизнь пользователям «1С:Бухгалтерии предприятия 3.0». Он позволяет находить любые данные — документы, контрагентов, номенклатуру или текстовые строки — по ключевым словам из единой поисковой строки. Однако в процессе эксплуатации базы данных индекс полнотекстового поиска может повредиться. В результате пользователи сталкиваются с невозможностью обновить индекс, зависанием регламентных заданий или системными ошибками.
В этой статье мы подробно разберем, как восстановить работоспособность полнотекстового поиска. Мы проанализируем различные методы решения проблемы: от радикального удаления файлов на сервере до мягких способов администрирования непосредственно в режиме «1С:Предприятие» без прерывания работы пользователей. Также мы рассмотрим критические баги платформы 1С последних версий, связанные с переполнением диска, и выясним, как оптимизировать потребление оперативной памяти процессами 1С при работе с индексом.
Механизм ППД хранит свои данные отдельно от основной базы СУБД. Все индексные файлы располагаются на сервере приложений 1С в специальном каталоге под названием 1Cv8FTxt. Структура этого каталога включает в себя основной индекс, дополнительные порции изменений, файлы метаданных и файлы блокировок.
Основные причины сбоев в работе полнотекстового поиска:
1Cv8FTxt повреждается.Давайте подробно рассмотрим, какими методами можно восстановить работоспособность поиска.
Если индекс поврежден настолько серьезно, что штатные механизмы очистки из пользовательского интерфейса выдают ошибки, нам поможет физическое удаление файлов индекса с диска сервера. Этот метод гарантированно решает проблему, но требует кратковременной остановки сервера 1С и прерывания сеансов пользователей.
Выполним процедуру по шагам:
Агент сервера 1С:Предприятия 8.3 (или 1C:Enterprise 8.3 Server Agent) и остановить её. Если вы используете Linux, выполните в терминале команду остановки службы, например:
systemctl stop srv1cv83
C:\Program Files\1cv8\srvinfo\reg_1541\ (где reg_1541 — порт вашего кластера).
1CV8Reg.lst или сверить даты изменения папок.1Cv8FTxt. Именно здесь физически хранятся файлы индекса полнотекстового поиска.1Cv8FTxt. Не стоит бояться этого действия — платформа автоматически создаст чистый каталог при следующем запуске.systemctl start srv1cv83 на Linux).Рассмотрим ситуацию, когда мы не хотим выгонять пользователей из базы и останавливать рабочий сервер приложений. Попробуем решить проблему штатными средствами администрирования 1С.
Выполним следующие шаги:
1Cv8FTxt, используя внутренние методы API.Бывают случаи, когда при попытке выполнить «мягкую» очистку индекса система выдает ошибку о невозможности монопольного доступа к файлам, так как обновление уже выполняется другим процессом. Давайте проанализируем, как обойти эту блокировку без перезапуска сервера 1С.
Для этого воспользуемся Консолью администрирования серверов «1С:Предприятия»:
Администрирование серверов 1С Предприятия.Обновление индекса ППД или Слияние индекса ППД.Проанализируем серьезную техническую проблему, с которой часто сталкиваются администраторы систем на платформе 1С версий от 8.3.24 до 8.3.26. Симптом проблемы: свободное место на системном диске сервера 1С стремительно заканчивается, а папка базы раздувается до сотен гигабайт.
Причина кроется в файле tableChanges.dat, который находится в каталоге 1Cv8FTxt. В архитектуре платформы этот файл отвечает за регистрацию изменений объектов, которые должны быть проиндексированы при следующем запуске регламентного задания. Из-за ошибки в программном коде платформы при каждом обновлении индекса этот файл не очищался, а продолжал бесконечно дописывать новые транзакции. В крупных базах данных за несколько дней этот файл мог вырасти до критических объемов.
Как решить эту проблему?
8.3.24.1808, 8.3.25.1546, 8.3.26.1540 и во всех последующих сборках.1Cv8FTxt вашей базы и удалите только один конкретный файл — tableChanges.dat. После этого запустите службу сервера и инициируйте процедуру обновления индекса. Накопленные изменения сбросятся, и файл начнет расти заново с нуля.При слиянии основного и дополнительного индексов полнотекстового поиска рабочий процесс сервера rphost выполняет тяжелые вычислительные операции в оперативной памяти. На крупных базах данных это может привести к утечке памяти или превышению лимитов, установленных в настройках кластера 1С. В технологическом журнале при этом фиксируются события ATTN с ошибками вида Process exceeded critical memory limit, после чего процесс аварийно завершается операционной системой.
Чтобы избежать подобных падений процессов, мы рекомендуем выполнить следующие настройки:
Индексировать для полнотекстового поиска. Это существенно снизит объем индекса и нагрузку на сервер.Если вы хотите автоматизировать процесс обслуживания индекса или решать проблемы со сбоями программным путем, вы можете написать небольшую внешнюю обработку. Платформа предоставляет для работы с поиском удобный глобальный менеджер ПолнотекстовыйПоиск.
Посмотрим на пример кода, который позволяет очистить и заново запустить индексацию данных:
Процедура ОчиститьИОбновитьИндексППД() Экспорт
Попытка
// Проверим, разрешено ли использование полнотекстового поиска в системе
Если ПолнотекстовыйПоиск.ПолучитьРежимУстановкиИспользования() = РежимУстановкиИспользованияПолнотекстовогоПоиска.Разрешить Тогда
// Временно отключаем поиск на время очистки во избежание конфликтов блокировок
ПолнотекстовыйПоиск.УстановитьИспользование(Ложь);
// Производим полную очистку файлов индекса
ПолнотекстовыйПоиск.Очистить();
// Возвращаем использование поиска в активное состояние
ПолнотекстовыйПоиск.УстановитьИспользование(Истина);
// Запускаем асинхронное обновление индекса (Ложь - порционно, Истина - в фоновом задании)
ПолнотекстовыйПоиск.Обновить(Ложь, Истина);
ЗаписьЖурналаРегистрации("ОбслуживаниеППД", УровеньЖурналаРегистрации.Информация, , , "Индекс полнотекстового поиска успешно очищен и запущен на обновление.");
Иначе
ЗаписьЖурналаРегистрации("ОбслуживаниеППД", УровеньЖурналаРегистрации.Предупреждение, , , "Использование полнотекстового поиска отключено в настройках системы.");
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("ОбслуживаниеППД", УровеньЖурналаРегистрации.Ошибка, , , "Ошибка при обслуживании индекса ППД: " + ОписаниеОшибки());
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Среди администраторов и разработчиков 1С часто ведется дискуссия: нужен ли вообще полнотекстовый поиск в типовых конфигурациях? Некоторые специалисты рекомендуют полностью отключать его в общих настройках программы (снятием галочки «Полнотекстовый поиск данных» в меню Администрирование — Общие настройки).
Давайте проанализируем аргументы обеих сторон:
rphost и разрастанием каталога базы данных.LIKE (ПОДОБНО).LIKE может работать медленнее, чем оптимизированный индекс ППД, так как СУБД придется выполнять полное сканирование таблиц (Table Scan), если поиск ведется не по индексированным полям или не с начала строки.Таким образом, если ваша база данных работает стабильно, ресурсов сервера достаточно, а пользователи активно используют глобальную строку поиска — восстановите индекс методами, описанными выше. Если же сервер испытывает нехватку ресурсов, а пользователи ищут данные исключительно внутри списков документов, отключение полнотекстового поиска станет разумным и эффективным решением для оптимизации производительности всей системы.