===== Подготовка дисковой подсистемы под файлы БД SQL Server ===== {{:1c:setting-up-microsoft-sql-server-for-1c-enterprise-8-3:pasted:20190210-202335.png }} Прежде чем размещать файлы баз данных **SQL Server** на дисковой подсистеме, нужно специальным образом подготовить соответствующие разделы **NTFS**, учитывая пару правил: * В случае использования ОС **Windows Server 2003** желательно произвести выравнивание (смещение) начального сектора (**Partition Offset** / **Starting Offset**) на уровень **1024KB**. Выравнивание может быть выполнено только на этапе создания дискового раздела NFTS и невозможно для уже существующих разделов без из пересоздания. Для ОС **Windows Server 2008** и выше выравнивание проводить не требуется, так как все вновь создаваемые разделы NTFS уже смещены на число байт, кратное размеру кластера (**Bytes Per Cluster** / **Allocation unit size**). Для системного тома в ОС **Windows Server 2008** и выше смещение первого раздела в конфигурации по умолчанию составляет **1024KB**.\\ * При форматировании дискового раздела **NTFS** желательно выбирать рекомендуемый размер кластера в **64KB** (по умолчанию используется размер в 4KB). При проверке смещения разделов, на которых планируется размещение файлов БД, можно руководствоваться правилом: Размер смещения **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            # Получаем информацию о разделе
{{ :1c:setting-up-microsoft-sql-server-for-1c-enterprise-8-3:pasted:20190210-174227.png }} В нашем примере диск //**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 (на самом деле на диске не два, а три раздела): {{ :1c:setting-up-microsoft-sql-server-for-1c-enterprise-8-3:pasted:20190210-180400.png }} Такая информация может внести некоторую сумятицу, поэтому для более внятного определения смещения раздела лучше использовать утилиту **diskpart**. Что же касается размера кластеров, которыми должен быть отформатирован NTFS раздел (**Allocation unit size** или **Bytes Per Cluster**) под файлы БД SQL Server, то его можно определить на этапе форматирования раздела. {{ :1c:setting-up-microsoft-sql-server-for-1c-enterprise-8-3:pasted:20190210-180629.png }} Без явного указания размера кластера, если выбрано значение **Default**, раздел форматируется более мелкими 4KB кластерами. Проверить размер кластера уже отформатировано ранее раздела можно с помощью утилиты **fsutil**
fsutil fsinfo ntfsinfo R:
{{ :1c:setting-up-microsoft-sql-server-for-1c-enterprise-8-3:pasted:20190210-180848.png }} В нашем примере видно, что диск отформатирован кластерами по 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
---- Дополнительные источники информации: * [[https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008/dd758814(v=sql.100)|SQLCAT Articles - Disk Partition Alignment Best Practices for SQL Server]] ---- Проверено на следующих конфигурациях: ^ Версия ОС ^ | Microsoft Windows Server 2012 R2 Standard EN (6.3.9600) | ---- {{:user:blogroot.png?50&nolink |}} Автор первичной редакции:\\ [[user:blogroot|Алексей Максимов]] \\ Время публикации: 10.02.2019 17:30 {{tag>"SQL Server" "Windows Server 2003" "Windows Server 2008" "Windows Server 2012 R2" "Partition Offset" NTFS diskpart fsutil "Disk Management"}} ~~DISCUSSION~~ ~~NOTOC~~