Выровнять сектора дисков по границе 1024кб и отформатировать с размером блока 64кб
При форматировании дисков вы наверняка замечали пункт «Размер единицы распределения» или «размер кластера». Этот параметр всегда задан по умолчанию, но вместе с тем есть возможность его изменить. Стоит ли это делать и за что вообще отвечает размер кластера? Давайте разбираться.
Установить параметр Max degree of parallelism = 1 — частично миф, частично реальность
В закладке Advanced есть возможность установить параметр Max degree of parallelism. Кто-то рекомендует ставить 1, чтобы запретить параллельные запросы. Смысл в том, что один толстый запрос может сожрать все процессоры и помешать другим пользователям. С другой стороны, запущенная на ночь обработка могла бы выполняться быстрее при использовании нескольких процессоров. Давайте поступим иначе - ограничим половиной процессоров. У меня их 8, ставлю 4.
Эту настройку применяем только при необходимости и в зависимости от количества процессоров.
Прирост файлов БД — реальность
Меняем дефолтные настройки прироста размера файлов данных и лога.
По умолчанию прирост 10%, это никуда не годится. Если база 500 гигабайт, то одномоментно отобранные 50 Гб места могут негативно сказаться на работе.
С тех пор уже многое изменилось, вышли новые версии 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.
И получаем результат: 3.41 попугая. Этот результат не просто плох, он даже хуже. С такими результатами сервер нельзя использовать для 1С. Давайте оптимизируем.
Заключение
Мы настроили аппаратный сервер HP ProLiant DL360 Gen9 для работы с 1С. Оптимизация программной и аппаратной части помогла повысить производительность системы в 10 раз.
Однопоточный синтетический тест 1С от Гилёва TPC-1C показывает результат "Хорошо", 32.89 баллов, что является прекрасным показателем для сервера с процессорами Intel Xeon CPU E5-2650 v4 @ 2.20GHz.
В процессе работы были выполнены дополнительные действия, отключены лишние службы и настройки системы. Исправлена ошибка Event ID 10016. Но данные действия не повлияли на результат тестирования, поэтому о них я не стал писать.
Оптимизируем Microsoft SQL Server 2014 для работы с 1С. ОС — Windows Server 2012 R2. Напишу что нужно сделать, а что не нужно.
Определяю мифичность очень просто, если мне пришлось применить настройку — реальность, не пришлось — миф.
Дополнительная оптимизация
На форумах я вычитал, что для такого процессора не удастся добиться результата больше 20 попугаев. Давайте проверим это спорное утверждение?
Резервирование и обслуживание — реальность
Эту настройку применяем.
Перенести tempdb в RAM
А вот это нужно сделать.
Столкнулся с проблемой и решил её:
При создании RAM диска не используем индексацию файлов.
Установка последнего Service Pack и Cumulative Update
На текущий момент нужно обновиться до CU 15.
Обязательно нужно сделать.
Database instant file initialization — частично миф, частично реальность
Рекомендуют включить возможность Database instant file initialization для пользователя, от которого запущена служба Microsoft SQL Server.
Что это за штука?
Во-первых, эта настройка влияет только на файл данных. Когда файл автоматически вырастает, то новый кусок заполняется нулями, в этот момент 1С может тормозить. Instant File Initialization (IFI) позволяет отключить это зануление.
- Запускаем Local Group Policy Editor:
- Слева выбираем Local Computer Policy, Computer Configuration, Windows Settings, Security Settings, Local Policies, User Rights Assigment.
- Тыкаем в Perform volume maintenance tasks.
- Сюда добавляем юзера, от имени которого запускается SQL Server.
Однако, у меня там уже прописана группа Administrators, а пользователь, под которым работает служба SQL Server уже в этой группе.
Так что у меня ничего не пришлось настраивать. Но вы у себя проверьте.
Давайте проверим, что всё работает. Рекомендуют создать новую БД размером 5 Гб и логом 1 Мб. Вот тут тоже нужно быть внимательным, нужно создавать под тем же пользователем, от которого запускается сервис SQL. Я создам от имени другого пользователя, который тоже в группе Administrators.
База создалась мгновенно. На всякий случай попробую создать базу размером 50 Гб, место есть. Да, моментально на диске пропало 50 Гб и БД создалась быстро.
Instant File Initialization (IFI) работает из коробки, если пользователь, под которым работает сервис SQL входит в группу Administrators сервера.
Эту настройку применяем только при необходимости.
Lock pages in memory — реальность
Рекомендуют установить разрешение на Lock pages in memory (блокировку страниц в памяти) для пользователя, от которого запущена служба Microsoft SQL Server. Эта политика Windows определяет, какие учетные записи могут сохранять данные в физической памяти, чтобы система не отправляла страницы данных в виртуальную память на диске.
- Запускаем Local Group Policy Editor:
- Слева выбираем Local Computer Policy, Computer Configuration, Windows Settings, Security Settings, Local Policies, User Rights Assignment.
- Тыкаем в Lock pages in memory.
Эту настройку применяем. Нужно учитывать, что потребление оперативки возрастёт.
Индексация файлов
Отключаем индексацию файлов на SSD диске.
Делаем это на всякий случай. Служба индексации не установлена, но, вдруг, кто-то установит.
Отключение DFSS — миф
DFSS по умолчанию устанавливается на терминальный сервер. При чём тут SQL? Отключать нечего.
С тех пор уже многое изменилось, вышли новые версии 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.
И получаем результат: 3.41 попугая. Этот результат не просто плох, он даже хуже. С такими результатами сервер нельзя использовать для 1С. Давайте оптимизируем.
Расположение файлов данных — реальность
Файлы данных и файлы журналов транзакций желательно размещать на разных дисковых массивах. Если один из массивов быстрее, то лог нужно разместить там.
Эту настройку по возможности применяем.
Резервирование и обслуживание — реальность
Эту настройку применяем.
Расположение файлов данных — реальность
Файлы данных и файлы журналов транзакций желательно размещать на разных дисковых массивах. Если один из массивов быстрее, то лог нужно разместить там.
Эту настройку по возможности применяем.
Индексация файлов — миф
По умолчанию галка Allow files in this folder to have contents indexed in addition to the file properties стоит:
Казалось бы, надо снимать. Подумаем, эта галка указывает службе индексации, что содержимое нужно обработать. Зачем на сервере индексировать содержимое? А стоит ли вообще служба индексации по умолчанию? Проверяем:
А служба поиска не установлена! Ну и забиваем на все эти галки. Эту настройку не применяем.
Исключить файлы БД из систем резервного копирования — миф
Это классика, не нужно ничего исключать, нужно просто нормально резервирование делать.
Во-первых, не отделяйте мух от котлет. Не держите приложение 1С и SQL Server на одном сервере. MSSQL должен жить отдельно. И резервироваться он должен средствами MSSQL. И зеркалироваться.
Эту настройку не применяем.
Расположение файлов данных
Файлы данных и так были на SSD, не меняю.
Устанавливаем последний Service Pack и Cumulative Update — реальность
На текущий момент нужно обновиться до SP3.
Обязательно нужно сделать.
Сетевые протоколы
Протокол Named pipes необходимо отключить в SQL Server Configuration Manager. Поскольку SQL сервер и 1С сервер находятся на одном сервере, то протокол TCP/IP тоже отключаем.
Какой размер кластера стоит использовать?
Оптимальный размер кластера зависит от операционной и файловой систем, которые вы используете. Однако, наилучшим выбором как правило являются значения по умолчанию. К примеру, если вы установите для накопителя больший размер кластера, то файлы маленького размера будут также занимать больше места на диске. Это не совсем пригодно для повседневного использования.
Вместе с тем больший размер кластера может привести к излишней фрагментации диска, что в первую очередь касается привычных магнитных, жестких дисков. Твердотельные SSD накопители не испытывают особых проблем с фрагментацией из-за высокой скорости работы.
Проверка
Основные настройки сделали. Перезагружаем сервер.
Ещё раз выполним тест TPC-1C и посмотрим чего мы добились.
И получаем результат: 13.85 попугаев. Это значительно лучше чем было, уже не плохо, а удовлетворительно. Использовать сервер для 1С уже можно. Но хочется большего.
Программная оптимизация
Применим настройки операционной системы и MSSQL для 1С, которые я делал в предыдущей статье.
Lock pages in memory
Рекомендуют установить разрешение на Lock pages in memory (блокировку страниц в памяти) для пользователя, от которого запущена служба Microsoft SQL Server. Эта политика Windows определяет, какие учетные записи могут сохранять данные в физической памяти, чтобы система не отправляла страницы данных в виртуальную память на диске.
- Слева выбираем Local Computer Policy, Computer Configuration, Windows Settings, Security Settings, Local Policies, User Rights Assignment.
- Видим, что политика не настроена. Можно добавить сюда пользователя, от имени которого работает SQL Server, я просто добавляю сюда группу Administrators.
Эту настройку применяем. Нужно учитывать, что потребление оперативки возрастёт.
Выравнивание разделов — миф
Рекомендуют выравнивать сектора дисков по границе 1024Кб. Не заморачивайтесь, эта рекомендация устарела. Операционная система теперь сама выравнивает раздел как нужно для дисков более 4 ГБ.
HKLM \ SYSTEM \ CurrentControlSet \ Services \ VDS \ Alignment
Эту настройку не применяем.
Флаги трассировки
4199 — включает исправления оптимизатора из фиксов.
1118 — использовать разные страницы памяти.
Проверка статусов флагов трассировки:
Запускаем SQL Server Configuration Manager. SQL Server Services. SQL Server - правой кнопкой свойства. Вкладка Startup Parameters. Добавляем -T1118 и -T4199.
Для применения потребуется перезапустить SQL сервер.
Database instant file initialization
Рекомендуют включить возможность Database instant file initialization для пользователя, от которого запущена служба Microsoft SQL Server. Вот только при установке MSSQL 2019 я эту галку уже ставил.
Обратите внимание на галку Grand Perform Volume Maintenance Task privilege to SQL Server Database Engine Service . Полезная штука для оптимизации производительности. Настройка влияет на файл данных. Когда файл автоматически вырастает, то новый кусок заполняется нулями, в этот момент SQL может тормозить. Instant File Initialization (IFI) позволяет отключить это зануление.
Что означает размер кластера?
Размер единицы распределения или же иначе размер кластера – это наименьший, возможный объем дискового пространства, который будет выделен для хранения файла. Проще говоря, размер любого файла на вашем диске будет кратен размеру кластера. Даже практически пустой файл, все равно будет занимать на диске место, равное размеру кластера.
Точно также и в случае с файлами большего объема – если размер файла не кратен размеру кластера, то на диске будет выделено дополнительное пространство, кратное размеру кластера. Вы можете очень просто убедиться в этом: создайте обычный текстовый файл с минимальный содержанием и посмотрите его свойства. Вы увидите, что занимаемое на диске место значительно превышает реальный размер документа.
Форматирование с размером блока 64Кб
А вот здесь всё очень неявно. Есть статья Best Practice от Microsoft:
В ней явно говорится:
Partition the Disk volumes hosting SQL databases (Data and log) with 64 KB allocation unit size:
A drive can be formatted with different sizes ranging from 512 bytes to 64K sizes with the default being 4KB (4096 bytes). This setting is also called as “Bytes Per Cluster”. The atomic unit of storage in SQL Server is a page which is 8KB in size. Extents are groups of eight 8 KB pages that are physically contiguous to each other for a total of 64 KB. SQL Server uses extents to store data. Hence, on a SQL Server machine the NTFS Allocation unit size hosting SQL database files (Including tempdb files) should be 64K.Кстати, обратите внимание на другие разделы статьи, возможно, там тоже найдёте для себя что-то полезное.
Казалось бы всё ясно, 64 килобайта — наше всё. Но. Откуда ноги растут? Есть рекомендация от Microsoft с 2008 года:
Здесь аргументированно с указанием конкретного железа, на котором производились испытания, пишут:
Note that file allocation unit (cluster) size commonly correlates with common stripe unit sizes. The performance question here is usually not one of correlation per the formula, but whether the cluster size is the NTFS default of 4,096 bytes or has been explicitly defined at 64 KB, which is a best practice for SQL Server.
Снова 64 килобайта — наше всё. Читаем дальше:
An appropriate value for most installations should be 65,536 bytes (that is, 64 KB) for partitions on which SQL Server data or log files reside. In many cases, this is the same size for Analysis Services data or log files, but there are times where 32 KB provides better performance . To determine the right size, you will need to do performance testing with your workload comparing the two different block sizes.
Получается, что SQL сервер ведёт себя лучше при размере кластера 64 килобайта, однако, в некоторых случаях, максимальной производительности удавалось достигать при размере кластера в 32 килобайта.
А теперь добавляем переменных:
- Появились новые типы массивов типа SSD и NVMe.
- Всё чаще SQL сервер устанавливается виртуально или в облаке, где файловая система виртуальной машины живёт внутри файловой системы гипервизора.
- Производители жёстких дисков и RAID контроллеров используют кеширование и дополнительные технологии ускорения работы дисков.
Ещё следует учитывать, что NTFS для разных размеров диска создаёт разные размеры блока. Стандартный размер кластера (лучше использовать это название) в файловой системе NTFS:
- ёмкость до 16 Тб — 4 килобайта
- ёмкость от 16 до 32 Тб — 8 килобайт
- ёмкость от 32 до 64 Тб — 16 килобайт
- ёмкость от 64 до 128 Тб — 32 килобайта
- ёмкость от 128 до 256 Тб — 64 килобайта
Так что если вы не хотите заморачиваться, то ставьте размер блока (кластера) при форматировании 64 килобайта. Однако не факт, что при этом ваш SQL сервер будет работать быстрее. Правильный ответ можно получить только при тестировании производительности.
Присылайте ссылки на статьи, где проводились исследования производительности для разных размеров кластера. Истина где-то там.
Сжатие содержимого — миф
Рекомендуют проверить, что галка, отмеченная на картинке выше, снята. Имеется в виду папка, где лежат файлы БД. По умолчанию она снята — рекомендация миф.
Устанавливаем последний Service Pack и Cumulative Update — реальность
На текущий момент нужно обновиться до SP3.
Обязательно нужно сделать.
Установить параметр Max degree of parallelism = 1
Устанавливаю по просьбе разработчиков 1С. Хотя считаю, что лучше ставить половину выделенных для SQL сервера процессоров.
Антивирус
Вспоминаем про то, что в 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 и прочее ПО с собственным антивирусом на борту.
Power Option: High performance — реальность
Да, это реальность. По умолчанию план электропитания в Windows Server 2012 R2 — Balanced.
В некоторых случаях, Microsoft не уточняет в каких, на сервере может из-за этого снижаться производительность. Переключаем план на High performance.
Эту настройку применяем.
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 Assigment.
- Тыкаем в Lock pages in memory.
- Видим, что политика не настроена. Можно добавить сюда пользователя, от имени которого работает SQL Server, я просто добавляю сюда группу Administrators.
Эту настройку применяем. Нужно учитывать, что потребление оперативки возрастёт.
Заключение
Как вы уже могли понять использование стандартного размера кластера – это по большей части всегда самый оптимальный и безопасный вариант. Прочие параметры могут пригодится только в случае если вы готовите накопитель для специфичных задач или хранения определенного типа контента. В остальных сценариях лучше всего довериться настройкам по умолчанию.
Наш подписчик FSS провел собственное тестирование влияния размера кластера на скорость чтения. Оригинальный комментарий:
Провёл личный эксперимент. Взял новый HDD WD 1Tb EZEX и форматнул его сначала кластером в 4 кб и прогнал Кристал Диск Марком. Сделал скрин. Потом форматнул в 64 кб кластером и провёл те же операции. Результат на лицо. Линейные скорости записи/чтения заметно подросли. Отсюда вывод: чтобы проиграть к примеру mp3 файл, головке жёсткого диска нужно побегать по мелким кластерам, чтобы собрать воедино файл для воспроизведения. Поэтому чем больше кластер, тем меньше движений нужно совершить головке HDD для нахождения и чтения файла. Из минусов - большой кластер ворует дополнительное пространство. Но для кого это минус, учитывая сегодняшние объёмы дисков? Если у вас фильмы, архивы и музыка - большой кластер увеличит скорость доступа к ним. Если документы и мелкие фото - то лучше 4 кб. У меня из 931 гига занято 539 ГБ, на диске 547, то есть "потеря" составила всего 8 гигов. Эти 8 Гб в теории свободны, но считаются занятыми, так как в них находятся неполные частицы файлов. Жёсткий диск не дёргает часто головку, нет нагрева. Скорость на высоте.
Оптимизируем Microsoft SQL Server 2014 для работы с 1С. ОС — Windows Server 2012 R2. Напишу что нужно сделать, а что не нужно.
Определяю мифичность очень просто, если мне пришлось применить настройку — реальность, не пришлось — миф.
Заключение
Мы настроили аппаратный сервер HP ProLiant DL360 Gen9 для работы с 1С. Оптимизация программной и аппаратной части помогла повысить производительность системы в 10 раз.
Однопоточный синтетический тест 1С от Гилёва TPC-1C показывает результат "Хорошо", 32.89 баллов, что является прекрасным показателем для сервера с процессорами Intel Xeon CPU E5-2650 v4 @ 2.20GHz.
В процессе работы были выполнены дополнительные действия, отключены лишние службы и настройки системы. Исправлена ошибка Event ID 10016 . Но данные действия не повлияли на результат тестирования, поэтому о них я не стал писать.
Если у кого-нибудь есть ещё кейсы по разгону, пишите.
Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.Сетевые протоколы — реальность
Протокол "Named pipes" необходимо отключить.
Запускаем SQL Server Configuration Manager. SQL Server Network Connfiguration. Protocols for MSSQLSERVER (наш инстанс). Делаем Named Pipes - Disabled.
Эту настройку применяем.
Аппаратная оптимизация
Настроим железо. Каждая марка сервера может настраиваться по-своему, я буду настраивать 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С всё ещё нельзя.
Форматирование с размером блока 64Кб
А вот здесь всё очень неявно. Есть статья Best Practice от Microsoft:
В ней явно говорится:
Partition the Disk volumes hosting SQL databases (Data and log) with 64 KB allocation unit size:
A drive can be formatted with different sizes ranging from 512 bytes to 64K sizes with the default being 4KB (4096 bytes). This setting is also called as “Bytes Per Cluster”. The atomic unit of storage in SQL Server is a page which is 8KB in size. Extents are groups of eight 8 KB pages that are physically contiguous to each other for a total of 64 KB. SQL Server uses extents to store data. Hence, on a SQL Server machine the NTFS Allocation unit size hosting SQL database files (Including tempdb files) should be 64K.Кстати, обратите внимание на другие разделы статьи, возможно, там тоже найдёте для себя что-то полезное.
Казалось бы всё ясно, 64 килобайта — наше всё. Но. Откуда ноги растут? Есть рекомендация от Microsoft с 2008 года:
Здесь аргументированно с указанием конкретного железа, на котором производились испытания, пишут:
Note that file allocation unit (cluster) size commonly correlates with common stripe unit sizes. The performance question here is usually not one of correlation per the formula, but whether the cluster size is the NTFS default of 4,096 bytes or has been explicitly defined at 64 KB, which is a best practice for SQL Server.
Снова 64 килобайта — наше всё. Читаем дальше:
An appropriate value for most installations should be 65,536 bytes (that is, 64 KB) for partitions on which SQL Server data or log files reside. In many cases, this is the same size for Analysis Services data or log files, but there are times where 32 KB provides better performance. To determine the right size, you will need to do performance testing with your workload comparing the two different block sizes.
Получается, что SQL сервер ведёт себя лучше при размере кластера 64 килобайта, однако, в некоторых случаях, максимальной производительности удавалось достигать при размере кластера в 32 килобайта.
А теперь добавляем переменных:
- Появились новые типы массивов типа SSD и NVMe.
- Всё чаще SQL сервер устанавливается виртуально или в облаке, где файловая система виртуальной машины живёт внутри файловой системы гипервизора.
- Производители жёстких дисков и RAID контроллеров используют кеширование и дополнительные технологии ускорения работы дисков.
Ещё следует учитывать, что NTFS для разных размеров диска создаёт разные размеры блока. Стандартный размер кластера (лучше использовать это название) в файловой системе NTFS:
- ёмкость до 16 Тб — 4 килобайта
- ёмкость от 16 до 32 Тб — 8 килобайт
- ёмкость от 32 до 64 Тб — 16 килобайт
- ёмкость от 64 до 128 Тб — 32 килобайта
- ёмкость от 128 до 256 Тб — 64 килобайта
Так что если вы не хотите заморачиваться, то ставьте размер блока (кластера) при форматировании 64 килобайта. Однако не факт, что при этом ваш SQL сервер будет работать быстрее. Правильный ответ можно получить только при тестировании производительности.
Присылайте ссылки на статьи, где проводились исследования производительности для разных размеров кластера. Истина где-то там.
Выравнивание разделов — миф
Рекомендуют выравнивать сектора дисков по границе 1024Кб. Не заморачивайтесь, эта рекомендация устарела. Операционная система теперь сама выравнивает раздел как нужно для дисков более 4 ГБ.
Эту настройку не применяем.
Сжатие содержимого
Рекомендуют проверить, что галка, отмеченная на картинке выше, снята. Имеется в виду папка, где лежат файлы БД. По умолчанию она снята — рекомендация не нужна.
Перенести tempdb в RAM — реальность
Сам протестировал, добился 10-кратного прироста скорости чтения-запись для tempdb.
Эту настройку по возможности применяем.
Установить параметр Max degree of parallelism = 1 — частично миф, частично реальность
В закладке Advanced есть возможность установить параметр Max degree of parallelism. Кто-то рекомендует ставить 1, чтобы запретить параллельные запросы. Смысл в том, что один толстый запрос может сожрать все процессоры и помешать другим пользователям. С другой стороны, запущенная на ночь обработка могла бы выполняться быстрее при использовании нескольких процессоров. Давайте поступим иначе - ограничим половиной процессоров. У меня их 8, ставлю 4.
Эту настройку применяем только при необходимости и в зависимости от количества процессоров.
Настройка процессора — реальность
Эту настройку применяем.
Настройка процессора
Программная оптимизация
Применим настройки операционной системы и MSSQL для 1С, которые я делал в предыдущей статье.
Установка последнего Service Pack и Cumulative Update
На текущий момент нужно обновиться до CU 15.
Обязательно нужно сделать.
Выравнивание разделов
Рекомендуют выравнивать сектора дисков по границе 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 я эту галку уже ставил.
Обратите внимание на галку 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:
- Слева выбираем Local Computer Policy, Computer Configuration, Windows Settings, Security Settings, Local Policies, User Rights Assignment.
- Тыкаем в Lock pages in memory.
Эту настройку применяем. Нужно учитывать, что потребление оперативки возрастёт.
Power Option: High performance
По умолчанию план электропитания в Windows Server 2016 — Balanced. Переключаем план на High performance.
Индексация файлов
Отключаем индексацию файлов на SSD диске.
Делаем это на всякий случай. Служба индексации не установлена, но, вдруг, кто-то установит.
Сжатие содержимого
Рекомендуют проверить, что галка, отмеченная на картинке выше, снята. Имеется в виду папка, где лежат файлы БД. По умолчанию она снята — рекомендация не нужна.
Настройка памяти
Да, память для MSSQL нужно настраивать. По умолчанию сиквел жрёт всё что может, системе начинает не хватать. Как итог — тормоза. Нужно выделить SQL серверу строго определённое количество памяти и пусть не рыпается. Это позволить избежать конкуренции за ресурсы.
Настройка процессора
Расположение файлов данных
Файлы данных и так были на SSD, не меняю.
Перенести tempdb в RAM
А вот это нужно сделать.
Столкнулся с проблемой и решил её:
При создании RAM диска не используем индексацию файлов.
Установить параметр Max degree of parallelism = 1
Устанавливаю по просьбе разработчиков 1С. Хотя считаю, что лучше ставить половину выделенных для SQL сервера процессоров.
Прирост файлов БД
Меняем дефолтные настройки прироста размера файлов данных и лога.
По умолчанию прирост 10%, это никуда не годится. Если база 500 гигабайт, то одномоментно отобранные 50 Гб места могут негативно сказаться на работе.
Ставим прирост 100 Мб. Естественно, на базу tempdb тоже.
Флаги трассировки
4199 — включает исправления оптимизатора из фиксов.
1118 — использовать разные страницы памяти.
Проверка статусов флагов трассировки:
Запускаем 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 файлов.
Если tempdb находится в RAM диске, то я не вижу смысла этого делать. Но сделаю, просят разработчики 1С.
Проверка
Основные настройки сделали. Перезагружаем сервер.
Ещё раз выполним тест TPC-1C и посмотрим чего мы добились.
И получаем результат: 13.85 попугаев. Это значительно лучше чем было, уже не плохо, а удовлетворительно. Использовать сервер для 1С уже можно. Но хочется большего.
Разбить tempdb на несколько файлов по количеству процессоров — миф
Эту настройку не применяем.
Дополнительная оптимизация
На форумах я вычитал, что для такого процессора не удастся добиться результата больше 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 и прочее ПО с собственным антивирусом на борту.
Флаги трассировки — реальность
4199 — включает исправления оптимизатора из фиксов.
1118 — использовать разные страницы памяти.
Запускаем SQL Server Configuration Manager. SQL Server Services. SQL Server - правой кнопкой свойства. Вкладка Startup Parameters. Добавляем -T1118 и -T4199.
Для применения потребуется перезапустить SQL сервер.
Эту настройку применяем.
Аппаратная оптимизация
Настроим железо. Каждая марка сервера может настраиваться по-своему, я буду настраивать 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 нужно настраивать. По умолчанию сиквел жрёт всё что может, системе начинает не хватать. Как итог — тормоза. Нужно выделить SQL серверу строго определённое количество памяти и пусть не рыпается. Это позволить избежать конкуренции за ресурсы.
Разбить tempdb на несколько файлов по количеству процессоров — миф
Эту настройку не применяем.
Прирост файлов БД
Меняем дефолтные настройки прироста размера файлов данных и лога.
По умолчанию прирост 10%, это никуда не годится. Если база 500 гигабайт, то одномоментно отобранные 50 Гб места могут негативно сказаться на работе.
Ставим прирост 100 Мб. Естественно, на базу tempdb тоже.
Power Option: High performance
По умолчанию план электропитания в Windows Server 2016 — Balanced. Переключаем план на High performance.
Индексация файлов — миф
По умолчанию галка Allow files in this folder to have contents indexed in addition to the file properties стоит:
Казалось бы, надо снимать. Подумаем, эта галка указывает службе индексации, что содержимое нужно обработать. Зачем на сервере индексировать содержимое? А стоит ли вообще служба индексации по умолчанию? Проверяем:
А служба поиска не установлена! Ну и забиваем на все эти галки. Эту настройку не применяем.
Настройка процессора — реальность
Эту настройку применяем.
Power Option: High performance — реальность
Да, это реальность. По умолчанию план электропитания в Windows Server 2012 R2 — Balanced.
В некоторых случаях, Microsoft не уточняет в каких, на сервере может из-за этого снижаться производительность. Переключаем план на High performance.
Эту настройку применяем.
Сжатие содержимого — миф
Рекомендуют проверить, что галка, отмеченная на картинке выше, снята. Имеется в виду папка, где лежат файлы БД. По умолчанию она снята — рекомендация миф.
Исключить файлы БД из систем резервного копирования — миф
Это классика, не нужно ничего исключать, нужно просто нормально резервирование делать.
Во-первых, не отделяйте мух от котлет. Не держите приложение 1С и SQL Server на одном сервере. MSSQL должен жить отдельно. И резервироваться он должен средствами MSSQL. И зеркалироваться.
Эту настройку не применяем.
Выравнивание разделов
Рекомендуют выравнивать сектора дисков по границе 1024Кб. Эта рекомендация устарела. Операционная система теперь сама выравнивает раздел как нужно для дисков более 4 ГБ.
Эту настройку не применяем.
Настройка памяти — реальность
Да, память для MSSQL нужно настраивать. По умолчанию сиквел жрёт всё что может, системе начинает не хватать. Как итог - тормоза. Нужно выделить SQL серверу строго определённое количество памяти и пусть не рыпается.
Это позволить избежать конкуренции за ресурсы.
Эту настройку применяем.
Разбить tempdb на несколько файлов по количеству процессоров
Это неверная рекомендация. Если вы хотите разбить tempdb на несколько файлов, то формула следующая:
- Если у вас меньше 8 процессоров, то делайте столько файлов, сколько процессоров.
- Если у вас 8 и более процессоров, то делайте 8 файлов.
Если tempdb находится в RAM диске, то я не вижу смысла этого делать. Но сделаю, просят разработчики 1С.
Перенести tempdb в RAM — реальность
Сам протестировал, добился 10-кратного прироста скорости чтения-запись для tempdb.
Эту настройку по возможности применяем.
Настройка памяти — реальность
Да, память для MSSQL нужно настраивать. По умолчанию сиквел жрёт всё что может, системе начинает не хватать. Как итог - тормоза. Нужно выделить SQL серверу строго определённое количество памяти и пусть не рыпается.
Не держите приложение 1С и SQL Server на одном сервере. MSSQL должен жить отдельно.
Это позволить избежать конкуренции за ресурсы.
Эту настройку применяем.
Прирост файлов БД — реальность
Меняем дефолтные настройки прироста размера файлов данных и лога.
По умолчанию прирост 10%, это никуда не годится. Если база 500 гигабайт, то одномоментно отобранные 50 Гб места могут негативно сказаться на работе.
Ставим прирост 200 Мб.
Эту настройку применяем.
Database instant file initialization — частично миф, частично реальность
Рекомендуют включить возможность Database instant file initialization для пользователя, от которого запущена служба Microsoft SQL Server.
Что это за штука?
Во-первых, эта настройка влияет только на файл данных. Когда файл автоматически вырастает, то новый кусок заполняется нулями, в этот момент 1С может тормозить. Instant File Initialization (IFI) позволяет отключить это зануление.
- Запускаем 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.
Однако, у меня там уже прописана группа Administrators, а пользователь, под которым работает служба SQL Server уже в этой группе.
Так что у меня ничего не пришлось настраивать. Но вы у себя проверьте.
Давайте проверим, что всё работает. Рекомендуют создать новую БД размером 5 Гб и логом 1 Мб. Вот тут тоже нужно быть внимательным, нужно создавать под тем же пользователем, от которого запускается сервис SQL. Я создам от имени другого пользователя, который тоже в группе Administrators.
База создалась мгновенно. На всякий случай попробую создать базу размером 50 Гб, место есть. Да, моментально на диске пропало 50 Гб и БД создалась быстро.
Instant File Initialization (IFI) работает из коробки, если пользователь, под которым работает сервис SQL входит в группу Administrators сервера.
Эту настройку применяем только при необходимости.
Стоит ли использовать больший размер кластера?
Поскольку SSD накопители практически не подвержены проблемам фрагментации, то в теории вы можете использовать больший размер кластера без снижения производительности. Но ускорит ли это работу?
Скорее всего нет. Мы не видели каких-либо достоверных исследований где бы увеличение размера кластера хоть как-то бы повлияло на производительность SSD. Вместе с тем это также может привести к увеличению циклов записи, что должно негативно сказаться на ресурсе работы накопителя.
Форматирование с размером блока 64Кб
Рекомендуют форматировать файловую систему для БД с размером блока 64Кб.
Стандартный размер кластера (лучше использовать это название) в файловой системе NTFS:
ёмкость до 16 Тб — 4 килобайта
ёмкость от 16 до 32 Тб — 8 килобайт
ёмкость от 32 до 64 Тб — 16 килобайт
ёмкость от 64 до 128 Тб — 32 килобайта
ёмкость от 128 до 256 Тб — 64 килобайтаУ меня SSD диск объёмом 1.7 Тб, переформатирую.
Читайте также: