Как ускорить работу 1С:Комплексная автоматизация 2.0 для 50 пользователей, если проведение документов занимает часы?

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

Давайте разберем ситуацию, когда работа 1С:Комплексная автоматизация 2.0 становится невыносимо медленной. Представьте: 50 пользователей подключаются по RDP к серверу, на котором одновременно работают SQL Server и сервер 1С. Объем оперативной памяти составляет 100 ГБ, из которых уже занято 97%. Основные жалобы сводятся к очень долгому проведению документов, особенно групповому, а закрытие месяца растягивается на 5 часов. Наша задача — выяснить причины такой низкой производительности и предложить комплексные решения для ускорения работы системы.

Прежде всего, давайте проанализируем основные "узкие места", которые могли привести к такой ситуации. Высокая загрузка оперативной памяти (97% из 100 ГБ) на сервере, где одновременно функционируют SQL Server и сервер 1С, является критическим индикатором проблемы. SQL Server, как известно, любит "выкушать" всю доступную память, если его не ограничить, что оставляет крайне мало ресурсов для сервера 1С и терминальных сессий пользователей.

1. Разделение ролей серверов и распределение памяти

Первостепенным шагом к оптимизации является правильное распределение серверных ролей. Идеальное решение для 50 пользователей — это разделение служб на несколько физических или виртуальных серверов. Мы с вами рассмотрим следующие варианты:

  1. Отдельный сервер баз данных (SQL Server): Выделяем отдельную машину исключительно под SQL Server. Это позволит SQL Server максимально эффективно использовать свои ресурсы (процессор, память, дисковую подсистему), не конкурируя с другими службами.
  2. Отдельный сервер приложений 1С: На отдельном сервере размещаем кластер серверов 1С. Это обеспечит стабильную работу платформы, ее рабочих процессов (rphost), позволяя им эффективно обрабатывать запросы пользователей.
  3. Отдельный терминальный сервер (для RDP): Если использование RDP-подключений является обязательным (что не всегда оптимально для Управляемых форм), выделяем отдельный терминальный сервер. Это распределит нагрузку по обработке графики и сеансов пользователей, разгрузив серверы SQL и 1С.
  4. Сервер для фоновых заданий: При наличии интенсивных фоновых заданий (например, регламентные операции, выполнение отчетов, обмены данными), мы можем выделить для них отдельную рабочую группу или даже отдельный сервер 1С, чтобы не влиять на интерактивную работу пользователей.

Если разделение серверов невозможно, и SQL Server и сервер 1С вынуждены работать на одной машине, нам придется очень тщательно настроить распределение памяти:

  1. Ограничение памяти для SQL Server: Установите строгий лимит для SQL Server, используя параметр max server memory. Общая рекомендация: из общей ОЗУ сервера отнимите 4 ГБ под операционную систему, затем по 1.5 ГБ на каждый активный процесс rphost (сервера 1С), а оставшуюся память выделите SQL Server. Например, из 100 ГБ:
    
    Общая_ОЗУ = 100 ГБ
    ОЗУ_для_ОС = 4 ГБ
    Количество_rphost = [зависит от настроек кластера 1С, например 4-8]
    ОЗУ_для_1С = Количество_rphost * 1.5 ГБ (минимум 6 ГБ, максимум 12 ГБ при 8 rphost)
    ОЗУ_для_SQL = Общая_ОЗУ - ОЗУ_для_ОС - ОЗУ_для_1С
    
    Также установите min server memory для SQL, чтобы предотвратить частый сброс кеша.
  2. Настройки кластера 1С: Ограничьте максимальный объем памяти для рабочих процессов rphost в настройках кластера 1С. Это предотвратит чрезмерное потребление памяти одним или несколькими процессами. Мы также настроим интервал перезапуска рабочих процессов для минимизации фрагментации и утечек памяти.
  3. Потребление памяти RDP-сессиями: Учтите, что один терминальный пользователь может отъесть 3 ГБ оперативной памяти, если откроет всего одно окно 1С:Комплексная автоматизация. При 50 пользователях это уже 150 ГБ только на RDP-сессии, что значительно превышает 100 ГБ вашей оперативной памяти. Это является еще одним аргументом в пользу отдельного терминального сервера или перехода на веб-клиент.

