К статье
Практический материал

Администрирование · 11 мин

Реиндексация таблиц информационной базы 1С: что это и как её выполнить

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

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

Процедура выполняется штатными средствами: через режим «Тестирование и исправление» в конфигураторе или средствами СУБД для клиент-серверных баз. Она не изменяет сами данные — перестраиваются только индексные структуры, поэтому при корректном выполнении информация в базе остаётся нетронутой.

На практике реиндексацию применяют как часть регламентного обслуживания и как один из первых шагов при падении производительности: медленном открытии списков, долгом проведении документов, зависании отчётов. Однако это не универсальное лекарство — если проблема в запросах, железе или блокировках, перестроение индексов эффекта не даст.

Что такое индексы и зачем их перестраивать

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

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

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

Когда реиндексация действительно нужна

Признак того, что индексы деградировали, — постепенное, а не внезапное замедление типовых операций. Если списки документов, отчёты и подборы в справочниках «плывут» неделями при росте объёма данных, фрагментация индексов — вероятная причина. Резкое же замедление чаще указывает на блокировки, нехватку ресурсов сервера или проблемный запрос.

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

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

Маршрут решения

Как выбрать действие

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

Как выполнить реиндексацию файловой базы через конфигуратор

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

Перед запуском сделайте резервную копию — для файловой базы достаточно скопировать файл 1Cv8.1CD или выгрузить базу в dt. Хотя реиндексация не трогает данные, любая длительная операция с файлом базы при сбое питания или обрыве диска может повредить его структуру.

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

Время выполнения зависит от размера базы и скорости диска: небольшая база обрабатывается за минуты, объёмная — может занять часы. Прерывать процесс нельзя — это риск оставить таблицы в несогласованном состоянии, поэтому запуск планируют на ночь или выходные.

Реиндексация в клиент-серверном варианте

В клиент-серверной архитектуре таблицы хранятся в СУБД — MS SQL Server, PostgreSQL, Oracle или IBM DB2, — и перестроение индексов выполняется её средствами. Режим «Тестирование и исправление» для серверных баз имеет ограничения, и реиндексацию обычно переносят на уровень СУБД, где она выполняется быстрее и гибче.

В MS SQL Server применяют команды ALTER INDEX ... REBUILD или план обслуживания (Maintenance Plan) с задачей перестроения индексов. В PostgreSQL — команду REINDEX. Перестроение можно совмещать с обновлением статистики: в MS SQL это UPDATE STATISTICS, в PostgreSQL — ANALYZE. Индексы и актуальная статистика вместе дают основной эффект для скорости запросов.

sql
ALTER INDEX ALL ON _Document123 REBUILD;

Важное отличие от файлового варианта: в ряде случаев перестроение индексов в СУБД можно выполнять без полного выгона пользователей (например, ONLINE-перестроение в соответствующих редакциях MS SQL Server), но нагрузка на дисковую подсистему в этот момент высокая, поэтому регламент всё равно планируют на период минимальной активности.

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

Эти процедуры часто путают, потому что они находятся рядом в окне «Тестирование и исправление». Реиндексация перестраивает только индексы. Реструктуризация — пересоздаёт сами таблицы при изменении структуры метаданных (добавлении реквизитов, изменении типов) и выполняется при обновлении конфигурации базы данных.

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

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

Риски, ограничения и типичные ошибки

Главный риск — прерывание процедуры на файловой базе. Отключение питания, перезагрузка сервера или принудительное закрытие конфигуратора в середине тестирования может повредить файл 1Cv8.1CD, и тогда потребуется восстановление из копии или утилита chdbfl.exe. Именно поэтому резервная копия перед запуском — обязательный, а не рекомендуемый шаг.

Второе ограничение — монопольный доступ. В файловом варианте реиндексация невозможна, пока хоть один сеанс подключён к базе, включая фоновые задания и зависшие процессы. На практике «зависшие» сеансы ищут через консоль кластера (для серверных) или перезапуск службы агента/проверку открытых файлов (для файловых).

Типичные ошибки
01
Запуск без резервной копии — при сбое восстанавливать будет нечего
02
Ожидание, что реиндексация исправит «битые» ссылки и ошибки данных — для этого есть другие проверки
03
Выполнение в рабочее время на серверной базе — дисковая нагрузка замедлит работу всех пользователей
04
Игнорирование обновления статистики в СУБД — эффект от новых индексов будет неполным
05
Прерывание процесса по таймауту — риск повреждения файловой базы

Как проверить результат после реиндексации

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

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

Контрольные точки

Как проверить результат

Протокол тестирования и исправления
Норма

Нет сообщений об ошибках, процедура завершена штатно

Тревожный признак

Ошибки в протоколе или аварийное завершение

Скорость открытия списков и отчётов
Норма

Заметное ускорение по сравнению с замерами до процедуры

Тревожный признак

Скорость не изменилась — искать причину в другом

Работа пользователей после запуска
Норма

Типовые операции выполняются без зависаний

Тревожный признак

Появились новые ошибки или сообщения о повреждении данных

Часто задаваемые вопросы

Удаляет ли реиндексация данные из базы?

Нет. Процедура перестраивает только индексы — служебные структуры для быстрого поиска. Сами записи справочников, документов и регистров не изменяются. Тем не менее резервная копия обязательна, потому что аварийное прерывание может повредить файл базы целиком.

Как часто нужно делать реиндексацию?

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

Можно ли выполнить реиндексацию, пока пользователи работают?

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

Чем реиндексация отличается от обновления статистики?

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

Реиндексация не помогла — что делать дальше?

Значит, причина медленной работы в другом. Следующие шаги: проанализировать планы медленных запросов, проверить наличие блокировок и взаимоблокировок, оценить ресурсы сервера (диск, память, процессор), а также настройки СУБД и конфигурацию самой базы.

Что делать, если тестирование и исправление прервалось с ошибкой?

Не запускайте базу в рабочем режиме. Восстановите файл базы из резервной копии, сделанной перед процедурой. Если копии нет, для файловой базы можно попробовать утилиту chdbfl.exe из каталога установки платформы, но её результат не гарантирован — после восстановления базу нужно тщательно проверить.

Итог

Что важно запомнить

Реиндексация — это перестроение индексов без изменения данных, средство борьбы с постепенным замедлением базы. Выполняйте её через «Тестирование и исправление» для файловых баз и средствами СУБД для серверных, всегда с резервной копией, в нерабочее время и с проверкой протокола после завершения.