Какой SQL Server установить вместо устаревшего SQL Server 2012 для баз данных 1С?

Системный администратор 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация IT и автоматизация бизнеса
← На главную

Переход на новое серверное оборудование — это отличный повод пересмотреть архитектуру всей системы и обновить программное обеспечение. Если ваша система автоматизации 1С длительное время работала под управлением СУБД MS SQL Server 2012, то при переезде на новое «железо» неизбежно возникнет дилемма: остаться на проверенной временем версии или установить более современный релиз. С момента выпуска версии 2012 года корпорация Microsoft выпустила целый ряд обновлений СУБД: SQL Server 2014, 2016, 2019 и 2022. Разберем по шагам, какую версию выбрать, какие технические нюансы необходимо учесть и как правильно настроить современную СУБД для обеспечения максимального быстродействия платформы 1С:Предприятие.

Миф о «плохой производительности» новых версий и особенности оптимизатора запросов

В кругах администраторов баз данных часто можно услышать мнение, что старые версии СУБД (такие как SQL Server 2008 R2 или 2012) работают быстрее и стабильнее новых решений, а переход, например, на SQL Server 2014 приводил к резкому падению производительности. Давайте проанализируем, почему возникал такой эффект и как обстоят дела на самом деле.

Начиная с версии SQL Server 2014, Microsoft внедрила принципиально новый алгоритм оценки кардинальности — Cardinality Estimator (CE). Этот компонент отвечает за оценку количества строк, которые будут возвращены каждым оператором в плане выполнения запроса. Новый оптимизатор отлично показывает себя в аналитических системах (OLAP) со сложными многомерными выборками. Однако для транзакционных нагрузок (OLTP), к которым относится и 1С, новый алгоритм часто строит неоптимальные планы выполнения из-за специфической структуры метаданных и обилия временных таблиц.

В результате сложные запросы 1С (например, при проведении документов или расчете себестоимости в 1С:Комплексная автоматизация) начинали выполняться в разы медленнее. Решается эта проблема очень просто. При переходе на современные версии SQL Server (2016, 2019 или 2022) мы можем использовать все системные преимущества новой СУБД, но при этом принудительно заставить оптимизатор использовать старый, проверенный и стабильный алгоритм оценки для базы данных 1С. Для этого в свойствах базы данных необходимо включить параметр Legacy Cardinality Estimator или использовать глобальный флаг трассировки 9481.

Технологический прорыв в SQL Server 2016: почему стоит уходить с версии 2012

Если версия 2012 года требовала от системного администратора ручной настройки множества параметров и флагов трассировки для оптимизации работы с временными таблицами, то в SQL Server 2016 ключевые механизмы были переработаны на уровне ядра СУБД. Рассмотрим подробнее, какие улучшения критически важны для систем на платформе 1С:

  1. Оптимизация работы системной базы данных TempDB: Платформа 1С:Предприятие сверхактивно использует временные таблицы для выполнения практически всех видов запросов и расчетов. В SQL Server 2016 внесены кардинальные изменения в логику работы tempdb:
    • Кэширование временных объектов: Запросы, которые постоянно создают и уничтожают временные таблицы, выполняются быстрее за счет кэширования метаданных и уменьшения нагрузки на системные каталоги.
    • Автоматическое выравнивание файлов: Теперь приращение файлов базы данных tempdb происходит одновременно для всех файлов (опция AUTOGROW_ALL_FILES активна по умолчанию). Больше нет необходимости вручную прописывать флаг трассировки 1117. Это предотвращает дисбаланс в распределении данных по файлам на диске.
    • Выделение страниц экстентами: Все временные объекты создаются сразу в виде однородных экстентов (блоков по 8 страниц, суммарно 64 Кб). Это снижает нагрузку на распределение дискового пространства и исключает необходимость ручного включения флага трассировки 1118.
    • Снижение нагрузки на журнал транзакций: Оптимизировано количество операций ввода-вывода (I/O) при фиксации изменений во временных таблицах.
  2. Сжатие данных в редакции Standard: В SQL Server 2012 функция компрессии таблиц и индексов (Page/Row Compression) была доступна исключительно в дорогостоящей редакции Enterprise. Начиная с SQL Server 2016 Service Pack 1, эта технология стала доступна и в редакции Standard. Для баз данных 1С сжатие позволяет не только сократить занимаемое место на SSD-накопителях в 2–3 раза, но и существенно ускорить чтение данных из дисковой подсистемы в оперативную память за счет меньшего объема считываемых блоков.

Преимущества SQL Server 2019 и SQL Server 2022 для высоконагруженных систем 1С

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

Query Store (Хранилище запросов): Данная технология появилась в SQL 2016, а в SQL Server 2022 она активирована по умолчанию для всех новых баз данных. Для администратора 1С это незаменимый инструмент. Он позволяет записывать историю выполнения всех запросов, фиксировать время их работы и потребление ресурсов. Если после обновления конфигурации или платформы какой-то отчет внезапно начал тормозить, с помощью Query Store мы можем в пару кликов увидеть регрессию плана выполнения и принудительно зафиксировать старый («быстрый») план без изменения программного кода 1С.

Оптимизация чувствительных к параметрам планов (PSP - Parameter Sensitive Plan): В SQL Server 2022 была решена классическая проблема под названием Parameter Sniffing (параметрическая чувствительность). Суть проблемы заключается в том, что СУБД строит план выполнения запроса на основе первого переданного параметра. Если первый пользователь сформировал отчет по небольшой организации, СУБД построит быстрый план с использованием поиска по индексам. Если затем второй пользователь запустит этот же отчет по огромному холдингу, СУБД применит тот же кэшированный план, что приведет к катастрофическому зависанию сервера. Технология PSP в SQL Server 2022 умеет кэшировать несколько различных планов для одного и того же запроса, автоматически выбирая оптимальный в зависимости от объема передаваемых данных.

