Ненавижу 1С. Здравствуйте. Когда-то я писал статью:
Настройка MSSQL для работы с 1С — мифы и реальность
С тех пор уже многое изменилось, вышли новые версии MSSQL и Windows. Некоторые советы потеряли свою актуальность. Освежим эту статью, уже с конкретными тестами производительности.
Сегодня мы будем оптимизировать физический сервер. Конфигурация тестового стенда:
- Аппаратная часть
- Сервер HP ProLiant DL360 Gen9.
- Два процессора Intel Xeon CPU E5-2650 v4 @ 2.20GHz
- 256 ГБ оперативной памяти с частотой 2400 МГц
- Аппаратный RAID контроллер Smart Array P440ar Controller с батарейкой
- RAID1 из двух HDD под операционную систему
- RAID1 из двух SSD под базы данных
- RAID5 из четырёх HDD под всё остальное
- Программная часть
- Операционная система Windows Server 2016
- 1C 8.3
- MSSQL 2019
1С и MSSQL установлены на одном и том же сервере. Базы данных размещены на SSD массиве. На сервер установлены последние прошивки, все настройки BIOS — по умолчанию.
Сервер в домене. Служба 1С и MSSQL запускаются под доменными пользователями, оба пользователя входят в группу локальных администраторов сервера.
Перед началом работ по оптимизации выполним тест TPC-1C.
Однопоточный синтетический тест 1С от Гилёва — TPC-1C
И получаем результат: 3.41 попугая. Этот результат не просто плох, он даже хуже. С такими результатами сервер нельзя использовать для 1С. Давайте оптимизируем.
Аппаратная оптимизация
Настроим железо. Каждая марка сервера может настраиваться по-своему, я буду настраивать HP ProLiant DL360 Gen9. Перезагружаем сервер.
Обращаем внимание на профиль рабочей нагрузки. По умолчанию он Balanced Power and Performance. Баланс между производительностью и энергоэффективностью. Нам нужна максимальная производительность. Нажимаем F9 для входа в BIOS.
System Configuration → BIOS/Platform Configuration (RNSU) → Power Management. Устанавливаем Power Profile в Maximum Performance.
System Configuration → BIOS/Platform Configuration (RNSU) → Power Management → Advanced Power Option. Устанавливаем Collaborative Power Control в Disabled. У меня уже так и стояло.
System Configuration → BIOS/Platform Configuration (RNSU) → Performance Options. Устанавливаем Intel(R) Turbo Boost Technology в Enabled. У меня уже так и стояло.
Сохраняем изменения F10 и перезагружаем сервер.
Профиль рабочей нагрузки изменился, теперь процессоры должны работать шустрее.
Ещё раз выполним тест TPC-1C и посмотрим чего мы добились.
И получаем результат: 5.17 попугаев. Это лучше чем было, но всё равно плохо. Два попугая добавили, но сервер использовать для 1С всё ещё нельзя.
Программная оптимизация
Применим настройки операционной системы и MSSQL для 1С, которые я делал в предыдущей статье.
Установка последнего Service Pack и Cumulative Update
На текущий момент нужно обновиться до CU 15.
Установка SQL Server 2019 CU15
Обязательно нужно сделать.
Выравнивание разделов
Рекомендуют выравнивать сектора дисков по границе 1024Кб. Эта рекомендация устарела. Операционная система теперь сама выравнивает раздел как нужно для дисков более 4 ГБ.
Эту настройку не применяем.
Форматирование с размером блока 64Кб
Рекомендуют форматировать файловую систему для БД с размером блока 64Кб.
Стандартный размер кластера (лучше использовать это название) в файловой системе NTFS:
ёмкость до 16 Тб — 4 килобайта
ёмкость от 16 до 32 Тб — 8 килобайт
ёмкость от 32 до 64 Тб — 16 килобайт
ёмкость от 64 до 128 Тб — 32 килобайта
ёмкость от 128 до 256 Тб — 64 килобайта
У меня SSD диск объёмом 1.7 Тб, переформатирую.
Database instant file initialization
Рекомендуют включить возможность Database instant file initialization для пользователя, от которого запущена служба Microsoft SQL Server. Вот только при установке MSSQL 2019 я эту галку уже ставил.
Установка Microsoft SQL Server 2019
Обратите внимание на галку Grand Perform Volume Maintenance Task privilege to SQL Server Database Engine Service. Полезная штука для оптимизации производительности. Настройка влияет на файл данных. Когда файл автоматически вырастает, то новый кусок заполняется нулями, в этот момент SQL может тормозить. Instant File Initialization (IFI) позволяет отключить это зануление.
Lock pages in memory
Рекомендуют установить разрешение на Lock pages in memory (блокировку страниц в памяти) для пользователя, от которого запущена служба Microsoft SQL Server. Эта политика Windows определяет, какие учетные записи могут сохранять данные в физической памяти, чтобы система не отправляла страницы данных в виртуальную память на диске.
- Запускаем Local Group Policy Editor:
gpedit.msc
- Слева выбираем Local Computer Policy, Computer Configuration, Windows Settings, Security Settings, Local Policies, User Rights Assignment.
- Тыкаем в Lock pages in memory.
- Видим, что политика не настроена. Можно добавить сюда пользователя, от имени которого работает SQL Server, я просто добавляю сюда группу Administrators.
Эту настройку применяем. Нужно учитывать, что потребление оперативки возрастёт.
Power Option: High performance
По умолчанию план электропитания в Windows Server 2016 — Balanced. Переключаем план на High performance.
Индексация файлов
Отключаем индексацию файлов на SSD диске.
Делаем это на всякий случай. Служба индексации не установлена, но, вдруг, кто-то установит...
Сжатие содержимого
Рекомендуют проверить, что галка, отмеченная на картинке выше, снята. Имеется в виду папка, где лежат файлы БД. По умолчанию она снята — рекомендация не нужна.
Настройка памяти
Да, память для MSSQL нужно настраивать. По умолчанию сиквел жрёт всё что может, системе начинает не хватать. Как итог — тормоза. Нужно выделить SQL серверу строго определённое количество памяти и пусть не рыпается. Это позволить избежать конкуренции за ресурсы.
Настройка процессора
Настроим проц.
Расположение файлов данных
Файлы данных и так были на SSD, не меняю.
Перенести tempdb в RAM
А вот это нужно сделать.
MSSQL — переносим tempdb на RAM диск
Столкнулся с проблемой и решил её:
RAM диск на сервере HP ProLiant DL360 Gen9
При создании RAM диска не используем индексацию файлов.
Установить параметр Max degree of parallelism = 1
Устанавливаю по просьбе разработчиков 1С. Хотя считаю, что лучше ставить половину выделенных для SQL сервера процессоров.
Прирост файлов БД
Меняем дефолтные настройки прироста размера файлов данных и лога.
По умолчанию прирост 10%, это никуда не годится. Если база 500 гигабайт, то одномоментно отобранные 50 Гб места могут негативно сказаться на работе.
Ставим прирост 100 Мб. Естественно, на базу tempdb тоже.
Флаги трассировки
4199 — включает исправления оптимизатора из фиксов.
1118 — использовать разные страницы памяти.
Проверка статусов флагов трассировки:
DBCC TRACESTATUS (1118, 4199);
GO
Запускаем SQL Server Configuration Manager. SQL Server Services. SQL Server - правой кнопкой свойства. Вкладка Startup Parameters. Добавляем -T1118 и -T4199.
Для применения потребуется перезапустить SQL сервер.
Сетевые протоколы
Протокол Named pipes необходимо отключить в SQL Server Configuration Manager. Поскольку SQL сервер и 1С сервер находятся на одном сервере, то протокол TCP/IP тоже отключаем.
Разбить tempdb на несколько файлов по количеству процессоров
Это неверная рекомендация. Если вы хотите разбить tempdb на несколько файлов, то формула следующая:
- Если у вас меньше 8 процессоров, то делайте столько файлов, сколько процессоров.
- Если у вас 8 и более процессоров, то делайте 8 файлов.
MSSQL — увеличить количество файлов в tempdb
Если tempdb находится в RAM диске, то я не вижу смысла этого делать. Но сделаю, просят разработчики 1С.
Проверка
Основные настройки сделали. Перезагружаем сервер.
Ещё раз выполним тест TPC-1C и посмотрим чего мы добились.
И получаем результат: 13.85 попугаев. Это значительно лучше чем было, уже не плохо, а удовлетворительно. Использовать сервер для 1С уже можно. Но хочется большего.
Дополнительная оптимизация
На форумах я вычитал, что для такого процессора не удастся добиться результата больше 20 попугаев. Давайте проверим это спорное утверждение?
Антивирус
Вспоминаем про то, что в Windows Server 2016 появился встроенный антивирус. Давайте отключим его на дисках с базами данных.
Windows Settings → Update & security.
Windows Defender → Exclusions → Add an exclusion.
Добавляем исключения:
- E:\ — диск с базами данных
- R:\ — RAM диск с базой tempdb
Ещё раз выполним тест TPC-1C и посмотрим чего мы добились.
И получаем результат: 32.89 попугаев. Это хорошо. Использовать сервер для 1С однозначно можно. Ай да Windows Defender, вот подстава-то... Можно вообще его снести. По той же самой причине не стоит устанавливать на сервер браузер Google Chrome и прочее ПО с собственным антивирусом на борту.
Заключение
Мы настроили аппаратный сервер HP ProLiant DL360 Gen9 для работы с 1С. Оптимизация программной и аппаратной части помогла повысить производительность системы в 10 раз.
Однопоточный синтетический тест 1С от Гилёва TPC-1C показывает результат "Хорошо", 32.89 баллов, что является прекрасным показателем для сервера с процессорами Intel Xeon CPU E5-2650 v4 @ 2.20GHz.
В процессе работы были выполнены дополнительные действия, отключены лишние службы и настройки системы. Исправлена ошибка Event ID 10016. Но данные действия не повлияли на результат тестирования, поэтому о них я не стал писать.
Если у кого-нибудь есть ещё кейсы по разгону, пишите.