Полнотекстовый индекс, реиндексация и индексы СУБД: что и как чистить в 1С 8.3

· 9 мин

Содержание

Индекс полнотекстового поиска в 1С 8.3 очищают в форме Управление полнотекстовым поиском: кнопка «Очистить индекс», затем «Обновить индекс». Если же под «очисткой индексов» имеется в виду ускорение базы, то в файловом варианте это флажок «Реиндексация таблиц» в тестировании и исправлении, а в клиент-серверном — перестроение индексов средствами MS SQL или PostgreSQL.

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

Какой индекс чистить и когда это действительно нужно

В 1С есть два вида индексов, и их часто путают.

Индекс полнотекстового поиска (ППД) — отдельный набор файлов, по которому работает строка поиска в списках и глобальный поиск. Хранится вне таблиц базы:

  • 📁 файловая база — папка 1Cv8FTxt рядом с файлом 1Cv8.1CD;
  • 🖥️ клиент-серверная база — каталог 1Cv8FTxt внутри рабочего каталога кластера: srvinfo\reg_1541\<идентификатор базы>\.

Индексы таблиц базы данных — структуры внутри самой базы. Они ускоряют запросы, проведение и отчёты. В файловой базе живут в 1Cv8.1CD, в клиент-серверной — в СУБД.

Когда нужна очистка:

СимптомЧто делать
Поиск не находит документ, который точно естьОчистить и заново построить индекс ППД
Ошибка при обновлении индекса, регламентное задание падаетОчистить индекс ППД
Папка 1Cv8FTxt разрослась до десятков гигабайтОчистить индекс ППД, включить слияние
Отчёты и проведение медленнее, чем месяц назад, данных стало большеПерестроить индексы и статистику СУБД
После сбоя питания база открывается с ошибками чтенияТестирование и исправление с реиндексацией

Если поиск работает и база не тормозит, чистить ничего не нужно. Регулярное обслуживание индексов СУБД — другое дело, о нём ниже в разделе про автоматизацию.

Что у вас происходит?

Как очистить индекс полнотекстового поиска в 1С

Платформенная форма есть в любой конфигурации. До неё два пути.

Через администрирование типовой конфигурации

В БП 3.0, ЗУП 3.1, УТ 11 откройте Администрирование → Общие настройки и найдите группу про полнотекстовый поиск. Там есть флажок включения поиска и ссылка на настройку. Ссылка открывает форму управления индексом.

Через функции для технического специалиста

  1. Включите меню: Главное меню → Сервис → Параметры, флажок «Отображать команду “Все функции”». В новых версиях платформы команда называется «Функции для технического специалиста».
  2. Откройте Главное меню → Все функции → Стандартные → Управление полнотекстовым поиском.
  3. Нажмите «Очистить индекс». Форма покажет, что индекс пуст и неактуален.
  4. Нажмите «Обновить индекс». Дождитесь окончания.
  5. Проверьте поиском по документу, который раньше не находился.

Для базы на 20–30 ГБ построение индекса займёт от получаса до нескольких часов. Пока индекс строится, пользователи работают, но поиск выдаёт неполный результат.

Если индекс строится слишком долго и мешает днём, запустите в форме только очистку, а построение оставьте регламентному заданию на ночь.

Очистка индекса кодом

Если форма недоступна (например, база в сервисе без интерактивного доступа к стандартным функциям), выполните код во внешней обработке на сервере:

&НаСервере
Процедура ПересоздатьИндексНаСервере()
    ПолнотекстовыйПоиск.ОчиститьИндекс();
    // Слияние = Истина, Порциями = Ложь
    ПолнотекстовыйПоиск.ОбновитьИндекс(Истина, Ложь);
КонецПроцедуры

Вызов ОбновитьИндекс без порций строит весь индекс за один проход и может идти часами. Запускайте его вечером.

Ручное удаление папки 1Cv8FTxt

Крайний случай — когда форма падает с ошибкой при нажатии «Очистить индекс». Тогда файлы индекса удаляют вручную.

  1. Выгоните всех пользователей из базы.
  2. Для клиент-серверной базы остановите службу «Агент сервера 1С:Предприятия». Остановка службы обрывает сеансы всех баз этого сервера, а не только одной. Делайте это вне рабочего времени.
  3. Переименуйте папку 1Cv8FTxt (например, в 1Cv8FTxt_old). Не удаляйте сразу.
  4. Запустите службу и базу, постройте индекс заново.
  5. Когда поиск заработал, удалите старую папку.

