Переезд старых систем, таких как 1С:Предприятие 7.7, на современное серверное оборудование и новые версии систем управления базами данных часто преподносит неприятные сюрпризы. Казалось бы, мощный многоядерный процессор, огромный объем оперативной памяти и быстрые SSD должны ускорить работу в разы. Однако на практике пользователи часто сталкиваются с обратным эффектом: расчет итогов или формирование регламентированных отчетов, которые раньше занимали секунды, начинают длиться десятки минут. Рассмотрим подробнее, почему это происходит и как вернуть системе былую скорость.
Первым делом проанализируем ситуацию с точки зрения "железа". Современные серверные процессоры (например, Xeon Gold) обладают агрессивными технологиями энергосбережения. В режиме простоя или при выполнении коротких однопоточных операций, характерных для 1С 7.7, процессор может снижать тактовую частоту или "парковать" ядра.
Для решения этой проблемы разберем по шагам необходимые действия в BIOS сервера:
После внесения изменений в BIOS обязательно проверим настройки в самой операционной системе Windows Server. План электропитания должен быть строго установлен в значение «Высокая производительность» (High Performance). Это критически важно, так как 1С 7.7 крайне чувствительна к латентности (задержкам) переключения частот процессора.
Выясним причину замедления на уровне СУБД. Одной из главных проблем при работе 1С 7.7 с SQL Server версии 2005 и выше является механизм параллельного выполнения запросов. Старый движок 7.7 генерирует множество мелких, последовательных запросов. SQL Server 2008, видя свободные ресурсы многоядерного сервера, пытается распараллелить эти запросы между ядрами.
Проблема в том, что накладные расходы на координацию потоков (Thread Management) превышают время выполнения самого запроса. В итоге система "захлебывается" в ожидании. Для исправления ситуации выполним следующую настройку:
Это заставит SQL Server обрабатывать каждый конкретный запрос в рамках одного потока, что является оптимальным для архитектуры "семерки".
Проанализируем конфигурацию дискового контроллера. В рассматриваемом случае используется Dell PERC H330. Важно понимать, что это контроллер начального уровня без собственного кэша (Non-Cache). В отличие от старших моделей (H730/H740), он не может эффективно буферизировать операции записи.
Для баз данных 1С это "узкое место", особенно для TempDB и логов транзакций. Если замена контроллера на модель с кэшем невозможна, попробуем минимизировать негативный эффект:
TempDB на разные физические диски или логические разделы, если это позволяют SSD.Для повышения стабильности и скорости работы со специфическими запросами 1С 7.7 рекомендуется включить глобальные флаги трассировки SQL Server. Разберем наиболее эффективные из них:
TempDB. Это крайне полезно, когда 1С активно создает временные таблицы при расчете бухгалтерских итогов.Чтобы включить эти флаги, их нужно добавить в параметры запуска службы SQL Server в SQL Server Configuration Manager в формате -T1118 -T4199.
При миграции на новую версию SQL Server уровень совместимости (Compatibility Level) часто оставляют равным 80 (SQL 2000). Однако оптимизатор SQL Server 2008 все равно работает по-новому. Если статистика распределения данных устарела, сервер может выбирать крайне неэффективные планы запросов.
Рассмотрим процедуру обновления статистики. Рекомендуется выполнить команду актуализации данных по всем таблицам базы:
EXEC sp_updatestats;
Также проанализируем состояние индексов. Для 1С 7.7 регулярная дефрагментация или полная перестройка (Rebuild) индексов является обязательной процедурой. Особое внимание стоит уделить таблицам проводок 1SENTRY и таблицам итогов 1SBKTTL.
Посмотрим на ситуацию с программной точки зрения. Отчет по НДФЛ в типовой бухгалтерии 1С 7.7 построен на циклах, в которых выполняются запросы к итогам и справочникам по каждому сотруднику. Это классический пример "пинг-понга" между приложением и сервером БД.
На современных ОС и версиях SQL Server время отклика на один такой запрос увеличивается из-за механизмов безопасности и сетевого стека. Чтобы это обойти, системные администраторы часто используют модифицированные библиотеки BkEnd.dll (например, патчи от Romix или аналоги). Эти модификации позволяют платформе 7.7 корректно "общаться" с новыми версиями SQL Server, обходя проверки, которые вызывают задержки. Без такого патча работа "семерки" на SQL 2008 в принципе может быть нестабильной.
Если 1С и SQL Server установлены на одном сервере, проанализируем способ их взаимодействия. Самым быстрым протоколом в этом случае является Shared Memory.
Резюме: Решение проблемы "тормозов" 1С 7.7 на новом оборудовании всегда носит комплексный характер. Сочетание отключения энергосбережения, настройки MAXDOP=1, актуализации статистики и правильной настройки дискового кэша позволяет вернуть производительность системы к приемлемым значениям, сопоставимым с работой на старом SQL 2000.