Переиндексация и обслуживание индексов базы 1С: файловый режим, MS SQL, PostgreSQL

· 10 мин

Содержание

Почистить индексы в 1С можно двумя путями. В файловой базе — через Конфигуратор: Администрирование → Тестирование и исправление, флажок «Реиндексация таблиц информационной базы». В клиент-серверной базе индексы живут в СУБД, поэтому их перестраивают средствами MS SQL Server или PostgreSQL, и часть работ там можно делать без остановки пользователей.

Типичная ситуация: в понедельник бухгалтер жалуется, что журнал документов открывается полминуты, а оборотно-сальдовая ведомость за квартал формируется дольше обычного. Данных за выходные не прибавилось, конфигурацию не обновляли. Частая причина — фрагментированные индексы и устаревшая статистика, и порядок исправления зависит от того, файловая база или клиент-серверная.

Какие индексы есть в базе 1С и как понять, что их пора чистить

Под словом «индексы» в 1С прячутся три разные вещи. Путать их не стоит: лечатся они по-разному.

ЧтоГде хранитсяЧем обслуживать
Индексы таблиц файловой базывнутри файла 1Cv8.1CDКонфигуратор, утилита chdbfl.exe
Индексы таблиц клиент-серверной базыв базе MS SQL Server или PostgreSQLсредства СУБД: REBUILD, REORGANIZE, REINDEX, статистика
Индекс полнотекстового поискаотдельные файлы в каталоге 1Cv8FTxtобработка «Управление полнотекстовым поиском»

Признаки, что дело в индексах таблиц:

  • 🐢 замедлились списки, отбор и сортировка, хотя объём данных почти не изменился;
  • 📈 отчёты, которые раньше строились быстро, стали тормозить после массовой загрузки, закрытия месяца или удаления помеченных объектов;
  • 💾 файл 1Cv8.1CD заметно вырос после удаления большого количества документов;
  • ⚠️ в файловой базе появляются ошибки чтения или база падает на одних и тех же документах — это уже повод для полной проверки, а не только для реиндексации.

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

Если тормозит у одного пользователя, а у остальных всё нормально, индексы ни при чём. Чаще виноват локальный кэш клиента: его сбрасывают запуском с параметром /ClearCache или очисткой каталога кэша в профиле пользователя.

Подготовка: резервная копия и окно для работ

Реиндексация в Конфигураторе и полный REBUILD на сервере СУБД — операции, которые переписывают структуру таблиц. Если процесс оборвётся на середине (сбой питания, переполнение диска), файловую базу придётся восстанавливать.

Перед любой процедурой сделайте резервную копию базы и проверьте, что она открывается.

Перед обслуживанием индексов
Выполнено: 0 / 5

Свободное место нужно не случайно. При реиндексации файловой базы и при REBUILD индексов на SQL Server временно требуется место под новую копию индексов. В SQL Server растёт ещё и журнал транзакций, если база в полной модели восстановления.

Монопольный доступ нужен только для тестирования и исправления в Конфигураторе. Обслуживание средствами СУБД монопольного режима 1С не требует, но полный REBUILD без опции ONLINE блокирует таблицу на время перестроения.

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

Очистка и сжатие таблиц через Конфигуратор

Для файловой базы основной инструмент — встроенное тестирование. Оно же убирает «мусор»: записи, помеченные как удалённые внутри файла, и следы прерванных операций.

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

Что делает каждый флажок:

ФлажокЧто происходитКогда включать
Реиндексация таблициндексы удаляются и строятся зановопри тормозах и после сбоев
Проверка логической целостностисверяются связи между таблицамипосле аварийного завершения работы
Проверка ссылочной целостностиищутся «битые» ссылки на удалённые объектыпосле удаления помеченных объектов
Пересчёт итоговзаново считаются итоги регистровпри расхождениях в отчётах
Сжатие таблицфизически удаляются записи, помеченные удалённымипосле массового удаления данных
Реструктуризация таблицтаблицы пересоздаются полностьютолько когда остальное не помогло

Для первого запуска хватит трёх флажков из шага 4. Реструктуризация и пересчёт итогов на большой базе идут часами — включайте их, когда есть конкретная причина.

Переиндексация файловой базы: Конфигуратор и chdbfl

