Подготовка дисковой подсистемы под файлы БД SQL Server

Прежде чем размещать файлы баз данных SQL Server на дисковой подсистеме, нужно специальным образом подготовить соответствующие разделы NTFS, учитывая пару правил:

При проверке смещения разделов, на которых планируется размещение файлов БД, можно руководствоваться правилом:

Размер смещения Partition Offset в байтах, делённый на размер кластера, которым отформатирован раздел (Allocation unit size или Bytes Per Cluster) в байтах = любое целое число.

В случае, если в результате деления получается дробное число, считается, что выравнивание диска выполнено неправильно.

Чтобы проверить смещение разделов, на которых планируется расположить файлы БД, можно воспользоваться утилитой diskpart, введя примерно следующую последовательность команд:

diskpart                         # Вызываем утилиту diskpart
DISKPART> list disk              # Получаем список дисков
DISKPART> select disk 2          # Выбираем интересующий нас диск
DISKPART> list partition         # Получаем список разделов на текущем диске
DISKPART> select partition 2     # Выбираем интересующий нас раздел
DISKPART> detail part            # Получаем информацию о разделе

В нашем примере диск Disk 2 является кластерным GPT-диском, на котором разделы Partition 1 и Partition 3 являются скрытыми служебными разделами. Раздел Partition 2 является тем видимым в оснастке Disk Management разделом, который был нами создан под файлы БД SQL Server. Его смещение мы и будем проверять.

Смещение раздела Partition 2 имеет значение 135266304 байт (129MB), а сам раздел при этом отформатирован кластерами по 65536 байт (64KB). Проверяем: 135266304/65536 = 2064. Мы получили целое число, то есть в нашем случае смещение раздела сделано правильно и выравнивание раздела не требуется.

В разных источниках можно встретить рекомендацию проверять смещение разделов с помощью команды типа:

wmic partition get StartingOffset, Name, Index

Однако, исходя из практики, могу сказать, что в случае использования GPT-дисков эта команда может выдавать результаты, сбивающие с толку. Например, неверно могут быть указаны номера разделов на диске (даже по значению смещения понятно, что раздел #1 на самом деле расположен на диске раньше раздела #0). Также не виден один из скрытых разделов GPT (на самом деле на диске не два, а три раздела):

Такая информация может внести некоторую сумятицу, поэтому для более внятного определения смещения раздела лучше использовать утилиту diskpart.

Что же касается размера кластеров, которыми должен быть отформатирован NTFS раздел (Allocation unit size или Bytes Per Cluster) под файлы БД SQL Server, то его можно определить на этапе форматирования раздела.

Без явного указания размера кластера, если выбрано значение Default, раздел форматируется более мелкими 4KB кластерами. Проверить размер кластера уже отформатировано ранее раздела можно с помощью утилиты fsutil

fsutil fsinfo ntfsinfo R:

В нашем примере видно, что диск отформатирован кластерами по 64KB.

Для систем на базе Windows Server 2003 пример создания раздела со смещением в 1024KB на MBR-диске и форматирования этого раздела в NFTS с размером кластера 64KB может выглядеть следующим образом:

diskpart
DISKPART> list disk Disk ### Status Size Free Dyn GPT -------- ---------- ------- ------- --- --- Disk 0 Online 100 GB 0 B Disk 1 Online 150 GB 150 GB DISKPART> select disk 1 Disk 1 is now the selected disk. DISKPART> create partition primary align=1024 DiskPart succeeded in creating the specified partition. DISKPART> assign letter=V DiskPart successfully assigned the drive letter or mount point. DISKPART> format fs=ntfs unit=64K label="SQL DB Files Disk" nowait

Дополнительные источники информации:


Проверено на следующих конфигурациях:

Версия ОС
Microsoft Windows Server 2012 R2 Standard EN (6.3.9600)

Автор первичной редакции:
Алексей Максимов
Время публикации: 10.02.2019 17:30