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

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

Auto Update Statistics Asynchronously в 1С: для чего нужно и как настроить

Зачем включать auto update statistics asynchronously для баз 1С, как работает асинхронное обновление статистики в SQL Server и когда эта настройка ускоряет работу.

При работе 1С на платформе клиент-сервер с СУБД Microsoft SQL Server производительность запросов напрямую зависит от актуальности статистики — служебных данных, по которым оптимизатор строит планы выполнения запросов. Параметр Auto Update Statistics Asynchronously (AUTO_UPDATE_STATISTICS_ASYNC) определяет, как именно сервер обновляет эту статистику: блокируя текущий запрос или делая это в фоновом режиме. Для крупных баз 1С с интенсивной записью правильная настройка этого параметра способна заметно снизить количество «подвисаний» у пользователей.

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

Настройка относится к уровню базы данных в SQL Server и применяется администратором СУБД, а не внутри конфигуратора 1С. В статье разберём, как работает механизм, кому подходит асинхронный режим, как его включить и проверить результат, а также какие ограничения и риски нужно учитывать.

Что такое статистика и зачем она нужна в 1С

Статистика в SQL Server — это объект, содержащий сведения о распределении значений в колонках таблиц и индексов: сколько строк, как часто встречаются те или иные значения, какова плотность данных. На основе этих сведений оптимизатор запросов решает, какой план выполнения выбрать: сканирование таблицы, поиск по индексу, порядок соединений таблиц.

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

SQL Server отслеживает объём изменений и при превышении порога помечает статистику как устаревшую. Дальше срабатывает механизм автообновления — и именно режим его работы (синхронный или асинхронный) определяет, почувствуют ли это пользователи.

Как работает синхронное и асинхронное обновление

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

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

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

Сравнение режимов

Синхронное обновление (по умолчанию)

Запрос ждёт обновления статистики. Подходит для небольших баз, где обновление занимает доли секунды. На больших таблицах даёт заметные паузы.

Асинхронное обновление

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

Ручное регламентное обновление

Статистика обновляется по расписанию (например, ночью) через план обслуживания. Дополняет автообновление, но не заменяет его при интенсивной дневной нагрузке.

Когда асинхронный режим даёт эффект в 1С

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

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

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

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

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

Большая база, интенсивная запись, периодические паузы у пользователей без блокировокВключите AUTO_UPDATE_STATISTICS_ASYNC и наблюдайте за динамикой
Небольшая база, пауз нет, жалобы отсутствуютОставьте синхронный режим, сосредоточьтесь на регламентном обслуживании
Отчёты периодически резко тормозят при неизменной нагрузкеПроверьте актуальность статистики и настройте её регулярное полное обновление
Паузы вызваны блокировками других сеансовПроблема не в статистике — разбирайте блокировки и уровни изоляции

Как включить асинхронное обновление статистики

Настройка выполняется на уровне конкретной базы данных в SQL Server. Сделать это можно двумя способами: через графический интерфейс SQL Server Management Studio (SSMS) или запросом T-SQL. Оба варианта равнозначны.

В SSMS: откройте свойства базы данных, перейдите на вкладку «Параметры» (Options), найдите в группе «Автоматически» (Automatic) пункт «Асинхронное автоматическое обновление статистики» (Auto Update Statistics Asynchronously) и установите значение True. Убедитесь, что параметр «Автоматически обновлять статистику» (Auto Update Statistics) также включён — асинхронный режим работает только вместе с ним.

Через T-SQL настройка выполняется одной командой, которую удобно включить в скрипт регламентного обслуживания или чек-лист развёртывания новой базы:

sql
ALTER DATABASE [ИмяБазы1С] SET AUTO_UPDATE_STATISTICS_ASYNC ON;
ALTER DATABASE [ИмяБазы1С] SET AUTO_UPDATE_STATISTICS ON;
Порядок действий
  1. 1
    Сделайте резервную копию базы или убедитесь, что актуальная копия существует
  2. 2
    Проверьте текущее состояние параметров: SELECT name, is_auto_update_stats_on, is_auto_update_stats_async_on FROM sys.databases
  3. 3
    Включите AUTO_UPDATE_STATISTICS и AUTO_UPDATE_STATISTICS_ASYNC для базы 1С
  4. 4
    Убедитесь, что настроено регламентное полное обновление статистики в нерабочее время
  5. 5
    Наблюдайте за производительностью несколько дней: фиксируйте жалобы на паузы и длительность типовых операций

