Почему 1С зависает при обновлении индекса полнотекстового поиска и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей
← На главную

Мы часто сталкиваемся с ситуацией, когда после обновления платформы или конфигурации 1С, привычные операции начинают вести себя иначе, а порой и вовсе приводят к «зависаниям» программы. Один из таких распространенных сценариев – зависание при попытке обновления индекса полнотекстового поиска (ППД). В данном материале мы подробно разберем, почему возникает эта проблема, и какие шаги можно предпринять для ее эффективного решения.

Исходная ситуация, описанная в нашем случае, заключается в следующем: после обновления платформы 1С до версии 8.2.16.363 и конфигурации УТ 11.0.9.9, при попытке найти товар по артикулу, система предлагает обновить индекс полнотекстового поиска. При нажатии «ОК» программа «зависает», не реагируя на действия пользователя в течение длительного времени, тогда как ранее аналогичная операция занимала всего 15-30 секунд. Эта проблема наблюдается у нескольких пользователей и явно связана с изменениями после обновления.

Понимание природы полнотекстового поиска и причин зависаний

Прежде чем мы перейдем к конкретным решениям, давайте углубимся в то, как работает полнотекстовый поиск в 1С и почему его обновление может быть столь ресурсоемкой операцией. Полнотекстовый поиск данных (ППД) – это мощный инструмент, позволяющий находить информацию в базе данных не только по конкретным полям, но и по содержимому присоединенных файлов, обеспечивая гибкий и всеобъемлющий поиск. Однако его работа сопряжена с определенными особенностями, которые могут приводить к замедлениям и зависаниям.

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

Увеличение объема данных. Логично предположить, что чем больше данных хранится в вашей информационной базе, тем дольше и более ресурсозатратно будет происходить обновление индекса. Новые версии конфигураций или активное ведение учета могут значительно увеличить объем индексируемых данных.

Устаревший или поврежденный индекс. Очень часто причиной зависаний является некорректное состояние самого индекса. Индекс полнотекстового поиска может быть поврежден из-за внезапных перезагрузок сервера, сбоев в работе СУБД или ошибок в процессе его предыдущих обновлений. При обращении к такому индексу программа может зависать, пытаясь обработать некорректные данные.

Изменения в платформе или конфигурации. После обновлений платформы или конфигурации 1С функциональность ППД может перестать работать корректно. Это связано с изменениями в структуре индексов, параметрах настройки или несовместимостью версий. Например, новая версия конфигурации могла начать индексировать гораздо больше реквизитов, чем раньше, что значительно увеличивает объем индексируемых данных и, как следствие, время обновления. Для обслуживания и поддержки актуальности систем при работе с несколькими базами удобно запускать автоматическое архивирование, обновление и тестирование конфигураций 1С по расписанию в фоновом режиме.

Особенности работы слияния индексов. Мы должны понимать, что полнотекстовый поиск использует два типа индексов:

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

Процесс индексирования включает чтение файлов регистрации изменений, получение измененных объектов из базы данных, транслитерацию слов и замещение букв. Основные зависания могут происходить именно во время операции слияния индексов, которая добавляет результаты последних изменений из дополнительного индекса к основному. Эта операция может быть очень длительной при большом размере основного индекса, создавая пиковые нагрузки на систему.

Блокировки. Иногда причиной зависания может быть блокировка соединения с индексом, препятствующая его нормальному обновлению.

Индексированию подлежат реквизиты типов: строка, дата, число, ссылочные типы, хранилище значения. Для каждого объекта и реквизита в полнотекстовый индекс добавляется имя, синоним и представление объекта/реквизита на всех языках конфигурации.

Решение 1: Очистка и перестроение индекса полнотекстового поиска (Самое эффективное начальное решение)

Как мы уже выяснили, одной из частых причин зависаний является повреждение или некорректное состояние индекса. В этом случае наиболее радикальным и часто самым эффективным решением является его полная очистка и перестроение с нуля. Это сравнимо с полной переустановкой программного обеспечения, когда мы хотим избавиться от накопившихся ошибок.

Разберем по шагам, как выполнить эту операцию:

  1. Откройте раздел Администрирования. В пользовательском режиме программы перейдите в раздел Администрирование.
  2. Перейдите в Поддержку и обслуживание. Далее найдите пункт Поддержка и обслуживание.
  3. Управление полнотекстовым поиском. В этом разделе нам понадобится пункт Управление полнотекстовым поиском. Мы увидим настройки, связанные с ППД.
  4. Очистите индекс. Нажмите кнопку Очистить индекс. Эта операция полностью удалит текущий индекс полнотекстового поиска. Подтвердите действие, если потребуется.
  5. Обновите индекс. Сразу после очистки индекса нажмите кнопку Обновить индекс. Система начнет построение нового индекса с нуля. Эта операция может занять значительное время, особенно если база данных большая и ранее индекс не обновлялся длительный период. Нам придется дождаться ее полного завершения. Именно это действие, по опыту многих пользователей, часто решает проблему с зависаниями, как было показано в сообщении 22.

