При эксплуатации систем на базе 1С:Предприятие 7.7 в современных инфраструктурах (например, на Windows Server 2016) перед системными администраторами и разработчиками встает сложный выбор. С одной стороны, штатная поддержка платформы 7.7 ограничена устаревшими версиями СУБД, с другой — современные версии MSSQL (2014, 2016, 2017) предлагают значительно более совершенные инструменты управления памятью, планировщики запросов и средства мониторинга. Рассмотрим подробно, как правильно выбрать версию MSSQL, обеспечить производительность для большого количества пользователей и решить типичные проблемы совместимости.
Одной из главных опасений при переходе на новую версию MSSQL является невозможность вернуться на предыдущую версию, если что-то пойдет не так. Действительно, файлы базы данных (MDF/LDF) не имеют обратной совместимости: базу, прикрепленную к MSSQL 2017, нельзя просто «отцепить» и подключить к MSSQL 2012.
Однако в контексте 1С 7.7 мы всегда имеем универсальный механизм миграции. Разберем этот процесс по шагам:
Администрирование — Выгрузить данные. Система создаст платформонезависимый файл с расширением .dat.Загрузить данные.Поскольку структура таблиц при такой загрузке формируется самой платформой 1С заново, формат хранения данных в SQL-сервере не является препятствием. Это позволяет тестировать различные версии СУБД без риска безвозвратной порчи данных.
Проанализируем производительность и стабильность различных версий в связке с «клюшками» (1С 7.7):
Начиная с версии SQL Server 2014, компания Microsoft внедрила новый механизм оценки кардинальности (Cardinality Estimator). Для старых запросов 1С 7.7, которые не проектировались под эти алгоритмы, это часто оборачивается катастрофическим падением производительности. Проанализируем ситуацию: запрос, который раньше выполнялся за доли секунды, может начать строить неоптимальный план и «вешать» сервер.
Чтобы решить эту проблему на современных версиях SQL (2016/2017), выполним следующие действия:
Compatibility Level) в значение 110 (соответствует SQL Server 2012).9481 на уровне сервера или конкретной базы. Это заставит оптимизатор использовать старую модель оценки (Legacy Cardinality Estimation).Для 60 и более пользователей 1С 7.7 критически важна правильная настройка параллелизма. В новых версиях MSSQL сервер пытается распараллелить выполнение даже простых запросов, что в 1С 7.7 часто приводит к взаимоблокировкам (deadlocks).
Рекомендуется установить параметр Max Degree of Parallelism (MAXDOP) в значение 1. Это гарантирует, что каждый отдельный запрос будет выполняться одним процессорным ядром, что устраняет риск конфликтов при ожидании ресурсов внутри одного запроса. В некоторых случаях на мощном железе можно протестировать значение 2, но начинать следует строго с 1.
Если ваша конфигурация активно использует внешнюю компоненту 1C++, переход на современные версии MSSQL дает дополнительные преимущества. Мы можем использовать расширенный синтаксис T-SQL в прямых запросах:
При установке 1С 7.7 на Windows Server 2016 вы обязательно столкнетесь с ошибкой проверки кодировки. Это происходит из-за того, что современные ОС используют иные таблицы сравнения строк.
Вместо того чтобы менять настройки системной локали (что может негативно сказаться на другом ПО), используем один из проверенных методов:
bkend.dll (так называемый «патч для SQL»).dbasetmp в каталоге базы данных (в некоторых сборках это отключает проверку).OrdNoChk.res, которая на лету подменяет результаты проверки кодировки.На Windows Server 2016 современные версии SQL Server (2016/2017) при установке автоматически конфигурируют несколько файлов базы TempDB в соответствии с количеством ядер процессора. Для 1С 7.7, которая активно создает временные таблицы в процессе проведения документов, это дает ощутимый прирост скорости. На старых версиях SQL (2008/2012) нам приходилось настраивать это вручную, разделяя TempDB на несколько файлов для уменьшения конкуренции за страницы ресурсов (latch contention).
Если вы уже развернули систему на MSSQL 2017 и она работает стабильно, нет никакого смысла откатываться на 2012-ю версию. Современные версии СУБД лучше работают с оперативной памятью и многоядерными системами NUMA, что критично для 60 пользователей. Главное — убедиться, что вы:
Compatibility Level 110 или флаг трассировки 9481.MAXDOP значением 1.Таким образом, гонка за новыми версиями MSSQL для 1С 7.7 оправдана не столько скоростью выполнения штатных запросов, сколько стабильностью всей платформы на современном оборудовании и возможностями глубокой аналитики через прямые запросы 1C++.