Как найти нужную папку на сервере: в srvinfo\reg_1541 лежат каталоги с именами-идентификаторами баз. Идентификатор базы виден в консоли администрирования кластера в свойствах информационной базы.

Реиндексация таблиц файловой базы 1С

Для файловой базы встроенный инструмент — тестирование и исправление в Конфигураторе. Ему нужен монопольный доступ.

  1. Сделайте копию: скопируйте каталог базы целиком или выгрузите .dt через Администрирование → Выгрузить информационную базу.
  2. Попросите пользователей выйти. Проверить, кто остался, можно в Конфигураторе: Администрирование → Активные пользователи.
  3. Откройте Администрирование → Тестирование и исправление.
  4. Оставьте флажок «Реиндексация таблиц информационной базы». Остальные проверки включайте по задаче.
  5. Выберите режим «Только тестирование», если нужна лишь реиндексация без исправлений. Нажмите «Выполнить».

Для базы 5–10 ГБ реиндексация обычно занимает 10–40 минут на SSD.

Флажки «Проверка ссылочной целостности» и «Пересчёт итогов» с режимом «Тестирование и исправление» меняют данные: удаляют или создают объекты по битым ссылкам. Для простой реиндексации они не нужны.

Ещё один инструмент файловой базы — утилита chdbfl.exe из каталога bin платформы. Она проверяет физическую целостность файла 1Cv8.1CD и запускается без Конфигуратора. Утилита полезна, когда база не открывается вовсе. Перед запуском закройте все сеансы и скопируйте файл.

Перестроение индексов в MS SQL и PostgreSQL

В клиент-серверной базе индексы принадлежат СУБД. Чистить их как папку нельзя — их перестраивают (rebuild) или реорганизуют.

MS SQL Server

Сначала оцените фрагментацию:

SELECT OBJECT_NAME(ips.object_id) AS table_name,
       i.name AS index_name,
       ips.avg_fragmentation_in_percent,
       ips.page_count
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED') ips
JOIN sys.indexes i
  ON i.object_id = ips.object_id AND i.index_id = ips.index_id
WHERE ips.page_count > 1000
ORDER BY ips.avg_fragmentation_in_percent DESC;

Ориентир из рекомендаций Microsoft:

ФрагментацияДействиеБлокировки
до 5–10%ничего не делать—
10–30%ALTER INDEX ... REORGANIZEминимальные, можно днём
более 30%ALTER INDEX ... REBUILDблокирует таблицу (кроме ONLINE в Enterprise)

Перестроение одной таблицы:

ALTER INDEX ALL ON dbo._AccumRg1234 REBUILD;
UPDATE STATISTICS dbo._AccumRg1234 WITH FULLSCAN;

Имя таблицы _AccumRg1234 условное. Соответствие имён таблиц СУБД объектам 1С показывает функция ПолучитьСтруктуруХраненияБазыДанных().

Для всей базы удобнее план обслуживания в SQL Server Management Studio: задачи «Rebuild Index», «Reorganize Index» и «Update Statistics». REBUILD пересчитывает статистику самих индексов, но не статистику по отдельным колонкам, поэтому задачу обновления статистики в плане оставляйте.

PostgreSQL

Перестроение всех индексов базы:

REINDEX DATABASE buh_base;

Или из командной строки:

reindexdb -U postgres -d buh_base
vacuumdb -U postgres -d buh_base --analyze

С PostgreSQL 12 доступен REINDEX ... CONCURRENTLY, он не блокирует запись, но работает дольше и требует больше места. Обычный REINDEX блокирует запись в таблицу на время перестроения.

Для PostgreSQL регулярный VACUUM ANALYZE важнее частого REINDEX. Если автовакуум отключён или не успевает, индексы раздуваются быстрее.

Встроенная реиндексация для клиент-серверной базы

Тестирование и исправление работает и в клиент-серверном варианте. Но для базы на 100+ ГБ оно идёт часами и требует монопольного доступа на всё время. Средства СУБД позволяют перестраивать индексы по частям и в разные ночи.

Подготовка к обслуживанию через консоль кластера

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

  1. Откройте консоль, разверните Кластеры → Информационные базы, откройте свойства нужной базы.
  2. Включите «Блокировка начала сеансов включена», задайте время начала и окончания, сообщение и код разрешения.
  3. Включите «Блокировка регламентных заданий включена». Иначе задание обмена или обновления ППД захватит таблицы посреди REINDEX.
  4. В ветке «Сеансы» проверьте, что активных сеансов не осталось. Завершайте оставшиеся только после предупреждения пользователей: несохранённые данные пропадут.
  5. После обслуживания снимите обе блокировки.

