Какую версию MSSQL выбрать для работы 1С 7.7 на Windows Server 2016 и как обеспечить стабильность системы

Системный администратор 1С v7.7 Промышленность, строительство и АПК
← На главную

При эксплуатации систем на базе 1С:Предприятие 7.7 в современных инфраструктурах (например, на Windows Server 2016) перед системными администраторами и разработчиками встает сложный выбор. С одной стороны, штатная поддержка платформы 7.7 ограничена устаревшими версиями СУБД, с другой — современные версии MSSQL (2014, 2016, 2017) предлагают значительно более совершенные инструменты управления памятью, планировщики запросов и средства мониторинга. Рассмотрим подробно, как правильно выбрать версию MSSQL, обеспечить производительность для большого количества пользователей и решить типичные проблемы совместимости.

Миграция и возможность отката: развеиваем мифы

Одной из главных опасений при переходе на новую версию MSSQL является невозможность вернуться на предыдущую версию, если что-то пойдет не так. Действительно, файлы базы данных (MDF/LDF) не имеют обратной совместимости: базу, прикрепленную к MSSQL 2017, нельзя просто «отцепить» и подключить к MSSQL 2012.

Однако в контексте 1С 7.7 мы всегда имеем универсальный механизм миграции. Разберем этот процесс по шагам:

  1. Запустите 1С в режиме Конфигуратор.
  2. Используйте пункт меню Администрирование — Выгрузить данные. Система создаст платформонезависимый файл с расширением .dat.
  3. На новом сервере с любой версией MSSQL (будь то 2012 или 2017) создайте пустую базу и выполните Загрузить данные.

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

Выбор версии: от MSSQL 2008 до 2017

Проанализируем производительность и стабильность различных версий в связке с «клюшками» (1С 7.7):

Оптимизация производительности: Cardinality Estimator

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

Чтобы решить эту проблему на современных версиях SQL (2016/2017), выполним следующие действия:

  1. Установим уровень совместимости базы данных (Compatibility Level) в значение 110 (соответствует SQL Server 2012).
  2. Если уровень совместимости менять нежелательно, включим флаг трассировки 9481 на уровне сервера или конкретной базы. Это заставит оптимизатор использовать старую модель оценки (Legacy Cardinality Estimation).

Настройка параллелизма (MAXDOP)

Для 60 и более пользователей 1С 7.7 критически важна правильная настройка параллелизма. В новых версиях MSSQL сервер пытается распараллелить выполнение даже простых запросов, что в 1С 7.7 часто приводит к взаимоблокировкам (deadlocks).

Рекомендуется установить параметр Max Degree of Parallelism (MAXDOP) в значение 1. Это гарантирует, что каждый отдельный запрос будет выполняться одним процессорным ядром, что устраняет риск конфликтов при ожидании ресурсов внутри одного запроса. В некоторых случаях на мощном железе можно протестировать значение 2, но начинать следует строго с 1.

Использование 1C++ и прямых запросов

Если ваша конфигурация активно использует внешнюю компоненту 1C++, переход на современные версии MSSQL дает дополнительные преимущества. Мы можем использовать расширенный синтаксис T-SQL в прямых запросах:

Решение проблемы «Порядок сортировки отличается от системного»

При установке 1С 7.7 на Windows Server 2016 вы обязательно столкнетесь с ошибкой проверки кодировки. Это происходит из-за того, что современные ОС используют иные таблицы сравнения строк.

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

  1. Применение модифицированной библиотеки bkend.dll (так называемый «патч для SQL»).
  2. Создание пустого файла с именем dbasetmp в каталоге базы данных (в некоторых сборках это отключает проверку).
  3. Использование библиотеки-перехватчика OrdNoChk.res, которая на лету подменяет результаты проверки кодировки.

Работа с памятью и TempDB

На Windows Server 2016 современные версии SQL Server (2016/2017) при установке автоматически конфигурируют несколько файлов базы TempDB в соответствии с количеством ядер процессора. Для 1С 7.7, которая активно создает временные таблицы в процессе проведения документов, это дает ощутимый прирост скорости. На старых версиях SQL (2008/2012) нам приходилось настраивать это вручную, разделяя TempDB на несколько файлов для уменьшения конкуренции за страницы ресурсов (latch contention).

Резюме по выбору

Если вы уже развернули систему на MSSQL 2017 и она работает стабильно, нет никакого смысла откатываться на 2012-ю версию. Современные версии СУБД лучше работают с оперативной памятью и многоядерными системами NUMA, что критично для 60 пользователей. Главное — убедиться, что вы:

  1. Используете Compatibility Level 110 или флаг трассировки 9481.
  2. Ограничили MAXDOP значением 1.
  3. Обновили SQL Native Client на рабочих станциях или терминальном сервере для корректной поддержки протоколов безопасности Windows 2016.

Таким образом, гонка за новыми версиями MSSQL для 1С 7.7 оправдана не столько скоростью выполнения штатных запросов, сколько стабильностью всей платформы на современном оборудовании и возможностями глубокой аналитики через прямые запросы 1C++.

← На главную