После успешного завершения обновления индекса, попробуйте выполнить поиск по артикулу или любой другой полнотекстовый поиск. Вероятно, проблема с зависанием будет решена, и поиск снова будет работать быстро и корректно. Если обновление индекса все равно завершается быстро и проблема возвращается, это может указывать на слишком частые изменения или специфические настройки. Помните, что первое построение индекса после очистки всегда будет самым долгим.

Решение 2: Настройка регламентных заданий для фонового обновления индекса

Если обновление индекса все равно занимает много времени, или мы хотим избежать ручного запуска и диалоговых окон, появляющихся в процессе работы, оптимальным решением является настройка регламентных заданий. Это позволит выполнять обновление индекса в фоновом режиме, обычно в нерабочее время, минимизируя влияние на производительность системы в часы пик.

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

Рассмотрим, как настроить регламентные задания в конфигурации 1С:Управление торговлей 11:

  1. Перейдите в раздел Администрирование. Как и в предыдущем решении, начнем с раздела Администрирование.
  2. Откройте Поддержку и обслуживание. Далее выберите Поддержка и обслуживание.
  3. Регламентные и фоновые задания. Здесь мы найдем пункт Регламентные и фоновые задания.
  4. Настройка задания «ОбновлениеИндексаППД». В списке регламентных заданий найдите задание с именем ОбновлениеИндексаППД. Убедитесь, что оно включено.
  5. Настройте расписание. Нажмите на ссылку с текущим расписанием (или кнопку для настройки). Мы можем задать периодичность выполнения задания: ежедневно, еженедельно, ежемесячно, а также указать время начала и окончания. Нам желательно выбрать период минимальной нагрузки на систему, например, ночью.

Продвинутая настройка: Использование двух регламентных заданий

Как упоминалось в сообщении 20 и дополнительной информации, для больших и высоконагруженных баз рекомендуется разделять процесс обновления индекса на два отдельных регламентных задания:

  1. Обновление временного индекса (ОбновлениеИндексаППД). Это задание должно отвечать за актуализацию дополнительного (временного) индекса, который содержит последние изменения. Поскольку этот процесс относительно быстрый, его можно настроить на более частый запуск, например, раз в минуту или раз в 10 минут. Это позволит поддерживать актуальность индекса без значительной нагрузки.
  2. Слияние основного и временного индексов (СлияниеИндексаППД). Это задание объединяет данные из временного индекса с основным индексом. Как мы знаем, операция слияния является самой ресурсоемкой. Поэтому ее лучше выполнять реже, например, раз в сутки, в нерабочее время (ночью), когда нагрузка на систему минимальна.

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

Решение 3: Оптимизация индексирования данных

Если мы обнаружили, что индекс стал слишком большим или обновление занимает неоправданно много времени, возможно, проблема кроется в том, что индексируется слишком много ненужных данных. Мы можем выборочно отключить полнотекстовый поиск для тех объектов метаданных или их реквизитов, которые не требуются для поиска.

Как мы можем это сделать:

  1. Откройте Конфигуратор. Для выполнения этой операции нам потребуется монопольный режим и доступ к Конфигуратору.
  2. Перейдите к объектам метаданных. В дереве конфигурации мы можем проанализировать справочники, документы и другие объекты.
  3. Снимите признак полнотекстового поиска. Для каждого объекта или конкретного реквизита, который не должен участвовать в полнотекстовом поиске (например, технические реквизиты, не несущие смысловой нагрузки для поиска пользователей), нам следует перейти в его Свойства и снять флажок Полнотекстовый поиск.

Такая выборочная индексация значительно уменьшит объем индексируемых данных, что приведет к снижению нагрузки на систему, ускорению процессов обновления индекса и уменьшению его размера. После изменения состава индексируемых данных нам обязательно потребуется очистить и перестроить индекс, как описано в Решении 1, чтобы изменения вступили в силу.

Решение 4: Полное отключение полнотекстового поиска (Как временное или постоянное решение)

