Сегодня новая задачка. Имеем сервер, почти ничего о нём не знаем, кроме кредов доступа. Знаем, что там работает 1С и крутится база MSSQL. Наша задача состоит в том, чтобы сервер стал работать лучше. Погнали.
Сбор сведений
Мы ничего не знаем о сервере, поэтому начнём сбор сведений. Узнаем ОС:
winver
Характеристики:
- ОС: Windows 10
- Процессор: 13th Gen Intel(R) Core(TM) i7-13700KF 3.4 GHz (16 ядер, 24 логических процессора)
- Оперативная память 128 ГБ
- Диск под систему: Samsung SSD 980 Pro 2 ТБ
- Диск под БД: Samsung SSD 980 Pro 2 ТБ
- Два диска под бэкапы, собраны в динамический RAID1 массив: Seagate IronWolf ST400VN0006-3CW104 4 ТБ, скорость 5400 RPM
Процессор нормальный, диски под систему и MSSQL нормальные. А вот для бэкапов скорость низковата, ну да ладно.

Процессор разогнан под 5.11 ГГц.

Установлен MSSQL 2019, 1С. Дополнительно создан RAM диск на 30 ГБ для tempdb.
Видно, что кто-то уже постарался и произвёл оптимизацию. Постараемся сделать ещё лучше.
Настройка MSSQL для работы с 1С — мифы и реальность
Программная оптимизация ОС под 1С
Установка последнего Service Pack и Cumulative Update на MSSQL
Дело хорошее, но пока этим заниматься не буду. При попытке установить обновления получаю ошибку:
С установкой обновлений возникли некоторые проблемы, но попытка будет повторена позже. Если вы продолжаете видеть это сообщение и хотите получить сведения, выполнив поиск в Интернете или обратившись в службу поддержки, вам может помочь это: (0x80070005)
Проблема в том, что служба "Центр обновления Windows" отключена вручную. Пока не будет настроено зеркало и не проверена работа резервного копирования, критичных операций производить не буду.
Форматирование с размером блока 64 КБ
Рекомендуют форматировать файловую систему для БД с размером блока 64 Кб.
Стандартный размер кластера (лучше использовать это название) в файловой системе NTFS:
- ёмкость до 16 Тб — 4 килобайта
- ёмкость от 16 до 32 Тб — 8 килобайт
- ёмкость от 32 до 64 Тб — 16 килобайт
- ёмкость от 64 до 128 Тб — 32 килобайта
- ёмкость от 128 до 256 Тб — 64 килобайта
Тоже этим заниматься сейчас не буду. База уже в работе, отформатировать диск не получится. Вернусь к этому позже, когда появится удобный момент.
Database instant file initialization
Рекомендуют включить возможность Database instant file initialization для пользователя, от которого запущена служба Microsoft SQL Server. Служба сейчас работает от имени NT Service\MSSQLSERVER.
Запускаем Local Group Policy Editor:
gpedit.msc- Слева выбираем Local Computer Policy, Computer Configuration, Windows Settings, Security Settings, Local Policies, User Rights Assigment.
- Тыкаем в Perform volume maintenance tasks.
- Сюда добавляем юзера, от имени которого запускается SQL Server.
Мне добавлять не пришлось, кто-то уже раньше добавил пользователя.

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.

- Видим, что политика уже настроена.
Power Option: High performance
Проверим план электропитания (хотя частота процессора уже говорит о том, что план верно настроен).

Максимальная производительность, всё в порядке.
Индексация файлов
Отключаем индексацию файлов на диске с БД.

И снова уже кто-то настроил раньше.
Антивирус
Нам нужно исключить диски из проверки антивирусом и внести его в исключения.

Диск с БД и RAM внесены в исключения. Но можно подтюнить. Добавим в исключения процесс sqlservr.exe.

Сжатие содержимого
Проверяю директорию для БД: D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA. Проверяю, что сняты галки шифрования для компрессии.

Программная оптимизация MSSQL под 1С
Настройка памяти

На сервере живёт 1С, поэтому максимальному размеру памяти даём половину памяти сервера. Минимальному размеру памяти — четверть памяти сервера, чтобы не отдать случайно всё под процессы 1С.
Настройка процессора

Расположение файлов данных
Проверяю. Всё настроено на нужные диски.

Разбить tempdb на несколько файлов по количеству процессоров
Уже кто-то разбил.
Перенести tempdb в RAM
Тоже сделано.
MSSQL - переносим tempdb на RAM диск
Max degree of parallelism
Кто-то 5 поставил, меняю на 8.

Прирост файлов БД
Снимаю ограничение на размер лога.

Немного поясню, на Simple баз этого можно не делать. Если настраиваете зеркалирование, базы в режиме FULL, и второй сервер у вас периодически не работает, то максимальный размер лога нужно увеличить, чтобы БД на встала. Естественно, нужно предусмотреть куда вы будете перетаскивать файлы, если диск полностью забьётся.
Флаги трассировки
- 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 Server Network Connfiguration. Protocols for MSSQLSERVER (наш инстанс). Делаем Named Pipes - Disabled.
"TCP/IP" тоже включаю, потому как позже буду настраивать зеркалирование.
Резервирование и обслуживание
Настрою позже, когда буду делать зеркалирование.
Бонусная оптимизация
Мало что пришлось подкручивать, поэтому немного добавлю от себя. Будем чистить память по расписанию.
1C — очищаем оперативную память по расписанию

Запускаю, память чистится.