2. Оптимизация дисковой подсистемы

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

  1. Типы дисков: Переход на диски NVMe или SSD является обязательным. Старые HDD диски не способны обеспечить необходимую производительность для 50 пользователей и тяжелой конфигурации.
  2. Аппаратный RAID: Для надежности и производительности используйте аппаратный RAID контроллер. Рекомендуется RAID 10 для данных и журналов транзакций, так как он обеспечивает хороший баланс между скоростью и надежностью.
  3. Разделение дисков: Мы разнесем ключевые компоненты на отдельные физические (или виртуальные) диски:
    • Файлы базы данных 1С: Расположим их на отдельном быстром томе.
    • Журнал транзакций пользовательских баз данных (.ldf): Разместим на отдельном, еще более быстром диске. Для журнала транзакций особенно важна скорость записи.
    • База данных TempDB и ее журнал: Это одна из самых критичных баз данных для SQL Server. Мы выделим для нее отдельный высокопроизводительный диск.
    • Каталог для хранения резервных копий: Расположим на отдельном диске, чтобы операции резервного копирования не замедляли основную работу.
    • Системный диск (ОС и файлы программы SQL/1C): Также должен быть на SSD.
  4. Выравнивание дисков и размер блока: Убедитесь, что диски выровнены по границе 1024 КБ и отформатированы с размером блока 64 КБ (если нет других специфических рекомендаций от производителя).

3. Тонкая настройка SQL Server

После распределения ролей и оптимизации дисковой подсистемы, мы переходим к детальной настройке SQL Server. Это позволит выжать максимум производительности из вашей СУБД:

  1. Обновления SQL Server: Мы убедимся, что установлены последний Service Pack и все накопительные обновления (Cumulative Updates) для вашей версии SQL Server. Обновления часто содержат критические исправления и оптимизации производительности.
  2. Регламентные операции: Регулярное выполнение регламентных операций по обслуживанию баз данных является критически важным. Мы настроим следующие задачи SQL Server Agent:
    • Обновление статистики: Ежедневное или чаще, если база данных активно изменяется. Статистика помогает оптимизатору запросов SQL Server строить эффективные планы выполнения.
    • Реиндексация/реорганизация индексов: Еженедельно или по расписанию, зависящему от степени фрагментации. Это помогает поддерживать производительность индексов на оптимальном уровне.
  3. Инициализация файлов базы данных (Database instant file initialization): Мы включим эту опцию для пользователя, от имени которого запущена служба SQL Server. Это ускоряет операции по созданию и увеличению файлов баз данных, так как SQL Server не будет обнулять дисковое пространство.
  4. Блокировка страниц в памяти (Lock pages in memory): Мы разрешим "Lock pages in memory" для учетной записи службы SQL Server. Это предотвращает выгрузку страниц памяти, используемых SQL Server, в файл подкачки Windows, что резко улучшает производительность, особенно при работе с большими объемами данных.
  5. Max degree of parallelism (MAXDOP): Установите значение этого параметра в 1. Для 1С часто рекомендуется именно такое значение, чтобы избежать излишней параллельной нагрузки и связанных с этим блокировок, которые могут возникать при оптимизации запросов 1С.
  6. Отключение неактивных служб: Мы отключим ненужные службы SQL Server, такие как FullText Search (у 1С есть свой механизм), Integration Services, Reporting Services, если они не используются. Оставим только SQL Server, SQL Server Agent и SQL Writer.
  7. Размер и прирост файлов БД: Задайте начальный размер файлов данных от 1 до 10 ГБ, размер журнала транзакций от 1 до 2 ГБ, а прирост файлов (autogrowth) установите в 512 МБ (вместо процентного прироста, который может вызывать значительные паузы).
  8. Оптимизация TempDB:
    • Базу данных TempDB рекомендуется разбить на несколько файлов (минимум 4, но не более количества ядер процессора).
    • Каждый файл должен быть одинакового размера.
    • Располагаться TempDB должна на отдельном быстром диске.

4. Оптимизация 1С-сервера и клиентского доступа