Если Конфигуратор не открывает базу или вылетает на тестировании, проверяют физическую целостность файла. Для этого в комплекте платформы есть утилита chdbfl.exe. Она лежит в каталоге bin установленной версии, например C:\Program Files\1cv8\8.3.24.1342\bin\chdbfl.exe — номер версии подставьте свой.

Порядок работы:

  1. Убедитесь, что базу никто не использует: ни пользователи, ни Конфигуратор, ни служба обмена.
  2. Скопируйте 1Cv8.1CD в отдельную папку. Это страховка на случай, если исправление пойдёт не так.
  3. Запустите chdbfl.exe, укажите путь к файлу базы.
  4. Включите флажок «Исправлять обнаруженные ошибки» и нажмите «Выполнить».
  5. После проверки откройте базу в Конфигураторе и проведите тестирование с реиндексацией, как описано выше.

Утилита работает только с файловыми базами. Для клиент-серверной базы она бесполезна.

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

Ещё один приём для сильно разросшейся файловой базы — выгрузка и загрузка через .dt. При загрузке все таблицы и индексы создаются заново, а файл обычно заметно уменьшается. Выгрузка делается в Конфигураторе: Администрирование → Выгрузить информационную базу, загрузка — там же. Загружайте в новую пустую базу, а не поверх рабочей: так старая остаётся запасным вариантом.

Обслуживание индексов 1С на MS SQL Server

В клиент-серверном варианте 1С создаёт индексы при реструктуризации, а дальше за их состоянием следит только СУБД. Сама она их не дефрагментирует, поэтому без плана обслуживания индексы со временем деградируют.

Как посмотреть фрагментацию

Запрос в SQL Server Management Studio, выполненный в контексте базы 1С:

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') AS ips
JOIN sys.indexes AS i
  ON i.object_id = ips.object_id AND i.index_id = ips.index_id
WHERE ips.avg_fragmentation_in_percent > 10
  AND ips.page_count > 1000
ORDER BY ips.avg_fragmentation_in_percent DESC;

Маленькие индексы (меньше 1000 страниц) отбрасываются: фрагментация на них почти не влияет на скорость. Имена таблиц будут служебными — _Document123, _AccumRg456, _InfoRg789. Чтобы понять, какому объекту конфигурации соответствует таблица, используют метод встроенного языка ПолучитьСтруктуруХраненияБазыДанных().

REORGANIZE или REBUILD

ДействиеКогдаБлокировки
REORGANIZEфрагментация примерно 5–30%выполняется онлайн, пользователи работают
REBUILDфрагментация выше 30%в Standard блокирует таблицу; в Enterprise можно с ONLINE = ON
обновление статистикирегулярно, независимо от фрагментациине блокирует работу

Пороги 5 и 30% — рекомендация Microsoft, а не жёсткое правило. На практике для 1С важнее свежая статистика: устаревшая сильнее сбивает планы запросов, чем фрагментация.

Команды для одной таблицы:

-- мягкая дефрагментация, можно днём
ALTER INDEX ALL ON dbo._AccumRg456 REORGANIZE;

-- полное перестроение, лучше в окно работ
ALTER INDEX ALL ON dbo._AccumRg456 REBUILD;

-- обновление статистики по всей базе
EXEC sp_updatestats;

После REBUILD статистика по перестроенным индексам обновляется сама, с полным просмотром. После REORGANIZE — нет, поэтому статистику обновляют отдельно.

Многие администраторы 1С после обновления статистики выполняют DBCC FREEPROCCACHE, чтобы SQL Server построил планы запросов заново. Учтите: команда очищает кэш планов всего экземпляра, и несколько минут сервер будет нагружен сильнее обычного.

Переиндексация базы 1С на PostgreSQL

В PostgreSQL удалённые и изменённые строки остаются в таблицах и индексах, пока их не уберёт VACUUM. Для 1С, где регистры постоянно перезаписываются, это главный источник «распухания».

Базовые команды:

-- уборка мёртвых строк и обновление статистики, работа не блокируется
VACUUM (ANALYZE, VERBOSE);

-- перестроение индексов одной таблицы без блокировки записи (PostgreSQL 12 и выше)
REINDEX TABLE CONCURRENTLY _accumrg456;