Memory-Optimized TempDB Metadata: В версиях 2019 и 2022 появилась возможность перенести метаданные системной базы tempdb в оперативную память (In-Memory OLTP). Это полностью решает проблему задержек (latch contention) на системных страницах распределения пространства при одновременной работе сотен активных сессий пользователей 1С.

Критически важный нюанс: отказ от SQL Server Native Client

Планируя переход на самую современную версию SQL Server 2022, необходимо учитывать важное архитектурное изменение. Корпорация Microsoft полностью исключила компонент SQL Server Native Client (SNAC) из состава дистрибутива СУБД и среды администрирования SSMS 19.

Традиционно сервер приложений 1С:Предприятия использовал именно Native Client для подключения к СУБД, если они физически находились на разных серверах. При установке SQL Server 2022 на чистую операционную систему подключить базу 1С привычным способом не удастся — платформа выдаст ошибку отсутствия провайдера данных. Чтобы решить эту проблему, выполним следующие шаги:

Практическое руководство по настройке новой СУБД под 1С

Давайте разберем по шагам, какие настройки СУБД необходимо выполнить сразу после переноса базы данных 1С на новую версию SQL Server (например, 2019 или 2022), чтобы избежать падения производительности.

Шаг 1. Настройка параметров базы данных

После восстановления базы данных из резервной копии на новом сервере обязательно обновим уровень совместимости и настроим параметры оптимизатора. Выполним следующий скрипт в среде SQL Server Management Studio (SSMS):


-- Устанавливаем уровень совместимости (например, 150 для SQL Server 2019)
ALTER DATABASE [Имя_Вашей_Базы_1С] 
SET COMPATIBILITY_LEVEL = 150;
GO

-- Включаем устаревший оптимизатор оценки кардинальности для стабильной работы 1С
ALTER DATABASE SCOPED CONFIGURATION 
SET LEGACY_CARDINALITY_ESTIMATOR = ON;
GO

-- Включаем автоматическое обновление статистик асинхронно
ALTER DATABASE [Имя_Вашей_Базы_1С] 
SET AUTO_UPDATE_STATISTICS_ASYNC ON;
GO

Шаг 2. Ограничение выделения оперативной памяти

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

Проанализируем доступные ресурсы сервера и ограничим параметр Max Server Memory. Расчет выполним по следующей формуле:

[Максимальный объем памяти для SQL] = [Всего RAM на сервере] - [4 ГБ для ОС] - [1.5 ГБ * Количество рабочих процессов rphost]

Для настройки лимита выполним системный запрос:


EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXEC sp_configure 'max server memory (MB)', 49152; -- Например, ограничим 48 ГБ
RECONFIGURE;
GO

Шаг 3. Оптимизация рабочих потоков (Max Worker Threads)

По умолчанию значение этого параметра равно 0 (автоматический выбор), что на практике часто ограничивает СУБД диапазоном в 255–512 потоков. При интенсивной многопользовательской работе в 1С:Комплексная автоматизация этого объема может не хватать, что приводит к ожиданиям на стороне SQL Server. Опытным путем доказано, что установка фиксированного значения в 2048 рабочих потоков гарантирует стабильную параллельную обработку запросов пользователей без лишних задержек:


EXEC sp_configure 'max worker threads', 2048;
RECONFIGURE;
GO

Альтернативный взгляд: когда стоит рассмотреть PostgreSQL?

Обсуждая замену устаревшего SQL Server 2012, нельзя обойти стороной современные тенденции импортозамещения и оптимизации затрат на лицензирование. Свободно распространяемая СУБД PostgreSQL (а именно ее специализированные сборки под 1С, такие как Postgres Pro) сделала колоссальный шаг вперед в плане производительности.

На сегодняшний день при использовании современных быстрых NVMe SSD-накопителей и правильной тонкой настройке параметров конфигурационного файла postgresql.conf (таких параметров, как shared_buffers, work_mem, maintenance_work_mem и effective_cache_size) СУБД PostgreSQL обеспечивает производительность операций в 1С, практически не уступающую коммерческим продуктам от Microsoft. Это делает ее отличным выбором для средних и крупных внедрений 1С, позволяя значительно сэкономить на лицензиях SQL Server Enterprise.

Резюме и рекомендации

Подводя итог нашему анализу, сформулируем ключевые рекомендации для успешного перехода с SQL Server 2012 на новое серверное оборудование:

  1. Оптимальный выбор версии: Рекомендуется устанавливать SQL Server 2019 или 2022. Это обеспечит максимальный запас по времени поддержки СУБД со стороны Microsoft и даст доступ к новейшим технологиям оптимизации производительности (Query Store, PSP).
  2. Редакция Standard вместо Enterprise: Начиная с версии 2016 SP1, редакция Standard поддерживает сжатие таблиц и индексов. Для большинства баз 1С среднего размера возможностей редакции Standard будет вполне достаточно, что позволит сэкономить бюджет.
  3. Обязательная адаптация настроек: При переходе на новые версии обязательно переведите базу данных в актуальный режим совместимости, но принудительно включите параметр LEGACY_CARDINALITY_ESTIMATOR = ON.
  4. Установка драйверов: В случае выбора SQL Server 2022 не забудьте отдельно установить на сервер 1С драйвер MSOLEDBSQL.
← На главную