Изменение параметра вступает в силу сразу, перезапуск сервера или базы не требуется. Тем не менее выполнять настройку лучше в период минимальной нагрузки — это общее правило для любых изменений на продуктивном сервере.

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

Проверить, что параметр включён, можно запросом к системному представлению sys.databases: колонки is_auto_update_stats_on и is_auto_update_stats_async_on должны содержать значение 1 для нужной базы. Это быстрый способ убедиться, что настройка применилась.

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

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

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

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

Значение is_auto_update_stats_async_on в sys.databases
Норма

Равно 1 для базы 1С

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

Равно 0 — настройка не применилась

Дата последнего обновления статистики по крупным таблицам
Норма

Обновление происходит регулярно, по мере накопления изменений

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

Статистика устарела на недели при активной записи

Время выполнения типовых операций
Норма

Стабильное, без редких резких всплесков

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

Периодические многократные замедления без блокировок

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

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

Важно понимать ограничение: фоновое обновление всё равно потребляет ресурсы сервера — процессор и дисковую подсистему. На перегруженном сервере фоновые операции могут конкурировать за ресурсы с пользовательскими запросами. Поэтому асинхронный режим не отменяет необходимости регламентного обновления статистики в нерабочее время с полным сканированием (FULLSCAN) для ключевых таблиц.

Отдельная ошибка — отключать автообновление статистики полностью, рассчитывая только на ручное регламентное обслуживание. При интенсивной дневной записи статистика устаревает за часы, и до ночного обслуживания оптимизатор работает с неадекватными данными. Автообновление и регламентное обслуживание должны дополнять друг друга.

Типичные ошибки
01
Включение асинхронного режима без включённого автообновления статистики — асинхронный режим просто не работает
02
Отключение автообновления в пользу только ночного регламента — днём оптимизатор строит планы на устаревших данных
03
Ожидание эффекта при проблемах другого рода — блокировки и нехватка ресурсов настройкой статистики не лечатся
04
Отсутствие замеров до и после — невозможно объективно оценить, помогла ли настройка
05
Забвение регламентного полного обновления статистики — автообновление использует выборку и не заменяет FULLSCAN

Альтернативы и дополнительные меры

Помимо асинхронного режима, администратору баз 1С стоит держать в арсенале связанные практики. Первая — регулярное обновление статистики по расписанию через задание SQL Server Agent с командой UPDATE STATISTICS или sp_updatestats, для критичных таблиц — с параметром FULLSCAN. Вторая — обслуживание индексов: перестроение или реорганизация по мере фрагментации, что также влияет на качество планов.

Третья мера — мониторинг: технологический журнал 1С с настройкой событий длительных запросов, счётчики производительности SQL Server, динамические административные представления (sys.dm_exec_query_stats, sys.dm_os_wait_stats). Только по данным мониторинга можно отличить проблему статистики от проблемы блокировок или ресурсов.

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

На практике связка «автообновление + асинхронный режим + ночной FULLSCAN по крупным таблицам» закрывает большинство проблем со статистикой в базах 1С. Начинайте с этой комбинации, прежде чем углубляться в тонкую настройку отдельных запросов.
ПЗ
Практическое замечание

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

Нужно ли перезапускать SQL Server после включения асинхронного режима?

Нет, параметр применяется сразу после выполнения команды ALTER DATABASE. Перезапуск службы SQL Server или переподключение базы не требуются. Однако уже скомпилированные планы запросов останутся в кэше и будут перестраиваться постепенно.

Работает ли эта настройка для 1С на PostgreSQL?

Нет, AUTO_UPDATE_STATISTICS_ASYNC — параметр Microsoft SQL Server. В PostgreSQL аналогичную роль играет фоновый процесс autovacuum, который среди прочего собирает статистику (ANALYZE); его поведение настраивается через параметры autovacuum в postgresql.conf, а механика блокировок там иная.

Может ли асинхронный режим ухудшить работу отчётов?

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

Где включать настройку — в конфигураторе 1С или в SQL Server?

Только на стороне SQL Server: через свойства базы данных в Management Studio или командой T-SQL. В конфигураторе и в консоли кластера 1С такой настройки нет, платформа 1С не управляет механизмом статистики СУБД напрямую.

Нужно ли после включения отключать регламентное обновление статистики?

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

Как понять, что паузы связаны именно с обновлением статистики?

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

Итог

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

Auto Update Statistics Asynchronously переводит обновление статистики SQL Server в фоновый режим, убирая паузы у пользователей 1С на больших активно изменяемых базах. Включайте его вместе с автообновлением статистики, сохраняйте регламентное обслуживание и оценивайте эффект по замерам до и после изменения.