В некоторых случаях, если полнотекстовый поиск не является критически важным функционалом для работы предприятия, или если он вызывает постоянные и неразрешимые проблемы с производительностью, мы можем полностью его отключить. Это может служить как временным решением для восстановления работоспособности системы, так и постоянным, если польза от поиска не перевешивает затраты на его поддержку.

Как отключить полнотекстовый поиск:

  1. Откройте раздел Администрирования. Перейдите в Администрирование.
  2. Перейдите в Поддержку и обслуживание. Далее выберите Поддержка и обслуживание.
  3. Управление полнотекстовым поиском. Зайдите в пункт Управление полнотекстовым поиском.
  4. Снимите флажок «Использовать полнотекстовый поиск». В этом окне мы увидим флажок Использовать полнотекстовый поиск. Снимите его. Эта операция, как правило, требует монопольного режима работы с базой данных.

После отключения полнотекстового поиска система перестанет его использовать и, соответственно, не будет требовать обновления индекса. Многие пользователи отмечают, что это может повысить общую производительность программы до 10% (сообщение 14, 19). Важно отметить, что даже при отключенном полнотекстовом поиске, функции поиска по артикулам или кодам, которые реализованы стандартными средствами 1С (через формы подбора, по полям справочников), будут продолжать работать.

Дополнительные рекомендации и анализ ситуации

Помимо основных решений, есть ряд дополнительных аспектов, которые мы должны учитывать для обеспечения стабильной работы полнотекстового поиска и 1С в целом:

  1. Аппаратные ресурсы. Мы уже упоминали об этом, но повторим: адекватные аппаратные ресурсы – это фундамент. Увеличение объема оперативной памяти может быть критически необходимым, особенно в момент слияния таблиц индексов. Производительность также сильно зависит от мощности процессора и, что особенно важно, от скорости дисковой подсистемы. Использование SSD-накопителей вместо HDD значительно ускоряет операции с индексом.

  2. Версия платформы 1С. Версия платформы и режим совместимости сильно влияют на работу ППД. На старых версиях он может работать некорректно или вообще не работать. 1С постоянно выпускает оптимизации. Например, значительные оптимизации потребления оперативной памяти полнотекстовым поиском были реализованы в версии 8.3.25. Для полного преимущества от новых оптимизаций может потребоваться перестроить индекс новой версией платформы.

  3. Переход на версию 2 полнотекстового поиска. Для больших и высоконагруженных баз мы можем рассмотреть переход на версию 2 ППД, если она доступна в нашей платформе. Это более современный механизм, который кардинально упрощает администрирование: обновление индекса происходит постепенно по мере поступления изменений, нагрузка на систему распределяется равномерно в течение дня, что исключает пиковые нагрузки. Переход на версию 2 ППД и обратно осуществляется в монопольном режиме. Для быстрого изменения версии ППД в информационной базе можно использовать обработку для смены версии полнотекстового поиска.

  4. Проверка целостности базы данных. «Битые» ссылки, нарушение ссылочной или логической целостности объектов могут вызывать проблемы не только с поиском, но и с общей работой 1С. Мы рекомендуем регулярно использовать встроенный механизм конфигуратора Тестирование и исправление для восстановления целостности информационной базы. Запускать его следует в монопольном режиме, предварительно сделав резервную копию.

  5. Перезапуск сервера 1С. Если мы работаем в клиент-серверном варианте и есть подозрение, что зависло соединение с блокировкой индекса, простой перезапуск сервера 1С:Предприятия или его служб может помочь сбросить эти блокировки и восстановить нормальную работу.

  6. Мониторинг. Регулярный контроль состояния индекса и производительности системы поможет нам заблаговременно выявлять потенциальные проблемы и принимать меры до того, как они приведут к критическим зависаниям.

  7. Обращение к специалисту. Если после всех предпринятых действий проблема не решается, или мы сталкиваемся с очень сложной и специфической ситуацией, для точной диагностики и оптимизации ППД рекомендуется обратиться к квалифицированному специалисту по 1С.

Мы выяснили, что зависания при обновлении полнотекстового индекса в 1С часто обусловлены его повреждением или значительным увеличением объема данных после обновлений. Наиболее эффективным первым шагом является очистка и перестроение индекса. Для долгосрочного решения мы можем настроить регламентные задания, разделив обновление временного индекса и ресурсоемкое слияние основного индекса. В крайнем случае, или при отсутствии критической необходимости в полнотекстовом поиске, его можно полностью отключить. Помните также о важности адекватных аппаратных ресурсов и актуальной версии платформы. Выбирая подходящее решение или комбинацию решений, мы сможем обеспечить стабильную и быструю работу нашей системы 1С.

← На главную