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

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

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

Как почистить индексы в 1С: тестирование и исправление, реиндексация таблиц, chdbfl для файловых баз, регламент в SQL. Порядок действий, риски и проверка результата.

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

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

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

Как понять, что проблема именно в индексах

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

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

Записи не видны в списках, но находятся поискомТипичный признак повреждённого индекса

Проверить реиндексацией в тестовом режиме

Ошибка формата потока при открытииПовреждение файла базы или индексных страниц

Проверить chdbfl.exe и копию базы

Отчёты дают разные итогиВозможны битые ссылки или рассинхронизация итогов

Тестирование: ссылки, итоги, индексы

База медленно растёт и тормозитФрагментация индексов после массовых операций

Плановая реиндексация и дефрагментация

Подготовка: копия, монопольный доступ и диск

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

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

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

Реиндексация через «Тестирование и исправление»

Штатный способ почистить и перестроить индексы — обработка «Тестирование и исправление информационной базы». Откройте конфигуратор, войдите в базу с правами администратора, затем выберите «Администрирование → Тестирование и исправление». В списке проверок отметьте пункт «Реиндексация таблиц информационной базы».

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

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

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

Восстановление индексов файловой базы утилитой chdbfl

Если файловая база не открывается или падает с ошибкой формата потока, конфигуратор может оказаться недоступен — тогда используют утилиту chdbfl.exe. Она входит в состав платформы и лежит в каталоге bin установленной версии, рядом с исполняемыми файлами 1С.

Запустите chdbfl.exe, укажите путь к файлу 1Cv8.1CD, поставьте флажок «Исправлять обнаруженные ошибки» и нажмите «Исполнить». Утилита проверяет физическую целостность файла, включая индексные страницы, и исправляет повреждения на низком уровне. Работает она только с файловыми базами и только при закрытых сеансах.

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

Чистка индексов в клиент-серверной базе

В клиент-серверном варианте «Тестирование и исправление» тоже работает и выполняет реиндексацию через механизмы платформы, но при больших объёмах эффективнее обслуживать индексы напрямую средствами СУБД. В MS SQL Server это перестроение (REBUILD) или реорганизация (REORGANIZE) индексов по степени фрагментации, в PostgreSQL — команды REINDEX и VACUUM.

Ориентировочная логика выбора: при фрагментации индекса до примерно 10–30% достаточно реорганизации, при более высокой — полного перестроения. Точные пороги подбираются под нагрузку конкретной базы. Для регулярного обслуживания настраивают план обслуживания (maintenance plan) или скрипт по расписанию — это предотвращает деградацию производительности, а не устраняет её постфактум.

Дополнительно в СУБД обновляют статистику — без актуальной статистики оптимизатор запросов выбирает неэффективные планы даже при исправных индексах. В MS SQL это UPDATE STATISTICS или задание обновления статистики в плане обслуживания, в PostgreSQL — ANALYZE. Эти операции безопаснее реиндексации и выполняются быстрее.

Сравнение способов чистки индексов

Тестирование и исправление

Универсальный штатный способ для файловых и клиент-серверных баз. Требует монопольного доступа, на больших базах работает долго.

Chdbfl.exe

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

Средства СУБД (REBUILD, REINDEX)

Для клиент-серверных баз, самый быстрый вариант при больших объёмах. Требует навыков администрирования СУБД и аккуратности с блокировками.

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

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

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

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

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

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

Ошибок не обнаружено или все исправлены

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

Повторяющиеся ошибки после исправления

Списки документов
Норма

Все записи видны, отборы работают

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

Записи по-прежнему скрыты

Отчёты и итоги
Норма

Итоги сходятся при повторном формировании

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

Цифры меняются от запуска к запуску

Скорость работы
Норма

Операции выполняются за привычное время

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

Тормоза сохраняются — искать причину в СУБД или железе

Типичные ошибки и ограничения

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

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

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

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

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

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

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

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

Реиндексация удалит какие-то данные?

Нет, перестроение индексов не затрагивает сами данные — только служебные структуры поиска. Однако режим «Тестирование и исправление» с включённой проверкой ссылочной целостности может создавать объекты-заглушки или очищать битые ссылки, поэтому изучайте протокол и заранее решите, как обрабатывать такие случаи.

База не открывается даже в конфигураторе. Что делать?

Для файловой базы запустите chdbfl.exe с флажком исправления ошибок, затем повторите попытку входа. Если утилита не помогла или сообщила о неустранимых ошибках, восстанавливайте базу из последней резервной копии. Для клиент-серверной базы проверяйте целостность средствами СУБД (например, DBCC CHECKDB в MS SQL).

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

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

Можно ли чистить индексы без конфигуратора?

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

После реиндексации база всё равно тормозит. В чём причина?

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