Регламентные задания СУБД для 1С: дефрагментация индексов и обновление статистик
- Внезапная деградация скорости выполнения запросов, ранее работавших быстро («развал» плана выполнения).
- Оптимизатор СУБД выбирает Index Scan / Table Scan вместо Index Seek.
- Высокий уровень фрагментации индексов (более 30-50%) в таблицах движений регистров.
- Неактуальные гистограммы распределения данных в системных каталогах.
1. Скрипт обслуживания индексов для MS SQL Server (Ola Hallengren)
Настройте еженедельное обслуживание индексов с дифференцированным подходом по уровню фрагментации:
-- Реорганизация при фрагментации от 10% до 30%, Перестроение при > 30%
EXECUTE dbo.IndexOptimize
@Databases = 'USER_DATABASES',
@FragmentationLow = NULL,
@FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 10,
@FragmentationLevel2 = 30,
@SortInTempdb = 'Y';2. Ежедневное обновление статистик с полным сканированием (FULLSCAN)
Для 1С критически важно обновлять статистики с параметром FULLSCAN, так как выборка по умолчанию (sample) искажает распределение на неравномерных таблицах итогов:
EXECUTE dbo.IndexOptimize
@Databases = 'USER_DATABASES',
@UpdateStatistics = 'ALL',
@OnlyModifiedStatistics = 'Y',
@StatisticsSample = 100;3. Обслуживание для PostgreSQL под 1С
Настройте ночные регламенты вакуумирования и сбора статистик через cron:
#!/bin/bash
# Обновление статистики всех баз 1С
vacuumdb -U postgres -d ib_production --analyze-in-stages
# Полная переиндексация критических таблиц при необходимости
psql -U postgres -d ib_production -c "REINDEX DATABASE CONCURRENTLY ib_production;" Частые вопросы (FAQ)
Почему стандартного Auto Update Statistics в MS SQL Server недостаточно для 1С?
Автоматическое обновление срабатывает только при изменении ~20% строк таблицы. Для миллионных таблиц 1С статистика может не обновляться месяцами, что приводит к неоптимальным планам запросов.
Можно ли выполнять реиндексацию баз 1С в рабочее время?
В редакции MS SQL Enterprise/Developer доступен параметр ONLINE=ON, позволяющий перестраивать большинство индексов без блокировки чтения/записи. Однако для таблиц с полями LOB блокировка все равно возникнет.
Нужно ли очищать процедурный кэш после обновления статистик?
Обновление статистики автоматически инвалидирует связанные скомпилированные планы выполнения, поэтому принудительно выполнять DBCC FREEPROCCACHE не требуется.
Как часто нужно обновлять статистики в базах 1С?
Для высоконагруженных учетных систем (ERP, УТ, КА) обновление модифицированных статистик с FULLSCAN рекомендуется выполнять ежедневно в нерабочие часы.