Оптимизация самого сервера 1С и способов подключения пользователей также играет ключевую роль:

  1. Переход на тонкий/веб-клиент: Мы настоятельно рекомендуем рассмотреть возможность перевода пользователей на тонкий или веб-клиент 1С вместо RDP.
    • Тонкий клиент: Требует установки на рабочие места, но снижает нагрузку на терминальный сервер, передавая по сети только данные, а не графику.
    • Веб-клиент: Не требует установки, работает через браузер, еще больше снижает требования к рабочей станции и нагрузку на терминальный сервер, поскольку на клиент передается только изображение, но обрабатывается оно самим браузером. Для 50 пользователей, работающих по RDP, потребление оперативной памяти может достигать 3 ГБ на сессию, если открыто одно окно 1С КА, что является чрезмерным. Веб-клиент может значительно облегчить эту проблему.
  2. Настройка сети: Мы обеспечим высокоскоростное сетевое подключение (минимум 1 Гбит/с, а лучше 10 Гбит/с) между сервером базы данных и сервером приложений 1С, а также между терминальным сервером (если он используется) и рабочими местами пользователей.
  3. Настройки кластера 1С: Помимо ограничения памяти для rphost, мы проверим и оптимизируем другие параметры кластера, такие как количество процессов на рабочий сервер, время жизни сеанса, количество соединений на процесс.
  4. Антивирусное ПО: Настройте антивирусное программное обеспечение на всех серверах, добавив в исключения все файлы и каталоги, используемые 1С и SQL Server. В частности, мы должны исключить:
    • Файлы баз данных SQL (.mdf, .ndf, .ldf).
    • Каталоги установки SQL Server и 1С.
    • Рабочие каталоги кластера 1С.
    • Временные файлы 1С (1Cv8.pfl, 1Cv8.log, *.epf, *.dt, *.cf, *.cfu и т.д.).
    Это существенно снизит влияние антивируса на скорость работы.

5. Оптимизация аппаратного обеспечения и системные настройки

Давайте убедимся, что сам сервер способен выдерживать такую нагрузку:

  1. Мониторинг ресурсов: Мы настроим постоянный мониторинг загрузки процессора, дисков, сети и оперативной памяти. Это позволит нам выявить текущие "узкие места" и подтвердить эффективность внесенных изменений. Используйте такие инструменты, как системный монитор Windows (perfmon) или специализированные решения.
  2. Процессор: Для 50 пользователей и "Комплексной автоматизации" требуется мощный процессор. Мы проверим текущую модель процессора. Если это старый процессор с низкой частотой или малым количеством ядер, его замена может быть необходима. Рекомендуется процессор с 8 ядрами и 16 ГБ ОЗУ для СУБД до 100 пользователей, а для 500 пользователей - 12 ядер и 64 ГБ ОЗУ. Убедитесь, что процессор не является "процессором 1.7" (имеется в виду очень старая или маломощная модель).
  3. Схема управления питанием: Установите схему управления питанием на "Высокая производительность" как в настройках Windows Server, так и в BIOS/UEFI сервера. Это предотвратит снижение частоты процессора и скорости работы других компонентов в целях энергосбережения.

6. Оптимизация конфигурации 1С и регламентные операции

Помимо серверной части, важно обратить внимание на саму конфигурацию 1С:

  1. Обновление платформы и конфигурации: Мы убедимся, что используются актуальные версии платформы 1С и конфигурации "Комплексная автоматизация 2.0". Обновления часто содержат исправления ошибок и оптимизации производительности, что может значительно улучшить работу.
  2. Оптимизация кода: Если проблема заключается в "очень долгом проведении документов" и "закрытии месяца", то, скорее всего, есть неэффективные запросы или алгоритмы в самой конфигурации.
    • Анализ "тяжелых" запросов: Мы используем технологический журнал 1С или встроенные средства мониторинга производительности для выявления самых долгих запросов и процедур.
    • Оптимизация алгоритмов: Если возможно, мы пересмотрим алгоритмы проведения документов и закрытия месяца. Например, переписать алгоритм на многопоточный, как было предложено в одном из сообщений, может значительно ускорить выполнение задач, которые можно распараллелить. Однако это требует глубоких знаний платформы 1С и структуры конфигурации.
    • Пакетное проведение: Мы убедимся, что групповое проведение документов реализовано максимально эффективно, возможно, с использованием фоновых заданий или методов, оптимизированных для работы с большими объемами данных.
  3. Тестирование и исправление БД: Регулярно запускайте тестирование и исправление базы данных (через конфигуратор), а также режим реструктуризации БД для оптимизации структуры физического хранения данных.
  4. Управление фоновыми заданиями: Фоновые задания могут быть скрытым "убийцей" производительности. Мы проанализируем их работу, расписание, периодичность и при необходимости оптимизируем или распределим нагрузку на отдельный сервер.

Реализация этих рекомендаций должна проводиться поэтапно, с обязательным мониторингом результатов после каждого изменения. Это позволит нам точно определить, какие меры оказали наибольшее влияние на ускорение работы вашей 1С:Комплексная автоматизация 2.0 и значительно сократить время проведения документов и закрытия месяца.

← На главную