October 2008

You are currently browsing the monthly archive for October 2008.


Недавно Кевин Кляйн в очередной раз поднял тему выравнивания размеров кластера и блока, проблему, которая, казалось бы, давно хорошо всем известна, документирована и не обходит ни один из известных мне списков рекомендаций по оптимизации работы дисковой подсистемы сервера баз данных. Статья Кевина How to Improve Application and Database Performance up to 40% in One Easy Step получила довольно большой резонанс в профессиональной блог-сфере, точно также, как в былые времена об этом писалось множество статей, шумели в форумах или nntp-конференциях… Размышляя о причинах всеобщей забывчивости о подобных проблемах, я склонен к таковым в первую очередь отнести то, что, увы, всё меньше стало возможностей получения систематизированных знаний (так и не образовалось школ администрирования, а техническая литература практически умерла на территории бывшего СССР), и то, что современные модели организации инфраструктуры IT всё меньше способствуют творческому и разностороннему подходу к задачам администрирования серверного парка организации. Узкие специализации и большие, я бы даже сказал масштабные, нагрузки на специалистов поддержки жизнедеятельности центров обработки данных приводят к тому, что ускользают такие детали, как, например, выравнивание размеров кластера и блока… Жизнь показывает, что такие просчёты для серверов баз данных могут стоить до 40% потери производительности дисковых операций.


Давайте перейдём к сути проблемы и начнём с её описания. Сразу хочу отметить, что если вы для размещения файлов баз данных используете RAW-партиции, или это простые диски, не входящие ни в какой RAID-массив с собственным контроллером, то вам беспокоиться не о чем. Не выровненными могут быть только кластеры NTFS и блоки RAID-массива (пусть даже это RAID0 из одного диска). Когда форматируется раздел, вы выбираете размер кластера, который является по сути своей тем же самым, что и блок разметки дисков у RAID-контроллера. Наверняка, в форумах или в рекомендациях разных вендоров вам попадались слова, что размер блока и размер кластера желательно устанавливать одинаковыми, например, для баз данных SQL Server очень часто слышны рекомендации выбирать и там и там 64Кб. Однако, операционная система создает самый первый кластер (блок начальной загрузки) размером в 63Кб. Эта особенность NTFS означает, что каждый последующий кластер будет сдвинут на 1Кб на предыдущий блок. Т.е. кластеры окажутся смещёнными относительно границ блоков массива. Такая ситуация приводит к тому, что одна операция чтения или записи кластера будет затрагивать два сектора и будет приводить к удвоению числа запросов ввода-вывода.


Наиболее наглядно это показал Дэнни Черрай (Denny Cherry) в своей статье Optimize disk configuration in SQL Server. Вот рисунок из его статьи:



А вот выигрыш от выравнивания наиболее наглядно продемонстрировал в статье своего блога Линчи Шеа, которую вы можете посмотреть здесь.



Ещё один подробный тест производительности SQL Server со смещением или без опубликовал в своём блоге Илгиз Мамышев: Выравнивание кластеров NTFS и блоков RAID массива (детальный тест для SQL Server)



Обнаружить и устранить смещение кластеров относительно блоков можно с помощью утилиты из состава Windows Server 2003, которая называется DISKPART.EXE. В Windows 2000 она имела несколько укороченное имя DISKPAR.EXE и входила в состав Windows 2000 Resource Kit.


Существует несколько статей Майкрософт, которые подробно обсуждают эту тему: 



Ещё несколько примеров использования DISKPART.EXE для нужд SQL Server вы можете найти в этих статьях: 



Имейте в виду, что когда вы будете применять команды DISKPART для выравнивания границ, данные на этих дисках будут полностью утеряны, так что позаботьтесь об их резервировании загодя.


Для того чтобы проверить существование сдвига, вы можете использовать следующий порядок использования утилиты DISKPART: Перейдите в командную строку и там, получив приглашение командной сроки, наберите и выполните команду: diskpart.exe. После этого вы должны увидеть приглашение запущенной утилиты DISKPART>. С помощью команды LIST DISK просмотрите список имеющихся дисков. Для того чтобы сделать текущим один из исследуемых дисков, введите команду SELECT DISK n, где n – номер выбранного диска по порядку операционной системы. После позиционирования диска, дайте команду LIST PARTITION, которая выведет на экран подробную информацию о разделах диска, включая начальное смещение.


Аналогичную информацию можно получить с помощью утилиты DiskExt, или запросом WMI, например, воспользовавшись методом, предложенным в блоге Боба Даффай, оригинальное сообщение о котором можно посмотреть здесь. Сам запрос имеет очень простой вид:


    SELECT * FROM Win32_DiskPartition


Он, как и вызов команды LIST PARTITION, вернёт в числе своих результатов информацию о начальном смещении. Те цифры, которые вы увидите, необходимо будет разделить на величину размера сектора диска, например, так:


    32256 / 512 = 63


Если полученный результат деления будет такой, как в примере, а размер блока дискового массива равен 64, значит между кластерами и блоками существует смещение в 1 Кб. Для того, чтобы выровнять раздел, нужно удалить смещённый раздел, а потом для выбранного диска задействовать команду DISKPART> CREATE PARTITION PRIMARY ALIGN=64. Эта команда создает новый раздел со смещением первого кластера на 64КбБ, что позволяет выровнять границы кластеров и блоков и тем самым оптимизировать работу дисковой подсистемы. Опция ALIGN появилась в сервисном пакете Windows 2003 SP1.

Network-wide options by YD - Freelance Wordpress Developer