С кодом разрешения администратор может зайти в заблокированную базу, указав параметр /UC<код> в строке запуска.

Как автоматизировать очистку и обновление индексов

Полнотекстовый индекс. В типовых конфигурациях на БСП за него отвечают два регламентных задания: обновление индекса и слияние индекса. Найти их можно в Администрирование → Обслуживание → Регламентные и фоновые задания, отфильтровав список по слову «индекс». Типовая схема:

  • 🔄 обновление — каждые 10–15 минут днём, порциями;
  • 🧩 слияние — раз в сутки, ночью.

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

Индексы СУБД. Для MS SQL — план обслуживания с агентом SQL Server:

  • реорганизация индексов — еженедельно;
  • перестроение сильно фрагментированных — раз в неделю или месяц, в выходные;
  • обновление статистики — ежедневно ночью.

Для PostgreSQL — задание в cron или планировщике Windows:

# воскресенье, 03:00 — перестроение индексов и сбор статистики
0 3 * * 0 reindexdb -U postgres -d buh_base && vacuumdb -U postgres -d buh_base --analyze

Перед заданием поставьте блокировку сеансов через консоль кластера или утилиту rac (параметры смотрите в rac help infobase). Без блокировки REINDEX будет ждать снятия блокировок от пользователей.

Окно обслуживания индексов
Выполнено: 0 / 7

Если после очистки индекса 1С не стало лучше

Поиск всё равно не находит. Проверьте, что полнотекстовый поиск включён в форме управления. Затем — что нужный объект участвует в поиске: у объекта в Конфигураторе свойство «Полнотекстовый поиск» должно быть «Использовать». Реквизиты тоже можно исключить из индекса. В типовых конфигурациях часть объектов исключена намеренно.

Индекс снова неактуален через час. Регламентное задание обновления не запускается. Проверьте, не стоит ли блокировка регламентных заданий в консоли кластера, и есть ли у сервера права на запись в каталог srvinfo.

База тормозит и после перестроения индексов СУБД. Индексы не причина. Смотрите дальше:

  • 📊 устаревшая статистика — обновите с полным просмотром;
  • 🔒 ожидания на блокировках — проверьте управляемый режим блокировок и долгие транзакции;
  • 💾 диск — очередь к диску выше 2 на ядро говорит о нехватке скорости хранилища;
  • 🧮 итоги регистров — пересчёт итогов и установка периода рассчитанных итогов;
  • 🧠 памяти у СУБД мало — для MS SQL проверьте параметр max server memory.

После реиндексации файловой базы ошибки остались. Запустите chdbfl.exe с исправлением на копии файла. Не помогло — выгрузка в .dt и загрузка в новую пустую базу пересоздают все таблицы и индексы с нуля.

Частые ошибки

  • ❌ REINDEX днём на рабочей базе. Таблицы блокируются, пользователи висят на проведении, а часть получает ошибку блокировки.
  • ❌ Удаление 1Cv8FTxt при работающем сервере. Файлы заняты процессом rphost, удаление проходит частично, индекс остаётся битым.
  • ❌ Путаница двух индексов. Очистка ППД не ускорит отчёты, а перестроение индексов СУБД не починит поиск.
  • ❌ Перестроение без обновления статистики после REORGANIZE. Реорганизация статистику не обновляет, и планы запросов остаются старыми.
  • ❌ Слишком частый полный REBUILD. На маленьких таблицах до 1000 страниц фрагментация не влияет на скорость, а перестроение только раздувает журнал транзакций.

Частые вопросы

Можно ли пользоваться 1С, пока строится индекс полнотекстового поиска?
Да. Работа не блокируется, но поиск до окончания построения находит не всё.
Сколько места занимает индекс ППД?
Обычно 10–30% от объёма базы. Без регулярного слияния он может вырасти больше самой базы.
Нужно ли чистить индекс после обновления конфигурации?
Обычно нет. Новые и изменённые данные регламентное задание добавит в индекс само. Очистка нужна, только если после обновления поиск начал ошибаться или задание падает.
Влияет ли полнотекстовый индекс на скорость проведения документов?
Почти нет. Индекс обновляется отдельным заданием, а не в момент записи документа.
Чем REORGANIZE отличается от REBUILD в MS SQL?
REORGANIZE переупорядочивает страницы на месте и почти не блокирует. REBUILD создаёт индекс заново, убирает фрагментацию полностью, но блокирует таблицу.