-- перестроение всех индексов базы, блокирует таблицы на время работы
REINDEX DATABASE buh_base;

Имена таблиц 1С в PostgreSQL записываются строчными буквами. REINDEX ... CONCURRENTLY идёт дольше обычного и требует больше места, зато пользователи продолжают проводить документы.

Что проверить, если база тормозит:

  • 🔍 включён ли autovacuum: SHOW autovacuum; должен вернуть on;
  • 📊 сколько мёртвых строк в крупных таблицах — колонка n_dead_tup в представлении pg_stat_user_tables;
  • 🕒 когда последний раз проходили autovacuum и autoanalyze — колонки last_autovacuum и last_autoanalyze там же.

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

VACUUM FULL возвращает место на диск, но полностью блокирует таблицу. Запускать его в рабочее время на таблицах регистров нельзя: пользователи получат ошибки блокировок.

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

Этот индекс к таблицам СУБД отношения не имеет. Его строит сама платформа, и чистится он из режима 1С:Предприятие.

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

В типовых конфигурациях на БСП индекс поддерживают регламентные задания обновления и слияния индекса полнотекстового поиска. Их список — в разделе Администрирование → Обслуживание по ссылке на регламентные и фоновые задания. Если задания выключены или падают с ошибкой, индекс отстаёт от данных и поиск «не видит» новые документы.

Какая у вас база и что тормозит?

Автоматизация обслуживания и профилактика

Разовая чистка помогает на неделю-другую. Чтобы база не деградировала снова, обслуживание ставят по расписанию.

MS SQL Server. В SQL Server Management Studio создайте план обслуживания (Maintenance Plan) с задачами:

  • 🔁 Reorganize Index — ежедневно ночью;
  • 🛠 Rebuild Index — раз в неделю, в выходной;
  • 📊 Update Statistics — ежедневно, после реорганизации;
  • 💾 Back Up Database — перед перестроением индексов.

Задачи плана выполняет SQL Server Agent. Он должен быть запущен и настроен на автоматический старт. В редакции Express агента нет, там обслуживание запускают скриптом через планировщик Windows.

PostgreSQL. Основная профилактика — правильно настроенный autovacuum. Для крупных таблиц регистров порог срабатывания часто снижают на уровне таблицы. Еженедельный VACUUM ANALYZE по крону страхует, если autovacuum не успевает.

Файловая база. Встроенного планировщика тестирования нет. Реиндексацию запускают из командной строки в пакетном режиме Конфигуратора с параметром /IBCheckAndRepair и нужными ключами, например:

"C:\Program Files\1cv8\8.3.24.1342\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "пароль" /IBCheckAndRepair -ReIndex -LogIntegrity -Out "D:\Logs\check.log"

Такой bat-файл ставят в планировщик Windows на ночь. Перед ним — копирование файла базы. Пароль в открытом виде храните только в файле, к которому есть доступ у одного администратора.

Файловая база больше 10–15 ГБ с десятком активных пользователей — сигнал задуматься о переходе на клиент-серверный вариант. Обслуживание индексов там гибче и не требует выгонять людей из программы.

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

Как часто нужно перестраивать индексы в 1С?
Для MS SQL — реорганизация и статистика ежедневно, полное перестроение раз в неделю. Для файловой базы — тестирование с реиндексацией раз в месяц-квартал и после аварийных отключений.
Можно ли почистить индексы, не выгоняя пользователей?
В клиент-серверной базе — да: REORGANIZE в MS SQL, REBUILD с ONLINE в Enterprise, REINDEX CONCURRENTLY в PostgreSQL. В файловой базе — нет, тестированию нужен монопольный режим.
Почему после реиндексации база не ускорилась?
Значит, причина в другом: неоптимальные запросы в доработках, нехватка памяти на сервере, управляемые блокировки или медленный диск. Проверьте долгие запросы в технологическом журнале или средствами СУБД.
Удалит ли реиндексация документы или проводки?
Нет, реиндексация перестраивает только индексы. Данные могут измениться при исправлении ошибок целостности или работе chdbfl, поэтому резервная копия обязательна.
Нужна ли реиндексация после обновления конфигурации?
Обычно нет: при реструктуризации платформа сама пересоздаёт индексы изменённых таблиц. Для остальных таблиц на сервере СУБД полезно обновить статистику.