SQL Server 2000

Конфигурирование и планирование подсистемы ввода-вывода

Разбить на страницы
Показывать лекцию целиком

Конфигурируя свою систему, вы должны специально позаботиться о том, чтобы правильно спроектировать и сконфигурировать подсистему ввода-вывода. Конфигурирование подсистемы ввода-вывода может как улучшить, так и ухудшить производительность вашей системы. Поняв ограничения, относящиеся к подсистеме ввода-вывода, и сконфигурировав свой сервер на оптимальную работу с учетом этих ограничений, вы сможете достичь требуемого уровня производительности.

В данной лекции мы изучим подсистему ввода-вывода. Мы начнем с описания работы устройств жестких дисков и расскажем, почему диски имеют фундаментальные ограничения производительности. Затем мы расскажем о разнообразных решениях при помощи доступных вам систем RAID и о характеристиках их производительности. Кроме того, вы научитесь идентифицировать и решать проблемы с производительностью ввода-вывода. В данной лекции также будет дано множество полезных советов и рекомендаций, относящихся к подсистеме ввода-вывода. И наконец, вы научитесь правильно конфигурировать Microsoft SQL Server 2000 так, чтобы вы смогли задействовать потенциал производительности вашей подсистемы ввода-вывода.

Характеристики производительности дисков

Дисковые накопители, называемые также "жесткие диски", являются одними из основных компонент компьютеров. Но, как ни удивительно, механическое устройство дисковых накопителей за последние 20 лет не поменялось радикально. По сравнению с первыми моделями, жесткие диски стали гораздо надежней и быстрей, но их основа осталась такой же. С точки зрения производительности, жесткие диски являются одними из наиболее важных аппаратных компонент, требующих настройки. Строго говоря, на самом деле вы не можете настраивать жесткие диски, но, зная характеристики их производительности и ограничения, вы можете конфигурировать свою систему с учетом данных ограничений, осуществляя, фактически, настройку подсистемы ввода-вывода.

Конструкция накопителя на жестких дисках

В качестве компонент для хранения данных в накопителях на жестких дисках применяются одна или нескольких пластин (disk platters). Эти пластины покрыты веществом, способным хранить данные благодаря своим магнитным свойствам. Данные хранятся на дорожках (tracks), похожих на дорожки грампластинки (или компакт-диска – для тех, кто забыл, как выглядят грампластинки). Каждая дорожка, в свою очередь, состоит из нескольких секторов. Чем дальше от центра диска, тем больше секторов будет на каждой из дорожек. Типичная пластина жесткого диска показана на рис. 5.1.

Накопители на жестких дисках часто состоят не из одной, а из многих пластин, расположенных одна над другой (рис. 5.2). Данные считываются при помощи магнитных головок. Магнитные головки используются как для чтения, так и для записи данных на диск. Так как пластин несколько, то и головок должно быть несколько. Эти головки крепятся на коромыслах (armature), двигающихся внутрь пакета пластин и обратно из него, подобно тонарму с иглой у граммофона. Все головки и коромысла жестко соединены друг с другом, поэтому все головки в каждый из моментов времени находятся в одинаковых местах каждой из пластин. Из-за такой конструкции диска становится целесообразным одновременное чтение или запись сразу всеми его головками. Таким образом, данные записываются и считываются с диска одновременно всеми головками. Поскольку набор дорожек, охватываемых головками в любой из моментов времени, похож на цилиндр, мы говорим, что данные хранятся в цилиндрах (рис. 5.2).

(рис 5.2) Пластина жесткого диска(рис 5.1) Цилиндры жесткого диска

Накопители на жестких дисках могут иметь только одну пластину, а могут – и более шести пластин. Плотность хранения данных на пластинах и количество пластин определяют максимальную емкость (вместимость) накопителя. Некоторые модели накопителей не отличаются почти ничем, кроме количества пластин. Распространенная модель накопителей имеет емкость 9 Гб и три пластины, а накопители модели, не отличающейся ничем, кроме емкости 18 Гб, имеют шесть пластин.

Показатели производительности накопителей на жестких дисках

Теперь, когда у вас имеется представление о конструкции накопителя на жестких дисках, давайте ознакомимся с тем, как он работает. Сначала мы расскажем о характеристиках вращения жестких дисков, а затем вы узнаете, как зависит время поиска дорожки жестких дисков от производительности накопителя.

Задержка вращения

Многие высокопроизводительные жесткие диски вращаются со скоростью 10000 об/мин. Если для доступа к запрошенным данным потребуется полный оборот диска, то этот оборот диска займет приблизительно 6 мс, т.е. 0,006 секунд. Скорость вращения 10000 об/мин соответствует 166,7 оборотам в секунду, поэтому на один оборот требуется 1/166,7 секунды, т.е. около 6 мс.

Чтобы головки накопителя могли прочитать сектор данных, этот сектор должен находиться под головками. Поскольку диск всегда вращается, головка просто должна подождать, пока сектор не подойдет в позицию под нее. Время, необходимое для поворота диска в нужную позицию, когда нужный сектор подойдет под головку, называется задержкой вращения (rotational latency). Задержка вращения может достигать 6 мс (если необходим полный оборот диска), но в среднем она составляет 3 мс.

Задержка вращения добавляется к времени отклика доступа к диску. Поэтому, когда вы выбираете дисковые накопители для своей системы, с точки зрения производительности, длительность задержки вращения чрезвычайно важна. Как вы только что видели, для дисков со скоростью вращения 10000 об/мин, задержка вращения составляет около 3 мс. Диски предыдущего поколения вращались со скоростью 7200 об/мин, у них оборот совершался за 8,3 мс, а средняя задержка вращения составляет около 4,15 мс. Это увеличение средней задержки вращения кажется небольшим, но оно на 38% больше, чем у диска со скоростью вращения 10000 об/мин. Как вы узнаете далее в данной лекции, длительность времени отклика может значительно увеличить время доступа для ввода-вывода.

Время поиска дорожки диска

При доступе к данным, диск должен не только повернуться в такое положение, чтобы головки могли бы прочесть данные, но и головки должны передвинуться на дорожку, на которой находятся данные. Коромысла двигаются к центру диска и наружу, перемещая головки на цилиндр, содержащий нужные данные. Время, необходимое для перемещения головок к местоположению нужных данных, называется временем поиска дорожки или просто временем поиска (seek time), или временем подвода головки к требуемой дорожке диска (см.рис. 5.3).

(рис 5.3) Задержка вращения и время поиска

Время, необходимое для поиска нужной дорожки, зависит, главным образом, от расстояния, которое должны пройти головки диска. Если накопитель осуществляет доступ к данным, хранящимся в последовательном порядке, головки должны перемещаться лишь на небольшое расстояние, и такое перемещение производится быстро. Если доступ производится к данным, располагающимся по всему диску, длительности поиска дорожек могут оказаться более продолжительными. В любом случае, добиваясь минимального времени поиска, вы улучшаете производительность вашей системы.

Время поиска и задержка вращения добавляются ко времени, необходимому для выполнения операции ввода-вывода и, следовательно, снижают производительность дискового накопителя. Для накопителей со скоростью вращения 10000 об/мин, задержка вращения составляет около 3 мс. Время поиска нужной дорожки зависит от размера и скорости дискового накопителя и варианта осуществляемого поиска.

Время перехода головки на соседнюю дорожку (track-to-track seek time) определяет время перехода на другую дорожку при осуществлении операций последовательного ввода-вывода. У типичных 9 Гб дисков со скоростью вращения 10000 об/мин время перехода головки с дорожки на дорожку составляет около 0,8 мс. Как видите, для дисков со временем перехода головок на соседнюю дорожку 0,8 мс, задержка вращения составляет около 3 мс и является более существенным фактором, оказывающим влияние на производительность дискового накопителя. Если операции ввода-вывода применяются к дисковому накопителю достаточно быстро, то накопитель сможет прочитывать за один раз соседние дорожки или даже прочитывать или записывать дорожку целиком за один раз. Однако так бывает не всегда. В некоторых ситуациях операции ввода-вывода запрашиваются недостаточно быстро, и на каждый запрос из серии последовательных запросов приходится по обороту диска. То, что будет происходить на самом деле, зависит от конструкции и от скорости контроллера дискового накопителя.

Среднее время поиска дорожки диска (average seek time) – это усредненное время, необходимое для перехода головок между двумя произвольно выбранными (random) дорожками диска. Исходя из таблиц с техническими характеристиками типичных дисков со скоростью вращения 10000 об/мин, их время поиска составляет около 6 мс. Поскольку почти все операции ввода-вывода, генерируемые SQL Server, будут относиться к произвольным участкам диска, то ваши дисковые накопители будут выполнять множество операций произвольного ввода-вывода.

Максимальное время поиска для дисков данного типа может достигать 13 мс. Поиск дорожки имеет максимальную длительность при переходе от самой внутренней дорожки пластины к самой внешней дорожке или наоборот. Такая ситуация называется поиск по всему диску (full-disk seek). Но при обычной работе поиск нужной дорожки не будет поиском по всему диску, особенно когда диск не заполнен до конца.

Технические характеристики накопителей на жестких дисках

В данном разделе вы узнаете, насколько быстро дисковые накопители могут выполнять различные виды операций ввода-вывода. Чтобы оценить скорость выполнения операций ввода-вывода, необходимо знать некоторые сведения о дисковом накопителе. Большинство этих сведений можно найти в технических описаниях дисков, сообщаемых их производителями. В данной лекции в качестве примера будут взяты технические характеристики накопителя с емкостью 9,1 Гб и скоростью вращения 10000 об/мин. Другие технические характеристики этого типичного дискового накопителя перечислены в табл. 5.1.

Технические характеристики дискового накопителя (пример)
Техническая характеристика Значение Описание
Емкость диска 9.1 Гб Емкость неформатированного диска
Скорость вращения 10000 об/мин Скорость, с которой вращается диск
Скорость передачи данных 40 Мб/с Скорость шины SCSI
Среднее время поиска 5,2 мс (для чтения), 6 мс (для записи) Средняя продолжительность времени, необходимого для поиска нужной дорожки (при операциях произвольного ввода-вывода)
Время перехода головки на соседнюю дорожку 0,6 мс (для чтения), 0,9 мс (для записи) Продолжительность времени, необходимого для перехода на соседнюю дорожку (при операциях последовательного ввода-вывода)
Время поиска по всему диску 12 мс (для чтения), 13 мс (для записи) Продолжительность времени, необходимого для перехода от самого внутреннего сектора диска к самому внешнему сектору, или наоборот
Средняя задержка 2,99 мс Средняя задержка вращения
Средняя длительность работы до отказа 1 000 000 часов Средний срок службы дискового накопителя

А теперь мы расскажем, как при помощи подобных технических характеристик вы сможете оценить производительность накопителя на жестких дисках.

Производительность накопителя на жестких дисках

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

  • времени, необходимого для поиска нужной дорожки (чтобы головки переместились к дорожке, на которой хранятся данные);
  • задержки вращения (времени, необходимого для поворота диска, чтобы данные подошли к головкам);
  • времени, необходимого электронным схемам для передачи данных с дискового накопителя на его контроллер.
  • Поэтому время, необходимое для выполнения операции ввода-вывода представляет собой сумму длительностей исполнения описанных здесь этапов плюс время для обработки дополнительных нагрузок в драйвере устройства и в операционной системе. Помните, что итоговая длительность операций ввода-вывода зависит главным образом от того, как производятся операции ввода-вывода: последовательно или произвольно. Производительность последовательных операций ввода-вывода зависит от длительности перехода на соседнюю дорожку. Производительность операций произвольного ввода-вывода зависит от среднего времени поиска.

    Последовательный ввод-вывод

    При последовательном вводе-выводе происходит доступ к данным, расположенным на диске рядом с предыдущими данными. Так как переход головок к соседней дорожке выполняется гораздо быстрее, чем переход к произвольной дорожке, то при выполнении последовательного ввода-вывода можно достичь гораздо большей производительности. Чтобы вы представили себе возможную скорость выполнения последовательного ввода-вывода, рассмотрим пример.

    Как мы уже упоминали, типичному дисковому накопителю для выполнения перехода головок к соседней дорожке потребуется около 0,9 мс. Прибавив это время к величине задержки вращения (2,99 мс), вы можете сделать вывод, что каждая операция ввода-вывода займет приблизительно 3,89 мс. Такая длительность теоретически позволяет выполнять 264 операции последовательного ввода-вывода в секунду, т.к. одна секунда содержит 264 интервала времени по 3,89 мс. Но на производительность последовательного ввода-вывода влияют и другие факторы, такие как ограничение пропускной способности интерфейса SCSI 40 Мб/с и компоненты операционной системы: файловая система и драйвер устройства. Эта дополнительная нагрузка определяет максимальную производительность последовательного ввода-вывода, допустимую для данного дискового накопителя, составляющую около 250 операций в секунду (это число зависит от размера передаваемых данных). Как вы узнаете в лекции 6, если ваш диск передает данные со скоростью, превышающей 85% от его производительности, то будут образовываться очереди, поэтому максимальная рекомендуемая производительность ввода-вывода составит 225 операций в секунду.

    Произвольный ввод-вывод

    При произвольном вводе-выводе головки дискового накопителя должны считывать данные с произвольных участков диска. Из-за этих произвольных перемещений головок происходит снижение производительности. Давайте снова вернемся к нашему примеру дискового накопителя. Пусть теперь головки затрачивают не по 0,8 мс, переходя на соседние дорожки, а перемещаются произвольным образом по всему диску. Для поиска произвольной дорожки потребуется в среднем около 6 мс, что в 7,5 раза длительней перехода к соседней дорожке. Для типичной операции произвольного ввода-вывода понадобится примерно 6 мс (в среднем) на перемещение головок к дорожке с данными и еще 2,99 мс на задержку вращения, что составит в сумме 8,99 мс, т.е. теоретически максимально может производиться 111 операций ввода-вывода в секунду (т.к. в одной секунде содержится 111 интервалов времени по 8,99 мс). Далее, мы уже говорили, что если возможности ввода-вывода для диска задействуются более чем на 85%, то образуются очереди. Поэтому максимальная рекомендуемая производительность ввода-вывода составит 94 операции в секунду. А если согласиться с эмпирическим правилом для учета нагрузки на контроллер, то следует ограничить ввод-вывод для данного дискового накопителя 85 операциями ввода-вывода в секунду.

    Когда дисковый накопитель выполняет произвольный ввод-вывод, нормальная задержка (время, необходимое для выполнения одной операции ввода-вывода) составит 8,99 мс. Если обращения к диску станут производиться чаще, чем он сможет их обрабатывать, то начнут образовываться очереди и задержка вырастет (см. рис. 5.4). Как видите, чем ближе количество операций в секунду к рекомендованной максимальной производительности накопителя, тем длительней будет задержка.

    (рис 5.4) Количество операций ввода-вывода в секунду как функция задержки

    На самом деле, если вы достигните 100-процентного задействования возможностей диска, то очереди возникнут обязательно, а общая производительность резко снизится. Как вы прочтете в нашей книге позднее, SQL Server, как и любая другая система управления реляционными базами данных, очень сильно зависит от задержек ввода-вывода. Если для выполнения операций ввода-вывода требуется чрезмерно много времени, то производительность SQL Server сильно снизится (деградирует) и могут возникнуть такие проблемы, как блокировка (blocking) и зависание (deadlock). Когда поток ждет исполнения операции ввода-вывода, он может удерживать блокировки. До тех пор, пока операция ввода-вывода не будет исполнена, блокировка будет сохраняться, что и является причиной данных проблем.

    Способы преодоления ограниченных возможностей дисков

    Как же можно преодолеть ограничения, связанные с производительностью дисковых накопителей? На самом деле, здесь нет ничего хитрого. Следуйте советам, приведенным ниже, и вы сможете создать подсистему ввода-вывода с оптимальной производительностью:

  • Выделяйте отдельно операции последовательного ввода-вывода. Выделяйте отдельные дисковые накопители для тех компонент, которые по своей природе производят последовательный ввод-вывод, и тогда вы сможете воспользоваться этой их особенностью. Примером файла, доступ к которому осуществляется в последовательном порядке, является журнал транзакций. Если вы поместите на одном диске более одного файла, доступ к которому осуществляется в последовательном порядке, то операции ввода-вывода станут не последовательными (с переходом головок на соседнюю дорожку), а произвольными, т.к. дисковый накопитель будет производить поиск среди разнообразных фрагментов последовательных записей.
  • Распределяйте операции произвольного ввода-вывода. Так как по своей сути операции ввода-вывода носят произвольный характер, то вы можете снизить нагрузку на подсистему ввода-вывода, добавляя дополнительные дисковые накопители. Если вы создадите систему с достаточно большим количеством дисковых накопителей для обслуживания операций произвольного ввода-вывода, то проблемы с производительностью не возникнут. В лекции 6 мы расскажем, как определить потребное количество дисков и как их следует конфигурировать.
  • Массивы RAID

    Как вы понимаете, если просто добавлять в систему новые и новые дисковые накопители, то с нею будет очень сложно работать. Поэтому, вместо того, чтобы добавлять десятки или сотни отдельных дисковых накопителей, многие пользователи предпочитают применять массивы RAID (Redundant Array of Independent Disks, массивы независимых дисковых накопителей с избыточностью). Массивы RAID могут быть реализованы с использованием программных средств и имеющихся у вас устройств ввода-вывода, либо могут быть приобретены как аппаратные устройства RAID. В этом разделе мы познакомим вас с массивами RAID и расскажем о том, как они работают.

    Как ясно из самого их названия, массивы RAID содержат в себе два или несколько дисковых накопителей, образуя тем самым массив дисковых накопителей. Операционная система воспринимает весь этот массив как один логический диск. Этот логический диск называют также дисковый том, потому что он является набором дисков, кажущихся одним диском. Для пользователей, для приложения и даже (если применяется аппаратный массив RAID) для Microsoft Windows 2000 массив RAID воспринимается как один диск. Во многих случаях, однако, этот один диск будет иметь гораздо больший объем, чем любой из дисков, имеющихся в продаже. Но благодаря массивам RAID можно создавать не только большие логические диски, но также, во многих из конфигураций RAID (уровнях RAID), обеспечивать также и отказоустойчивость логического диска. Эта отказоустойчивость позволяет диску RAID сохранять работоспособность даже при отказе одного или нескольких из отдельных дисковых накопителей, составляющих массив RAID. В следующих разделах мы покажем, как достигаются такие возможности, и расскажем о характеристиках различных уровней RAID.

    Мы уже сказали, что массивы RAID могут быть реализованы программно; фактически, Windows 2000 поставляется вместе с программным обеспечением для RAID. Но в данной лекции мы в основном будем рассказывать об аппаратных реализациях RAID, потому что они обладают дополнительными функциональными возможностями. Мы расскажем об этих возможностях в следующих двух разделах и познакомим вас с функциональными возможностями и характеристиками различных уровней RAID.

    Понятия, относящиеся к подсистеме ввода-вывода

    Аппаратные контроллеры RAID обеспечивают не только основные функциональные возможности RAID, но и некоторые дополнительные средства. Среди этих дополнительных возможностей аппаратных реализаций RAID чаще всего встречается кэш контроллера. В этом разделе вы узнаете о кэше контроллера, кэшах дисковых накопителей и о разнице между внутренними и внешними массивами RAID. Кроме того, вы узнаете о новой технологии ввода-вывода – сетях хранения данных SAN (Storage Area Network). В данном разделе мы также рассмотрим некоторые разнообразные вопросы, имеющие отношение к контроллерам RAID, к дисковым накопителям и к пропускной способности устройств ввода-вывода.

    Способы преодоления ограниченных возможностей дисков

    Чтобы улучшить производительность ввода-вывода, многие производители поставляют контроллеры, имеющие кэши. Кэш контроллера – это оперативная память, установленная в контроллере дисковых накопителей. Этот кэш применяется для выполнения двух задач:

  • Кэширование записи. Поскольку контроллер имеет свою собственную память, то контроллер может сообщать операционной системе (а следовательно, и SQL Server), что операция ввода-вывода завершилась, как только данные будут записаны в кэш, что значительно повышает производительность записи.
  • Кэширование упреждающего чтения. Другой способ применения контроллера кэша – это чтение данных в дополнение к запрошенным данным. Это делается в предположении, что вскоре может поступить запрос на эти дополнительные данные. Если это случится, то время отклика резко сократится.
  • Как вы узнаете позднее в данной лекции, производительность записи может оказаться критически важной, особенно, когда вы применяете массивы RAID уровня 5. В большинстве случаев контроллер кэша является большим достоинством. Но есть два момента, о которых мы должны вас предостеречь:

  • Не пользуйтесь кэшированием записи, если вы не имеете батарейную поддержку бесперебойного электропитания. Большинство контроллеров с кэшированием имеет батарею или предусматривает возможность применения батареи. Благодаря этой батарее данные в кэше не пропадут при отказе электропитания. Без батареи данные из кэша пропадут, что может повлечь повреждение базы данных.
  • В редких случаях, когда массив RAID работает на грани своей мощности, кэширование записи может привести к ухудшению производительности чтения. Это происходит из-за того, что приоритет отдается контроллеру записи, для того, чтобы освободить кэш.
  • Кэши дисковых накопителей

    Большинство дисковых накопителей тоже содержит кэш с оперативной памятью. Этот кэш имеет меньший объем, чем кэш контроллера. Он может хранить одновременно немного запросов, благодаря чему дисковый накопитель может самостоятельно выполнить лифтовую сортировку (elevator sorting). Но так как этот кэш совсем маленький (обычно – только несколько килобайт), то он не может применяться для значительного упреждающего чтения или для кэширования значительных объемов данных. Многие поставщики контроллеров RAID и контроллеров SCSI не разрешают изменять состояние этого кэша, но, однако, некоторые производители массивов RAID все же разрешают пользователям включать либо выключать этот кэш.

    Внутренние и внешние массивы RAID

    Имеется два основных типа систем RAID: внутренние и внешние. Эти термины описывают, где находятся алгоритмы работы массивов RAID. В большинстве систем алгоритмы работы RAID находятся на контроллере, который установлен в стойке корпуса компьютера. Такие системы RAID называются внутренними. А у внешней RAID-системы алгоритмы работы находятся в запоминающем устройстве или в запоминающих устройствах, в которых размещены дисковые накопители. Это различие показано на рис. 5-5. Каждый тип систем имеет свои особенности и характеристики. Однако различия между внутренними и внешними системами RAID не будут играть значительную роль в материале данной лекции. Мы рассказали об этих двух разновидностях контроллеров RAID только для полноты изложения. В следующем разделе вы узнаете о различных уровнях RAID. Эти уровни значительно важнее в классификации контроллеров RAID.

    (рис 5.5) Внутренние и внешние системы RAID

    Сети хранения данных (SAN)

    Одной из новейших технологий, появившихся на рынке, является SAN (storage area network, сеть хранения данных). Основой SAN является большая внешняя система RAID, которой могут пользоваться совместно несколько компьютеров. Из-за этого в названии технологии появилось слово network – сеть. Благодаря SAN вы можете консолидировать (собрать воедино) все запоминающие устройства и снизить расходы, осуществляя работу с системой и поддержку системы в одном месте.

    Технология SAN имеет довольно простую концепцию. Внешняя система RAID соединяет адаптер главной шины (HBA, host bus adapter) непосредственно с подсистемой RAID (см. рис. 5.6). В сети SAN происходит соединение нескольких адаптеров главной шины через коммутатор, по крайней мере, с одной внешней системой RAID. В такой конфигурации все компьютеры, входящие в сеть SAN, могут осуществлять доступ к подсистеме RAID.

    (рис 5.6) Система SAN

    Когда мы писали нашу книгу, несколько компьютеров не могли пользоваться совместно одним логическим диском в составе SAN. Программное обеспечение SAN производит сегментацию дисковой памяти, сопоставляя каждому из компьютеров свой логический диск. Однако у SAN имеются следующие достоинства:

  • Кластеризация. Кластеризация в SAN очень проста, так как SAN уже является внешним RAID-контроллером.
  • Консолидация запоминающих устройств. Благодаря наличию централизованного хранилища данных обслуживание запоминающих устройств становится проще.
  • Более рациональное использование дисковой памяти. Вместо того чтобы резервировать дополнительные дисковые накопители на каждом из компьютеров, вы можете продуктивно пользоваться этой дисковой памятью со многих компьютеров.
  • Отказоустойчивость. Все компьютеры, имеющие доступ к SAN, могут пользоваться подключенными к сети резервными дисковыми накопителями, которые немедленно вступают в строй вместо отказавших.
  • Пропускная способность контроллера и шины

    Вы должны оценить не только ограничения, связанные с дисковым накопителем, но и ограничения пропускной способности шины ввода-вывода (обычно это SCSI или Fibre Channel). Так как шины работают с заданной тактовой частотой и имеют определенное количество разрядов данных (32 бита, 64 бита и т.д.), то максимальная пропускная способность ограничена некоторым фиксированным значением. Ваши потребности могут достичь до пропускных способностей контроллера, шины PCI или шины ввода-вывода контроллера или превысить их. Вы можете избежать этого, распределив контроллеры по нескольким шинам PCI вашего компьютера. Большинство компьютеров сейчас выпускается с тремя и более шинами PCI.

    Подсистемы ввода-вывода высшего класса

    Компании, которым необходимо обеспечивать доступность в течение 99,99% времени и более в сочетании с максимальной производительностью, часто обращаются к поставщикам вроде фирмы EMC. Такие поставщики предлагают сложные подсистемы ввода-вывода, содержащие кэши объемами в несколько Гб и множественные каналы для передачи данных от компьютеров к дисковым накопителям. Множественные каналы обеспечивают избыточность. Если какая-либо компонента системы откажет (например, откажет канал ввода-вывода, контроллер или кэш), то подсистема ввода-вывода не прекратит свое функционирование. При тщательном планировании состава таких подсистем ввода-вывода, они могут обеспечить высочайший уровень производительности и надежности.

    Лифтовая сортировка

    Лифтовая сортировка (elevator sorting) – это метод для обеспечения большей эффективности операций произвольного ввода-вывода. Когда диск получает произвольные запросы ввода-вывода, головки должны перемещаться произвольным образом по дорожкам диска, внутрь и наружу. Из-за этих операций произвольного ввода-вывода возникают задержки, мы уже рассказывали вам об этом. Многие из RAID-контроллеров поддерживают лифтовую сортировку, благодаря которой поиск произвольных дорожек становится более эффективным. Когда на контроллере, поддерживающем лифтовую сортировку, собрались в очереди несколько запросов ввода-вывода, то операции ввода-вывода могут быть отсортированы таким образом, чтобы избавиться от лишних перемещений головок. Движения головок, оптимизированные при помощи лифтовой сортировки, напоминают движения лифта, забирающего попутных пассажиров при перемещении между этажами в нужном направлении.

    Представьте, что было бы, если бы лифт обслуживал пассажиров строго в том порядке, в котором они нажимали бы на кнопки. Тогда лифт проезжал бы мимо нужных этажей, вместо того, чтобы остановиться и дать людям войти или выйти. Настоящий лифт работает более эффективно, потому что он делает остановки на нужных этажах. Алгоритмы лифтовой сортировки работают примерно так же. Если в очереди имеется более одной операции ввода-вывода, то контроллер найдет наиболее эффективный путь движения головок, который очистит очередь (рис. 5.7).

    (рис 5.7) Лифтовая сортировка

    Как видите, благодаря лифтовой сортировке накопитель может более эффективно производить переход головок к нужным дорожкам. Общее время поиска дорожек сокращается (хотя время поиска дорожки для отдельных операций иногда может и увеличиться). Однако для работы лифтовой сортировки вы должны иметь на том контроллере или на дисковом накопителе, для которых она будет производиться, несколько или даже много операций ввода-вывода, ожидающих своего исполнения. Такая ситуация часто возникает при чрезмерной нагрузке на подсистему ввода-вывода. Диск, работающий оптимальным образом, во многих случаях имеет лишь одну или две операции ввода-вывода, ожидающие своего исполнения, что делает сомнительной полезность лифтовой сортировки.

    Надежность дисков

    Дисковые накопители являются одними из немногих компонент компьютера, имеющими подвижные детали. Диск вращается с большой скоростью и работает нагретым до высокой температуры. Среди деталей накопителя имеются несколько двигателей и подшипников, которые рано или поздно, но обязательно износятся. Среди технических характеристик дискового накопителя имеется средняя продолжительность наработки на отказ (MTBF, mean time between failures). Данная техническая характеристика показывает, сколько в среднем прослужит этот накопитель. Однако это число показывает лишь среднее время. При одинаковой средней продолжительности наработки на отказ срок службы у разных дисков будет неодинаковым. Типичные современные диски могут иметь среднюю продолжительности наработки на отказ равную миллиону часов, т.е. 114 годам. Это долгий срок, но некоторые диски с таким показателем MTBF прослужат гораздо дольше, а некоторые – сломаются очень быстро. Дело в том, что диски содержат подвижные детали, и поэтому они подвержены износу и могут ломаться.

    Обзор типовых уровней RAID

    Главной особенностью массивов RAID является то, что логический диск формируется из двух или нескольких физических дисковых накопителей и воспринимается Windows 2000 (и Performance Monitor) как один физический дисковый накопитель. Логический дисковый накопитель может содержать многие сотни Гб данных, хотя изготовлять дисковые накопители емкостью в 100 Гб не удается (пока что!).

    Большинство уровней RAID, о которых мы вам расскажем, применяют расслоение данных (data striping), при помощи которого данные с двух или нескольких дисков объединяются в один большой логический RAID-диск. Это делается так: первый фрагмент данных берется с первого диска, второй кусок данных – со второго диска, и так далее. Эти фрагменты данных называются слои (stripes) или куски (chunks). Размер слоев данных задается контроллером. Некоторые контроллеры разрешают вам конфигурировать размеры слоев, а некоторые применяют слои фиксированного размера.

    Название "слой" ("кусок") применяется как к фрагментам данных на каждом из отдельных дисков, так и к набору слоев (кусков) для всей совокупности дисков (рис. 5.8).

    Таким образом, термин слой может применяться, когда речь идет о данных на каком-либо одном из дисковых накопителей (в этом случае говорят слой диска). Так говорят и о наборе связанных данных с разных дисков (а в этом случае говорят слой RAID ). Помните об этом, когда будете читать данную лекцию и другие места, где рассказывается о массивах RAID.

    (рис 5.8) Слои RAID

    Уровень RAID – это обозначение типа конфигурации массива RAID, поэтому он определяет характеристики массива RAID, не описываемые алгоритмами, содержащимися во внутренних или внешних логических компонентах. Одной из наиболее важных характеристик, определяемых уровнем RAID, является отказоустойчивость. Отказоустойчивость – это способность системы RAID продолжать работать даже после отказов дисковых накопителей, входящих в ее состав. Отказоустойчивость является основной целью, ради которой создаются контроллеры RAID. Так как ваши данные представляют ценность, то вам следует защищать их от возможных отказов дисков. В данном разделе мы изучим наиболее широко применяемые уровни RAID: как они работают, какая у них отказоустойчивость и насколько быстро происходит ввод-вывод данных. Помимо этих уровней RAID, есть и другие, но они применяются редко и мы не будем их рассматривать. Мы расскажем лишь о наиболее широко применяемых уровнях RAID.

    RAID 0

    RAID 0 являются самым "фундаментальным" из уровней RAID, он обеспечивает только расслоение дисков. Куски данных создаются на каждом из дисковых накопителей, а размер кусков задается контроллером. Для составления большого логического диска применяется метод кругового распределения кусков данных по отдельным дискам массива RAID 0 (рис. 5.9).

    (рис 5.8) RAID 0

    Хотя RAID 0 и причисляется к массивам RAID, однако данный уровень RAID не обеспечивает избыточности (redundancy, вспомните расшифровку аббревиатуры RAID: Redundant Array of Independent Disks ). Раз избыточности нет, то и отказоустойчивость тоже отсутствует. Если в массиве RAID 0 откажет хотя бы один диск, то все данные будут потеряны. Отказ одного из дисков будет сравним с уничтожением каждого четвертого слова в книге. Если произойдет такая потеря данных, то массив RAID станет бесполезным.

    Рекомендации по применению RAID 0

    Как правило, нельзя рекомендовать применять RAID 0 для хранения файлов данных SQL Server. Так как данные в базе данных очень важны для вашего бизнеса, то их потеря может погубить вашу фирму. Массивы RAID 0 не защищают от отказов дисков, поэтому вам не следует применять их ни для каких критически важных компонент, таких как операционная система, журнал транзакций или файлы базы данных.

    Примечание.Диски вращаются с большими скоростями и работают в условиях высоких температур. Так как они содержат подвижные детали, то когда-нибудь они обязательно сломаются. Поэтому важно, чтобы файлы данных SQL Server были бы защищены от отказов дисков при помощи отказоустойчивой системы.

    RAID 1

    RAID 1 являются "фундаментальным" уровнем RAID, обеспечивающим отказоустойчивость. В алгоритме RAID 1, называющемся также "зеркальное отражение", предусмотрено изготовление дублирующей копии вашего диска с данными. Дублирующая копия содержит ту же самую информацию, что имеется и на первоначальном диске (рис. 5.10). При отказе диска в строй вступит диск-дубль, и вы не потеряете данные. Так как на каждом диске (и на первоначальном, и на зеркале) хранятся все данные, то расслоение данных отсутствует. В RAID 1 второй диск применяется для дублирования первого, поэтому общий объем логического тома RAID 1 совпадает с объемом одного дискового накопителя. RAID 1 является дорогостоящим решением: при удвоении количества применяемых дисков вы взамен не получаете никакого увеличения объема дисковой памяти, но зато он обеспечивает высокий уровень отказоустойчивости.

    (рис 5.10) RAID 1

    Для томов RAID 1 операция ввода-вывода не считается завершенной, пока контроллер не запишет данные на оба дисковых накопителя. Пока этого не произойдет, нет и безопасности для данных при отказе одного из дисков. После того, как данные будут записаны на оба дисковых накопителя, восстановление данных станет возможным при отказе любого из дисков. Поэтому, если запись данных на один из дисков займет времени больше, чем запись этих же данных на другой диск, то общая задержка будет равна максимальной из двух задержек для разных дисков.

    Запись данных на оба диска также снижает производительность логического дискового накопителя. При подсчете количества операций ввода-вывода, производимых на всех дисках массива, нужно умножать количество записей на 2. Чтение данных производится только с одного из дисков. Скорости работы дисков могут отличаться, потому что головки одного из дисков могут оказаться в другом положении, чем головки другого диска, и из-за этого время поиска нужной дорожки может оказаться более длительным. Положение головок может быть разным из-за функции уровня RAID 1, называющейся параллельный поиск (split seek).

    Благодаря параллельному поиску, диски, входящие в состав массива RAID 1, могут производить чтение дисков независимо друг от друга. Параллельный поиск возможен потому, что чтение может производиться каждый раз лишь только на одном из дисков. Большинство из производителей контроллеров поддерживают параллельный поиск. Применение параллельного поиска повышает производительность, потому что обработка ввода-вывода распределяется по двум дискам, вместо одного диска. Но, из-за того, что головки движутся независимо, а запись должна быть выполнена обеими головками, общая задержка записи равна большей из двух задержек для каждого из отдельных дисков.

    Рекомендации по применению RAID 1

    RAID 1 обеспечивает высокую степень отказоустойчивости и высокую производительность. RAID 1 является прекрасным решением для случаев, когда все данные способны уместиться на одном диске. Ниже даны некоторые рекомендации по применению RAID 1:

  • Применяйте RAID 1 для диска, на котором содержится ваша операционная система, потому что ее воссоздание занимает очень много времени. RAID 1 хорошо подходит для этой задачи еще и потому, что операционная система обычно может уместиться на одном диске.
  • Применяйте RAID 1 для журнала транзакций. Обычно журнал транзакций SQL Server может уместиться на одном диске. Кроме того, для журнала транзакций применяется в основном последовательная запись. Чтение из журнала транзакций производиться только из-за операций отката. Поэтому, если вы выделите для журнала транзакций отдельный том RAID 1, то вы достигните высокой производительности.
  • Для томов RAID 1 следует применять кэширование записи. Так как запись для RAID 1 не завершена до тех пор, пока не будет выполнена запись на обоих дисках, то производительность записи может быть повышена при помощи кэша записи. Но если вы применяете кэш записи, обязательно защищайте данные в нем при помощи бесперебойного электропитания.
  • Из дальнейшего материала в данной лекции вы узнаете, что в случаях, когда для хранения данных требуется более одного диска, можно применять и другие решения, обеспечивающие отказоустойчивость. RAID 1 является прекрасным решением для случаев, когда требуется отказоустойчивость и данные способны уместиться на одном диске.

    RAID 5

    RAID 5 являются отказоустойчивым уровнем RAID, в котором для защиты данных применяется контроль по четности. Каждый слой данных (stripe) RAID создает информацию для контроля по четности, хранимую на одном из дисков в составе слоя. В сочетании с другими дисками в составе слоя RAID, информация для контроля по четности может быть использована для воссоздания данных с любого из дисков слоя. Поэтому массивы RAID 5 устойчивы к отказу одного из дисковых накопителей, входящего в состав массива. Информация для контроля по четности распределяется поочередно по всем дискам массива RAID (рис. 5.11).

    (рис 5.11) RAID 5

    Достоинством RAID 5 является то, что дисковая память, доступная при применении этого уровня RAID, составляет (n-1)*(объем одного диска) где n равно количеству дисков в массиве. Так, массив RAID 5, составленный из 10 дисков, будет иметь объем, как у 9 дисков, что делает его экономичным и в то же время отказоустойчивым решением.

    К сожалению, массивы RAID 5 имеют недостатки, связанные с производительностью. Обработка информации для контроля по четности приводит к дополнительной нагрузке на компьютер. При записи данных в массив RAID 5 требуется чтение как слоя данных с целевого диска, так и слоя с информацией для контроля по четности, затем потребуется перерасчет информации контроля по четности, а затем должна быть произведена запись обоих слоев данных. Таким образом, как видите, запись в массив RAID 5 производит фактически четыре физических операции ввода-вывода.

    Контроль по четности в массивах RAID 5

    В массивах RAID 5 для данных каждого из слоев на каждом из дисковых накопителей создается бит контроля по четности. Бит контроля по четности является дополнительным элементом данных, благодаря которому, имея биты из набора данных, по которому он был создан, можно узнать другие биты из набора данных. Бит контроля по четности создается так: все остальные биты суммируются, а затем определяется, какое значение он должен иметь, чтобы получилось четное (или нечетное число). Бит контроля по четности, в сочетании с остальными битами, может применяться, чтобы восстановить значение потерянного бита.

    Давайте разберем работу контроля по четности на примере. В нашем примере мы будем считать, что система RAID 5 содержит пять дисковых накопителей.

    Каждый дисковый накопитель, по существу, составлен из некоторого количества битов, от начала до конца слоя диска. Бит четности создается в зависимости от значений битов с каждого из дисковых накопителей.

    В нашем примере будем считать, что контроль по четности должен обеспечить четность суммы битов, т.е. сумма всех битов должна давать результат 0 (имеется в виду сложение по модулю 2, т.е. результат сложения битов должен быть четным. – Прим. пер.). Если первый бит первого диска равен 0, первый бит второго диска равен 1, первый бит третьего диска равен 1, первый бит четвертого диска равен 1, то бит контроля по четности для этих битов должен быть равен 1, чтобы дополнить эти биты до четного числа (см. табл. 5.2).

    Пример контроля по четности для массива RAID
    диск 1: бит 1 диск 2: бит 1 диск 3: бит 1 диск 4: бит 1 диск 5: бит контроля по четности Сумма битов
    0 1 1 1 1 4(четная)

    Контроль по четности следует понимать как действия, применяемые к отдельным битам. Хотя слой диска содержит много битов, контроль по четности для отдельных битов позволит восстановить все данные. Биты контроля по четности, перечисленные в табл. 5.2, создаются на самом деле по отдельным битам, составляющим слои данных. Несмотря на то, что дисковые накопители разбиваются на куски данных (слои), с возможными размерами по 64 Кб и более, но контроль по четности, как мы вам показали, может быть произведен на уровне отдельных битов. На самом деле контроль по четности вычисляется при помощи алгоритмов более сложных, чем тот, который мы сейчас описали.

    Давайте теперь предположим, что диск 3 сломался. В этом случае бит контроля по четности вместе с битами других дисков может быть использован для восстановления отсутствующего бита диска 3, потому что их сумма должна дополнять неизвестный бит диска 3 до четного числа.

    Создание данных для контроля по четности

    Как мы уже объяснили в данном разделе, данные контроля по четности, применяемые в массивах RAID 5, составляются из битов, дополняющих до четного числа сумму одинаково отстоящих от начала битов всех дисковых накопителей. Но вам, конечно,понятно, что было бы непрактичным, чтобы контроллер массива считывал бы все данные со всех дисковых накопителей при каждой операции ввода-вывода. Это было бы неэффективно и медленно.

    При создании массива RAID 5 происходит первоначальное обнуление данных и создание битов контроля по четности. В результате создается набор дисковых накопителей без данных, но с полным набором битов контроля по четности.

    С этого момента, всякий раз при записи данных на дисковый накопитель, должно производиться чтение данных с диска данных и с диска контроля по четности. Новые данные должны сравниваться со старыми данными, и если какой-либо бит данных поменялся, то данные контроля по четности для этого бита тоже должны быть изменены. Эта проверка производится при помощи логической операции "исключающее ИЛИ" ( XOR, exclusive OR ).Поэтому требуется чтение данных только с диска данных и диска контроля по четности, а не со всех дисков массива. Как только описанная операция вычисления изменений данных контроля по четности будет завершена, запись должна быть произведена на оба диска, т.к. операция с данными контроля по четности затрагивает весь слой данных. Таким образом, для выполнения каждой записи в том RAID 5 производятся четыре физических операции ввода-вывода: два чтения (одно – чтение с диска данных, другое – чтение с диска контроля по четности) и две записи (сами данные и данные контроля по четности). Но в массивах RAID 5 данные контроля по четности равномерно распределены по всем дисковым накопителям, поэтому и нагрузка на накопители будет распределена равномерно.

    Рекомендации по применению RAID 5

    Так как запись в массив RAID 5 требует дополнительных операций ввода-вывода, то этот уровень RAID можно рекомендовать для дисковых томов, используемых преимущественно для чтения. Поскольку данные контроля по четности равномерно распределены по многим дискам массива, то для операций чтения используются все диски. С учетом этих особенностей можно дать следующие рекомендации:

  • Применяйте RAID 5 для томов, предназначенных только для чтения. Любой том дисков, операции записи на котором превышают 10% от объема ввода-вывода, не следует реализовывать как RAID 5.
  • Применяйте кэширование записи для томов RAID 5. Так как запись для RAID 5 не завершена до тех пор, пока не будут выполнены два чтения и две записи, то при использовании кэша записи время отклика для записи может быть сокращено. (Используя кэш записи, обязательно применяйте батарею для бесперебойного электропитания.) Но надо отметить, что если поток записываемых данных превысит производительность записи дисков, то кэширование записи вам не поможет. В любом случае, вы не должны превышать пропускную способность дисков.
  • Как видите, RAID 5 является экономичным решением, но вы расплачиваетесь за это производительностью. А насколько велика может быть эта цена, вы узнаете из дальнейшего материала данной лекции.

    RAID 10

    (рис 5.12) RAID 10

    Как и у RAID 1, каждая операция записи RAID 10 потребует двух физических операций ввода-вывода – по одной операции записи на каждый диск зеркальной пары. Поэтому, при подсчете количества операций ввода-вывода в расчете на один диск, нужно умножать количество записей на 2. Как и для массивов RAID 1, для RAID 10 операции записи не считаются завершенными, пока не будут выполнены обе записи, это может увеличить длительность задержки записи. Но так же, как и для RAID 1, большинство контроллеров поддерживает параллельный поиск для RAID 10.

    RAID 10 обеспечивает высокую степень отказоустойчивости. На самом деле, массив может остаться работоспособным даже при отказе более чем одного диска. Конечно, отказ дисков, входящих в зеркальную пару, приведет к потере данных. Если диски, входящие в разные зеркальные пары смонтированы по разным стойкам для оборудования, то отказ даже всей стойки не приведет к потере данных.

    Рекомендации по применению RAID 10

    RAID 10 обеспечивает высокую производительность и высокую степень отказоустойчивости. Уровень RAID 10 следует применять, когда нужна работа с большими томами, для которых операции записи составляют более 10% от общего объема операций ввода-вывода. Можно дать следующие рекомендации по применению RAID 10:

  • Применяйте RAID 10 всякий раз, когда операции записи составляют более 10% от общего объема операций ввода-вывода для массива RAID.
  • Применяйте RAID 10, когда производительность является критически важной. Так как в RAID 10 применяется расслоение данных, то вы будете иметь превосходную производительность.
  • Для томов RAID 10 следует применять кэширование записи. Так как запись для RAID 10 не завершена до тех пор, пока не будут выполнены обе операции записи, то благодаря применению кэша время записи может быть сокращено. Кэширование записи безопасно только когда вы применяете батарею для бесперебойного электропитания для защиты кэша.
  • Уровень RAID 10 является наилучшим отказоустойчивым решением, он обеспечивает хорошую защиту данных и высокую производительность, однако затраты на него тоже большие. Вам придется приобрести диски в двойном количестве, по сравнению с RAID 0. Если же ваш том служит главным образом для чтения данных, то можно применять RAID 5.

    Сравнение производительности уровней RAID

    Для правильного конфигурирования и настройки вашей системы RAID, вам нужно понимать различия в производительности различных уровней RAID, о которых мы рассказали в предыдущем разделе. Если вы будете понимать, как работает система RAID и какие действия она осуществляет в различных ситуациях, вы лучше сможете настраивать свою подсистему ввода-вывода. В данном разделе мы внимательно сравним различные показатели производительности, с которыми вы познакомились в предыдущем разделе. В наших примерах мы будем считать, что отдельный дисковый накопитель может выполнять 85 операций произвольного ввода-вывода в секунду.

    Производительность чтения

    Производительность чтения не сильно зависит от выбранного вами уровня RAID. Когда операция чтения применяется к массиву RAID, то каждый диск вносит свой вклад в производительность по чтению. Так как для высокой производительности основным препятствием являются операции произвольного ввода-вывода, то мы сейчас рассмотрим эту тему. Вы можете максимально повысить производительность последовательного ввода-вывода, выделив их на отдельный том. Давайте посмотрим, как происходит произвольный ввод-вывод для различных уровней RAID:

  • В томах RAID 0 данные распределены равномерно по всем дискам массива. Поэтому и операции произвольного ввода-вывода должны быть равномерно распределены по всем дискам системы. Тогда, с учетом нашего предположения, что отдельный дисковый накопитель может выполнять 85 операций произвольного ввода-вывода в секунду, массив RAID 0 из десяти дисков сможет выполнять 850 операций в секунду.
  • Тома RAID 1 поддерживают параллельный поиск, при котором операции чтения производятся обоими дисковыми накопителями. Поэтому RAID 1 может выполнять в два раза больше операций чтения, чем одиночный диск, т.е. 170 операций ввода-вывода в секунду. Если же операции чтения будут производиться чаще, то производительность снизится.
  • В системах RAID 5 данные распределяются равномерно по всем дисковым накопителям, входящим в состав массива. Даже несмотря на то, что один дисковый накопитель в каждом слое данных служит для хранения данных контроля по четности, из-за произвольных по своей природе операций ввода-вывода, используются обычно все дисковые накопители. Поэтому, как и для массива RAID 0, темп (производительность) чтения массива RAID 5 составит n*85 операций в секунду, где n – количество дисковых накопителей в массиве. Если операции чтения будут производиться в большем темпе, то производительность SQL Server снизится.
  • Массивы RAID 0, как и массивы RAID 1, поддерживают параллельный поиск. Поэтому для них максимальная производительность чтения составит n*85 операций в секунду, где n – количество дисковых накопителей. Вы могли бы инициировать запуск операций ввода-вывода с более высоким темпом, но в этом темпе исполняться они не смогут.
  • Как видите, подсчитать производительность чтения массивов RAID совсем просто. Добавляя достаточное количество дисковых накопителей, так чтобы ваши потребности в производительности ввода-вывода соответствовали этим ограничениям, вы сможете оптимизировать производительность вашей системы.

    Производительность записи

    Производительность записи очень сильно зависит от выбранного вами уровня RAID. И снова, поскольку основные трудности возникают из-за операций произвольного ввода-вывода, то мы их сейчас и рассмотрим. Вы можете максимально повысить производительность последовательного ввода-вывода, выделив их на отдельный том или тома. Давайте посмотрим, как происходит запись произвольных данных для различных уровней RAID:

  • Уровень RAID 0 лучше всего подходит для обработки операций записи без ущерба для производительности, но вы расплачиваетесь за это отказоустойчивостью. Так как в RAID 0 не применяется зеркальное дублирование или контроль по четности, то производительность RAID 0 равна просто сумме производительностей отдельных дисковых накопителей. Поэтому массив RAID 0, состоящий из десяти дисков, сможет выполнять 850 операций в секунду (с учетом нашего предположения о производительности отдельного накопителя).
  • Тома RAID 1 должны выполнять зеркальное дублирование всех данных, записываемых в массив, из-за чего одна запись в массив RAID 1 порождает две операции ввода-вывода на дисковые накопители. Поэтому массив RAID 1 имеет темп записи такой же, как и у одиночного дискового накопителя, т.е. 85 операций ввода-вывода в секунду.
  • Операции записи в массивы RAID 5 происходят еще медленней. Запись в RAID 5 порождает четыре физических операции ввода-вывода на диски. Поэтому производительность записи в массив RAID 5 в четыре раза меньше производительности записи отдельных дисковых накопителей в составе массива.
  • Массивы RAID 10 имеют такие же показатели производительности записи, как и массивы RAID 1. Каждая запись в массив RAID 10 порождает две физических операции записи. Поэтому производительность записи в массив RAID 10 в два раза меньше производительности записи отдельных дисковых накопителей в составе массива.
  • Как видите, вычислить производительность записи массивов RAID довольно сложно. Добавляя достаточное количество дисковых накопителей, так чтобы ваши потребности в производительности ввода-вывода соответствовали этим ограничениям, вы сможете оптимизировать производительность вашей системы. В следующем разделе вы узнаете, как можно подсчитать количество операций ввода-вывода на один диск в различных обстоятельствах.

    Подсчет количества операций ввода-вывода для дисков

    Чтобы определить объем нагрузки, приходящейся на отдельные дисковые накопители системы, вам придется выполнить некоторые расчеты. Если вы пользуетесь аппаратным контроллером RAID, то количество операций ввода-вывода в секунду, показываемое монитором производительности Performance Monitor означает количество операций ввода-вывода, выполняемых массивом как единым целым. Вы не увидите сведений о дополнительных операциях ввода-вывода, генерируемых контроллером и служащих для обеспечения отказоустойчивости. Фактически, Windows 2000 не замечает их выполнения, но вы должны знать о них, чтобы правильно определить количество дисковых накопителей, необходимое для обеспечения оптимальной производительности.

    RAID 0

    В массивах RAID 0 темп операций ввода-вывода на один диск вычисляется как сумма всех операций чтения и записи для массива, деленная на количество дисков в массиве. Для RAID 0 нужна лишь одна простая и понятная формула:

    количество операций на диск = (чтения + записи) / количество дисков

    RAID 1

    Для массивов RAID 1 вычисления будут несколько более сложными. Так как количество записей удваивается, то число операций ввода-вывода на один диск в секунду равно сумме количества операций чтения и удвоенного количества операций записи для массива, деленной на количество дисков в массиве (для RAID 0 – два). Нужно применять такую формулу:

    количество операций на диск = (чтения + (2 * записи)) / 2

    Запись в массивы RAID 1 происходит медленней, но они обеспечивают лучшую отказоустойчивость.

    RAID 5

    Массивы RAID 5 обеспечивают отказоустойчивость, но при записи у них получается очень большая нагрузка на диски. Операции чтения в массивах RAID 5 распределены по многим дисковым накопителям массива, но для записи приходится выполнять четыре физических операции ввода-вывода. Чтобы подсчитать количество операций ввода-вывода, приходящихся на один дисковый накопитель, надо сложить количество операций чтения и учетверенное количество операций записи, а затем разделить на количество дисков в массиве. Поэтому формула для RAID 5 будет такой:

    количество операций на диск = (чтения + (4 * записи)) / количество дисков

    RAID 10

    Скорость записи в массивы RAID 10 такая же, как в RAID 1, но зато RAID 10 обеспечивает высокую степень отказоустойчивости. Расчет для RAID 10 аналогичен расчету для RAID 1. Поскольку количество записей удваивается, то число операций ввода-вывода на один диск равно сумме количества операций чтения и удвоенного количества операций записи для массива, деленной на количество дисков в массиве. Формула для RAID 10 будет такой:

    количество операций на диск = (чтения + (2 * записи)) / количество дисков

    Сравнение различных уровней RAID

    Давайте сравним разные уровни RAID. Тогда вам станет легче понять, какой уровень RAID лучше подходит для вашей системы. Когда вы сравниваете производительность работы разных уровней RAID, одним из наиболее важных факторов, оказывающих влияние на нее, является соотношение чтения и записи. При выполнении операций чтения производительность различных уровней RAID отличается не сильно, различия относятся в основном к производительности операций записи. Также нужно учитывать, нужна ли вашей системе отказоустойчивость. И наконец, вам следует оценить соотношение стоимости системы и ее емкости. Характеристики для различных уровней RAID перечисленны в табл. 5.3.

    Сравнение уровней RAID
    Уровень RAID Производительность Отказоустойчивость Оценка стоимости
    RAID 0 Наилучшая Без отказоустойчивости Экономичный
    RAID 1 Хорошая Хорошая Дорогой
    RAID 5 Быстрая для чтения, медленная для записи Нормальная Самый экономичный из уровней, обеспечивающих отказоустойчивость
    RAID 10 Хорошая Хорошая Дорогой

    Как видите, наилучший вариант зависит от ваших потребностей. Чтобы понять различие между производительностью RAID 5 и RAID 10 при разных соотношениях чтения и записи, посмотрите табл. 5.4, в которой показаны данные для массивов RAID 5 и RAID 10, выполняющих 500 операций ввода-вывода в секунду на 10 дисковых накопителях при разных соотношениях чтения и записи.

    Сравнение RAID 5 и RAID 10
    Соотношение Чтения/Записи Операции ввода-вывода RAID 5 (Чтения + (4 * Записи)) /  Кол-во дисков Операции ввода-вывода RAID 10 (Чтения + (2 * Записи)) /  Кол-во дисков
    100% чтений

    0% записей

    (500+0)/10

    50 операций ввода-вывода на диск

    (500+0)/10

    50 операций ввода-вывода на диск

    90% чтений

    10% записей

    (450+200)/10

    65 операций ввода-вывода на диск

    (450+100)/10

    55 операций ввода-вывода на диск

    75% чтений

    25% записей

    (375+500)/10

    87.5 операций ввода-вывода на диск

    (375+250)/10

    62.5 операций ввода-вывода на диск

    50% чтений

    50% записей

    (250+1000)/10

    125 операций ввода-вывода на диск

    (250+500)/10

    75 операций ввода-вывода на диск

    0% чтений

    100% записей

    (0+2000)/10

    200 операций ввода-вывода на диск

    (0+1000)/10

    100 операций ввода-вывода на диск

    Как видите, когда соотношение чтения к записи составляет 90%:10%, нагрузка на диски для RAID 5 и RAID 10 почти не отличается. Но когда запись составляет более высокий процент в операциях ввода-вывода, нагрузка на диски массивов RAID 5 становится гораздо больше.

    Задержки ввода-вывода и SQL Server

    SQL Server очень чувствительна к задержкам ввода-вывода, потому что транзакции обрабатываются алгоритмом SQL Server одновременно. При обычной работе база данных SQL Server взаимодействует с десятками и сотнями приложений. Чтобы поддерживать эту одновременную работу, SQL Server имеет сложную систему блокировок (замков) строк, страниц, экстентов и таблиц, с которой вы познакомитесь в нашей книге. При блокировке каких-либо данных или ресурсов SQL Server, другие процессы должны ждать, пока эти данные или ресурсы не будут разблокированы.

    Если длительность выполнения операций ввода-вывода слишком велика, то эти ресурсы будут блокированы недопустимо долго, еще сильнее замедляя работу системы. Кроме того, это повышает вероятность тупиковых ситуаций (взаимоблокировок). Чем дольше выполняются операции ввода-вывода, тем дольше длятся и блокировки и тем серьезнее становятся эти проблемы. И в результате отдельные задержки могут сложиться, вызвать "эффект снежного кома" и испортить работу системы.

    Кроме того, обработка запросов станет очень медленной. Например, если на вашей системе выполняется сканирование больших таблиц, то для выполнения таких задач часто требуется чтение сотен, тысяч и даже миллионов строк в базах данных. Для миллиона операций ввода-вывода даже небольшие изменения производительности становятся очень важными. Выполнение одного миллиона операций по 10 мс займет около 2,8 часа. А если ваша подсистема ввода-вывода оказалась перегружена и каждая операция ввода-вывода требует 40 мс, то выполнение такого же запроса займет уже более 11 часов.

    Как видите, производительность SQL Server может очень сильно пострадать из-за плохого начального проектирования или плохого конфигурирования подсистемы ввода-вывода. Если вы спроектируете свою подсистему ввода-вывода так, что она будет вписываться в возможности отдельных компонент, то производительность вашей системы будет оптимальной.

    Планирование размещения дисков SQL Server

    Из материала данной лекции ясно, что вы должны правильно спланировать свою систему ввода-вывода, чтобы не допускать ее перегрузки. Перегрузка подсистемы ввода-вывода повлечет увеличение задержек ввода-вывода и падение производительности SQL Server. В данном разделе вы изучите, как построить систему SQL Server, способную работать в рамках ограничений вашей подсистемы. Сначала вы научитесь определять требования вашей системы к вводу-выводу. Затем вы изучите планирование системы, а последним этапом будет само создание вашей системы.

    Определяем требования к вводу-выводу

    Определение требований к вводу-выводу системы, существующей еще только в виде концепции, может оказаться хоть и сложным, но вполне возможным делом. Однако если у вас нет конкретных данных, на основе которых можно определить требования к вводу-выводу, то вы должны смочь собрать достаточно данных, чтобы можно было сделать обоснованное предположение. В любой ситуации, создание подсистемы ввода-вывода, неспособной к росту, будет ошибкой. Всегда предусматривайте резервы для необходимого роста мощности и производительности, рано или поздно они вам понадобятся. Вы должны спроектировать систему так, чтобы она удовлетворяла бы минимальным требованиям к объему дисковой памяти, необходимой для хранения данных, и к необходимому для вас уровню производительности. В следующем разделе вы узнаете, как определить какое количество дисков потребуется для удовлетворения этим условиям.

    Объем дисковой памяти

    Определить, сколько места на дисках потребуется для ваших данных, достаточно просто. Объем необходимого места равен сумме следующих величин:

  • Дисковой памяти, необходимой для данных.
  • Дисковой памяти, необходимой для индексов.
  • Дисковой памяти, необходимой для временных данных.
  • Дисковой памяти, необходимой для журнала транзакций.
  • Дисковая память, отводимая для данных, должна иметь достаточно места для хранения данных, которые будут добавлены в вашу базу данных. Рост базы данных в значительной степени определяется вашим бизнесом и вашими клиентами. Чтобы оценить рост вашей системы, можно проводить регулярные проверки существующей базы данных и подсчитывать, как изменился объем дисковой памяти, занимаемой базой данных. Темп роста базы данных должен измеряться несколько месяцев, чтобы можно было определить его закономерности. Рост базы данных может оказаться таким, что удивит вас.

    Для новой системы, не имеющей истории, при оценке роста, среди прочих критериев, вы можете воспользоваться количеством заказов на продукцию, умноженным на размер строки. Взяв эти показатели для нескольких периодов времени (например, месяцев или лет), вы получите грубую оценку о скорости роста файлов с данными. Это не даст вам информации о росте индексов. Объем дисковой памяти, необходимой для индексов в расчете на одну строку данных, зависит от конструкции индексов и от объема данных. Для сложного индекса требуется больше места в расчете на одну строку данных, чем для простого индекса. И решение о том, сколько времени система должна существовать в условиях роста – два года, пять лет или дольше, – принимаете вы. Вот так производится оценка, с каким объемом дисковой памяти должна быть сконфигурирована ваша подсистема ввода-вывода.

    Определившись с объемом данных, объемом индексов, объемом временной базы данных и с темпом роста, вы можете определить, сколько места на дисках вам потребуется. Затем вы должны учесть место, необходимое для обеспечения отказоустойчивости в массивах RAID. Помните, что в массивах RAID 1 и RAID 10 (с зеркальным дублированием данных) для обеспечения отказоустойчивости тратится половина физического места на дисках. В массивах RAID 5 для обеспечения отказоустойчивости тратится один дисковый накопитель, входящий в состав массива. Также помните, что объем дисков, указываемый изготовителями, обозначает емкость неотформатированного диска. Неотформатированный дисковый накопитель, маркированный, как имеющий емкость 9,1 Гб, после форматирования будет вмещать на самом деле 8,6 Гб.

    И когда вы подсчитаете объем дисковой памяти, необходимой в данный момент, и объем дисковой памяти, необходимой для будущего роста, тогда вы сможете перейти к следующему этапу: оценке производительности. Для правильного конфигурирования подсистемы ввода-вывода нужно оценивать и объем необходимой дисковой памяти, и требования к производительности.

    Производительность

    Недостаточно просто сконфигурировать систему так, чтобы она отвечала требованиям к объему необходимой дисковой памяти. Как вы уже знаете из материала данной лекции, конфигурация подсистемы ввода-вывода может серьезно ухудшить или значительно улучшить производительность вашей системы. Однако оценка требований к производительности совсем не так проста, как оценка требований к объему дисковой памяти.

    Наилучшим способом оценки производительности является изучение аналогичных приложений или систем. Эти данные могут стать отправной точкой для оценки будущих требований. Дополнительную информацию об этом вы получите в лекции 6. Предположим, что вы нашли похожую систему. Тогда для определения необходимого количества дисков вы можете воспользоваться данными, собранными при исследовании этой системы, и информацией, которую вы знаете из данной лекции. Не забудьте учесть влияние уровня RAID, применяемого в той подсистеме ввода-вывода. Следующим этапом станет планирование размещения дисков SQL Server, а после этого можно будет осуществить реализацию вашего решения.

    Планирование размещения дисков

    При планировании размещения дисков принимаются решения о том, как данные должны быть размещены на дисках, а затем пишутся сценарии SQL, которые создадут базу данных. Достоинством создания базы данных при помощи сценариев SQL, а не при помощи SQL Server Enterprise Manager является то, что вы можете пользоваться ими многократно и вносить в них изменения.

    В сценариях должно быть отражено количество логических томов, которое имеет ваша система, а также количество физических дисков в этих томах. Важно сбалансировать базу данных так, чтобы все дисковые накопители обрабатывали приблизительно равные количества операций ввода-вывода в секунду. Производительность несбалансированной системы будет ограничена возможностями самого медленного из томов. Вы должны позаботиться, чтобы журнал транзакций и файлы данных были распределены по дисковым накопителям так, чтобы обеспечивалась оптимальная производительность.

    Планирование размещения журнала транзакций

    Планирование размещения журнала транзакций очень простое. Часто наилучшим решением является использование для журнала транзакций только одного файла данных. Если вам придется добавлять к своей базе данных дополнительные файлы журналов транзакций, не забудьте, что их следует размещать на томах RAID 1 или RAID 10. Также не забудьте, что файлы журналов транзакций должны храниться отдельно от данных и от других журналов транзакций.

    Планирование размещения файлов данных

    Самый простой способ сконфигурировать вашу подсистему ввода-вывода для файлов данных – это сконфигурировать каждый том как состоящий из одинакового числа дисковых накопителей одинакового размера. Во многих случаях вам не потребуется разбивать подсистему ввода-вывода на несколько томов. На самом деле, вы можете быть абсолютно довольны, имея один логический том с одним контроллером. Однако для охвата нескольких контроллеров не следует применять средства расслоения Windows 2000, потому что это вызывает очень большую нагрузку.

    Совет. При планировании размещения файлов данных охватывайте контроллерами максимально возможное количество дисков. Благодаря этому контроллер сможет распределить данные по многим дискам. Не применяйте средства расслоения Windows 2000 для охвата нескольких контроллеров, т.к. это слишком сильно нагружает центральный процессор.

    Если вы применяете несколько контроллеров, то нужно упростить конфигурацию, применяя одинаковое расслоение и одинаковое количество дисков на каждом из контроллеров. Если вы не можете использовать одинаковое количество дисков на каждом из контроллеров, то для правильного заполнения базы данных вы можете воспользоваться пропорциональным заполнением.

    Например, если у вас имеется два тома, один – из 20 дисковых накопителей, а другой – из 10 накопителей, то нужно создать группу файлов из двух файлов данных. (О применении файлов и групп файлов см. лекцию 9.) Первый файл данных нужно поместить на 20-дисковый том, и он должен быть в два раза больше файла данных, размещаемого на 10-дисковый томе. При загрузке данных, SQL Server будет загружать в первый файл в два раза больше данных, чем во второй файл. Благодаря этому интенсивность ввода-вывода будет примерно одинаковой для всех дисков.

    Реализация конфигурации

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

    --
    -- Сценарий SQL для создания базы данных, состоящей из нескольких файлов 
    -- d:, e: и f: - для данных,  e: и f: имеют в два раза больше дисковых накопителей, 
    -- чем имеется у d:, поэтому размер базы данных, распределенной для них в 
    -- два раза больше, чем для d:.  l: используется для журнала. 
    --
    
    CREATE DATABASE demo 
    ON
    PRIMARY ( NAME = demo1,
          FILENAME = 'd:\data\demo_dat1.mdf',
          SIZE = 100MB,
          MAXSIZE = 200,
          FILEGROWTH = 20),
    ( NAME = demo2,
       FILENAME = 'e:\data\demo_dat2.ndf',
       SIZE = 200MB,
       MAXSIZE = 200,
       FILEGROWTH = 20),
    ( NAME = demo3,
       FILENAME = 'f:\data\demo_dat3.ndf',
       SIZE = 200MB,
       MAXSIZE = 200,
       FILEGROWTH = 20)
    LOG ON 
    ( NAME = demolog1,
       FILENAME = 'l:\data\demo_log1.ldf',
       SIZE = 100MB,
       MAXSIZE = 200,
       FILEGROWTH = 20)
    GO

    Информация в данной лекции, особенно в данном разделе, поможет вам создать оптимальную подсистему ввода-вывода для вашей системы SQL Server. В следующем разделе даны несколько советов и рекомендаций, которые помогут вам создавать и исправлять подсистемы ввода-вывода.

    Советы и рекомендации для подсистемы ввода-вывода

    В данном разделе даны советы и рекомендации о том, как лучше всего организовать применение контроллеров RAID в вашей системе. Некоторые из этих советов и рекомендаций вы уже встретили при чтении данной лекции, а некоторые – новые. Будет замечательно, если некоторые из них помогут вам лучше конфигурировать и использовать свой массив RAID. Следуя этим советам и тщательно следя за состоянием системы, вы сможете избежать проблем с производительностью.

  • Размещайте журнал транзакций SQL Server на отдельном томе RAID 0 или RAID 1. Операции ввода-вывода для журнала транзакций почти на 100% являются последовательными (с переходом головок на соседнюю дорожку диска), и почти 100% из них являются операциями записи. Операции произвольного ввода-вывода для журнала транзакций бывают лишь при выполнении отката. Информация из журнала транзакций должна считываться, только когда данные для отката недоступны из кэша.
  • Сконфигурируйте достаточное количество дисковых накопителей, чтобы на каждый диск приходилось менее 85 операций ввода-вывода. Вы можете просто добавлять в массив дополнительные дисковые накопители, пока их не будет достаточно. Если операции ввода-вывода носят произвольный характер, как это обычно и бывает, то их следует распределять по всем дисковым накопителям массива.
  • Конфигурируйте тома данных как массивы RAID 5, если операции записи составляют менее 10% от общего объема ввода-вывода, и как массивы RAID 10, если более 10%.
  • Регулярно измеряйте количество операций ввода-вывода, приходящихся на один диск в секунду. Если этот показатель приближается к пределу возможностей диска, то добавляйте дополнительные дисковые накопители.
  • Распределяйте контроллеры по доступным слотам PCI вашего компьютера. Если нет особой необходимости, не ставьте несколько контроллеров на одну шину PCI.
  • Применяйте Windows 2000 RAID только на компьютерах, на которых имеется избыток ресурсов центрального процессора. Программная реализация RAID вызывает очень большую нагрузку, что может замедлить работу компьютера с недостаточно мощным центральным процессором.
  • Заключение

    Как вы узнали из данной лекции, подсистема ввода-вывода является чрезвычайно важной компонентой вашей системы управления базы данных. Теперь вы знаете, как работают дисковые накопители и каковы их ограничения. Зная пределы возможностей дисковых накопителей, вы сможете сконфигурировать свою систему так, чтобы она функционировала в рамках этих ограничений. Зная характеристики уровней RAID, вы сможете сконфигурировать систему так, чтобы воспользоваться достоинствами того или иного уровня RAID. При проектировании своей системы вы должны тщательно спланировать состав и настройку подсистемы ввода-вывода. Настройка ввода-вывода связана с мощностью. Если ваши компоненты будут работать в пределах своих возможностей, то система сможет достичь оптимальной производительности.

    Страницы:

    Конфигурируя свою систему, вы должны специально позаботиться о том, чтобы правильно спроектировать и сконфигурировать подсистему ввода-вывода. Конфигурирование подсистемы ввода-вывода может как улучшить, так и ухудшить производительность вашей системы. Поняв ограничения, относящиеся к подсистеме ввода-вывода, и сконфигурировав свой сервер на оптимальную работу с учетом этих ограничений, вы сможете достичь требуемого уровня производительности.

    В данной лекции мы изучим подсистему ввода-вывода. Мы начнем с описания работы устройств жестких дисков и расскажем, почему диски имеют фундаментальные ограничения производительности. Затем мы расскажем о разнообразных решениях при помощи доступных вам систем RAID и о характеристиках их производительности. Кроме того, вы научитесь идентифицировать и решать проблемы с производительностью ввода-вывода. В данной лекции также будет дано множество полезных советов и рекомендаций, относящихся к подсистеме ввода-вывода. И наконец, вы научитесь правильно конфигурировать Microsoft SQL Server 2000 так, чтобы вы смогли задействовать потенциал производительности вашей подсистемы ввода-вывода.

    Характеристики производительности дисков

    Дисковые накопители, называемые также "жесткие диски", являются одними из основных компонент компьютеров. Но, как ни удивительно, механическое устройство дисковых накопителей за последние 20 лет не поменялось радикально. По сравнению с первыми моделями, жесткие диски стали гораздо надежней и быстрей, но их основа осталась такой же. С точки зрения производительности, жесткие диски являются одними из наиболее важных аппаратных компонент, требующих настройки. Строго говоря, на самом деле вы не можете настраивать жесткие диски, но, зная характеристики их производительности и ограничения, вы можете конфигурировать свою систему с учетом данных ограничений, осуществляя, фактически, настройку подсистемы ввода-вывода.

    Конструкция накопителя на жестких дисках

    В качестве компонент для хранения данных в накопителях на жестких дисках применяются одна или нескольких пластин (disk platters). Эти пластины покрыты веществом, способным хранить данные благодаря своим магнитным свойствам. Данные хранятся на дорожках (tracks), похожих на дорожки грампластинки (или компакт-диска – для тех, кто забыл, как выглядят грампластинки). Каждая дорожка, в свою очередь, состоит из нескольких секторов. Чем дальше от центра диска, тем больше секторов будет на каждой из дорожек. Типичная пластина жесткого диска показана на рис. 5.1.

    Накопители на жестких дисках часто состоят не из одной, а из многих пластин, расположенных одна над другой (рис. 5.2). Данные считываются при помощи магнитных головок. Магнитные головки используются как для чтения, так и для записи данных на диск. Так как пластин несколько, то и головок должно быть несколько. Эти головки крепятся на коромыслах (armature), двигающихся внутрь пакета пластин и обратно из него, подобно тонарму с иглой у граммофона. Все головки и коромысла жестко соединены друг с другом, поэтому все головки в каждый из моментов времени находятся в одинаковых местах каждой из пластин. Из-за такой конструкции диска становится целесообразным одновременное чтение или запись сразу всеми его головками. Таким образом, данные записываются и считываются с диска одновременно всеми головками. Поскольку набор дорожек, охватываемых головками в любой из моментов времени, похож на цилиндр, мы говорим, что данные хранятся в цилиндрах (рис. 5.2).

    (рис 5.2) Пластина жесткого диска(рис 5.1) Цилиндры жесткого диска

    Накопители на жестких дисках могут иметь только одну пластину, а могут – и более шести пластин. Плотность хранения данных на пластинах и количество пластин определяют максимальную емкость (вместимость) накопителя. Некоторые модели накопителей не отличаются почти ничем, кроме количества пластин. Распространенная модель накопителей имеет емкость 9 Гб и три пластины, а накопители модели, не отличающейся ничем, кроме емкости 18 Гб, имеют шесть пластин.

    Показатели производительности накопителей на жестких дисках

    Теперь, когда у вас имеется представление о конструкции накопителя на жестких дисках, давайте ознакомимся с тем, как он работает. Сначала мы расскажем о характеристиках вращения жестких дисков, а затем вы узнаете, как зависит время поиска дорожки жестких дисков от производительности накопителя.

    Задержка вращения

    Многие высокопроизводительные жесткие диски вращаются со скоростью 10000 об/мин. Если для доступа к запрошенным данным потребуется полный оборот диска, то этот оборот диска займет приблизительно 6 мс, т.е. 0,006 секунд. Скорость вращения 10000 об/мин соответствует 166,7 оборотам в секунду, поэтому на один оборот требуется 1/166,7 секунды, т.е. около 6 мс.

    Чтобы головки накопителя могли прочитать сектор данных, этот сектор должен находиться под головками. Поскольку диск всегда вращается, головка просто должна подождать, пока сектор не подойдет в позицию под нее. Время, необходимое для поворота диска в нужную позицию, когда нужный сектор подойдет под головку, называется задержкой вращения (rotational latency). Задержка вращения может достигать 6 мс (если необходим полный оборот диска), но в среднем она составляет 3 мс.

    Задержка вращения добавляется к времени отклика доступа к диску. Поэтому, когда вы выбираете дисковые накопители для своей системы, с точки зрения производительности, длительность задержки вращения чрезвычайно важна. Как вы только что видели, для дисков со скоростью вращения 10000 об/мин, задержка вращения составляет около 3 мс. Диски предыдущего поколения вращались со скоростью 7200 об/мин, у них оборот совершался за 8,3 мс, а средняя задержка вращения составляет около 4,15 мс. Это увеличение средней задержки вращения кажется небольшим, но оно на 38% больше, чем у диска со скоростью вращения 10000 об/мин. Как вы узнаете далее в данной лекции, длительность времени отклика может значительно увеличить время доступа для ввода-вывода.

    Время поиска дорожки диска

    При доступе к данным, диск должен не только повернуться в такое положение, чтобы головки могли бы прочесть данные, но и головки должны передвинуться на дорожку, на которой находятся данные. Коромысла двигаются к центру диска и наружу, перемещая головки на цилиндр, содержащий нужные данные. Время, необходимое для перемещения головок к местоположению нужных данных, называется временем поиска дорожки или просто временем поиска (seek time), или временем подвода головки к требуемой дорожке диска (см.рис. 5.3).

    (рис 5.3) Задержка вращения и время поиска

    Время, необходимое для поиска нужной дорожки, зависит, главным образом, от расстояния, которое должны пройти головки диска. Если накопитель осуществляет доступ к данным, хранящимся в последовательном порядке, головки должны перемещаться лишь на небольшое расстояние, и такое перемещение производится быстро. Если доступ производится к данным, располагающимся по всему диску, длительности поиска дорожек могут оказаться более продолжительными. В любом случае, добиваясь минимального времени поиска, вы улучшаете производительность вашей системы.

    Время поиска и задержка вращения добавляются ко времени, необходимому для выполнения операции ввода-вывода и, следовательно, снижают производительность дискового накопителя. Для накопителей со скоростью вращения 10000 об/мин, задержка вращения составляет около 3 мс. Время поиска нужной дорожки зависит от размера и скорости дискового накопителя и варианта осуществляемого поиска.

    Время перехода головки на соседнюю дорожку (track-to-track seek time) определяет время перехода на другую дорожку при осуществлении операций последовательного ввода-вывода. У типичных 9 Гб дисков со скоростью вращения 10000 об/мин время перехода головки с дорожки на дорожку составляет около 0,8 мс. Как видите, для дисков со временем перехода головок на соседнюю дорожку 0,8 мс, задержка вращения составляет около 3 мс и является более существенным фактором, оказывающим влияние на производительность дискового накопителя. Если операции ввода-вывода применяются к дисковому накопителю достаточно быстро, то накопитель сможет прочитывать за один раз соседние дорожки или даже прочитывать или записывать дорожку целиком за один раз. Однако так бывает не всегда. В некоторых ситуациях операции ввода-вывода запрашиваются недостаточно быстро, и на каждый запрос из серии последовательных запросов приходится по обороту диска. То, что будет происходить на самом деле, зависит от конструкции и от скорости контроллера дискового накопителя.

    Среднее время поиска дорожки диска (average seek time) – это усредненное время, необходимое для перехода головок между двумя произвольно выбранными (random) дорожками диска. Исходя из таблиц с техническими характеристиками типичных дисков со скоростью вращения 10000 об/мин, их время поиска составляет около 6 мс. Поскольку почти все операции ввода-вывода, генерируемые SQL Server, будут относиться к произвольным участкам диска, то ваши дисковые накопители будут выполнять множество операций произвольного ввода-вывода.

    Максимальное время поиска для дисков данного типа может достигать 13 мс. Поиск дорожки имеет максимальную длительность при переходе от самой внутренней дорожки пластины к самой внешней дорожке или наоборот. Такая ситуация называется поиск по всему диску (full-disk seek). Но при обычной работе поиск нужной дорожки не будет поиском по всему диску, особенно когда диск не заполнен до конца.

    Технические характеристики накопителей на жестких дисках

    В данном разделе вы узнаете, насколько быстро дисковые накопители могут выполнять различные виды операций ввода-вывода. Чтобы оценить скорость выполнения операций ввода-вывода, необходимо знать некоторые сведения о дисковом накопителе. Большинство этих сведений можно найти в технических описаниях дисков, сообщаемых их производителями. В данной лекции в качестве примера будут взяты технические характеристики накопителя с емкостью 9,1 Гб и скоростью вращения 10000 об/мин. Другие технические характеристики этого типичного дискового накопителя перечислены в табл. 5.1.

    Технические характеристики дискового накопителя (пример)
    Техническая характеристика Значение Описание
    Емкость диска 9.1 Гб Емкость неформатированного диска
    Скорость вращения 10000 об/мин Скорость, с которой вращается диск
    Скорость передачи данных 40 Мб/с Скорость шины SCSI
    Среднее время поиска 5,2 мс (для чтения), 6 мс (для записи) Средняя продолжительность времени, необходимого для поиска нужной дорожки (при операциях произвольного ввода-вывода)
    Время перехода головки на соседнюю дорожку 0,6 мс (для чтения), 0,9 мс (для записи) Продолжительность времени, необходимого для перехода на соседнюю дорожку (при операциях последовательного ввода-вывода)
    Время поиска по всему диску 12 мс (для чтения), 13 мс (для записи) Продолжительность времени, необходимого для перехода от самого внутреннего сектора диска к самому внешнему сектору, или наоборот
    Средняя задержка 2,99 мс Средняя задержка вращения
    Средняя длительность работы до отказа 1 000 000 часов Средний срок службы дискового накопителя

    А теперь мы расскажем, как при помощи подобных технических характеристик вы сможете оценить производительность накопителя на жестких дисках.

    Производительность накопителя на жестких дисках

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

  • времени, необходимого для поиска нужной дорожки (чтобы головки переместились к дорожке, на которой хранятся данные);
  • задержки вращения (времени, необходимого для поворота диска, чтобы данные подошли к головкам);
  • времени, необходимого электронным схемам для передачи данных с дискового накопителя на его контроллер.
  • Поэтому время, необходимое для выполнения операции ввода-вывода представляет собой сумму длительностей исполнения описанных здесь этапов плюс время для обработки дополнительных нагрузок в драйвере устройства и в операционной системе. Помните, что итоговая длительность операций ввода-вывода зависит главным образом от того, как производятся операции ввода-вывода: последовательно или произвольно. Производительность последовательных операций ввода-вывода зависит от длительности перехода на соседнюю дорожку. Производительность операций произвольного ввода-вывода зависит от среднего времени поиска.

    Последовательный ввод-вывод

    При последовательном вводе-выводе происходит доступ к данным, расположенным на диске рядом с предыдущими данными. Так как переход головок к соседней дорожке выполняется гораздо быстрее, чем переход к произвольной дорожке, то при выполнении последовательного ввода-вывода можно достичь гораздо большей производительности. Чтобы вы представили себе возможную скорость выполнения последовательного ввода-вывода, рассмотрим пример.

    Как мы уже упоминали, типичному дисковому накопителю для выполнения перехода головок к соседней дорожке потребуется около 0,9 мс. Прибавив это время к величине задержки вращения (2,99 мс), вы можете сделать вывод, что каждая операция ввода-вывода займет приблизительно 3,89 мс. Такая длительность теоретически позволяет выполнять 264 операции последовательного ввода-вывода в секунду, т.к. одна секунда содержит 264 интервала времени по 3,89 мс. Но на производительность последовательного ввода-вывода влияют и другие факторы, такие как ограничение пропускной способности интерфейса SCSI 40 Мб/с и компоненты операционной системы: файловая система и драйвер устройства. Эта дополнительная нагрузка определяет максимальную производительность последовательного ввода-вывода, допустимую для данного дискового накопителя, составляющую около 250 операций в секунду (это число зависит от размера передаваемых данных). Как вы узнаете в лекции 6, если ваш диск передает данные со скоростью, превышающей 85% от его производительности, то будут образовываться очереди, поэтому максимальная рекомендуемая производительность ввода-вывода составит 225 операций в секунду.

    Произвольный ввод-вывод

    При произвольном вводе-выводе головки дискового накопителя должны считывать данные с произвольных участков диска. Из-за этих произвольных перемещений головок происходит снижение производительности. Давайте снова вернемся к нашему примеру дискового накопителя. Пусть теперь головки затрачивают не по 0,8 мс, переходя на соседние дорожки, а перемещаются произвольным образом по всему диску. Для поиска произвольной дорожки потребуется в среднем около 6 мс, что в 7,5 раза длительней перехода к соседней дорожке. Для типичной операции произвольного ввода-вывода понадобится примерно 6 мс (в среднем) на перемещение головок к дорожке с данными и еще 2,99 мс на задержку вращения, что составит в сумме 8,99 мс, т.е. теоретически максимально может производиться 111 операций ввода-вывода в секунду (т.к. в одной секунде содержится 111 интервалов времени по 8,99 мс). Далее, мы уже говорили, что если возможности ввода-вывода для диска задействуются более чем на 85%, то образуются очереди. Поэтому максимальная рекомендуемая производительность ввода-вывода составит 94 операции в секунду. А если согласиться с эмпирическим правилом для учета нагрузки на контроллер, то следует ограничить ввод-вывод для данного дискового накопителя 85 операциями ввода-вывода в секунду.

    Когда дисковый накопитель выполняет произвольный ввод-вывод, нормальная задержка (время, необходимое для выполнения одной операции ввода-вывода) составит 8,99 мс. Если обращения к диску станут производиться чаще, чем он сможет их обрабатывать, то начнут образовываться очереди и задержка вырастет (см. рис. 5.4). Как видите, чем ближе количество операций в секунду к рекомендованной максимальной производительности накопителя, тем длительней будет задержка.

    (рис 5.4) Количество операций ввода-вывода в секунду как функция задержки

    На самом деле, если вы достигните 100-процентного задействования возможностей диска, то очереди возникнут обязательно, а общая производительность резко снизится. Как вы прочтете в нашей книге позднее, SQL Server, как и любая другая система управления реляционными базами данных, очень сильно зависит от задержек ввода-вывода. Если для выполнения операций ввода-вывода требуется чрезмерно много времени, то производительность SQL Server сильно снизится (деградирует) и могут возникнуть такие проблемы, как блокировка (blocking) и зависание (deadlock). Когда поток ждет исполнения операции ввода-вывода, он может удерживать блокировки. До тех пор, пока операция ввода-вывода не будет исполнена, блокировка будет сохраняться, что и является причиной данных проблем.

    Способы преодоления ограниченных возможностей дисков

    Как же можно преодолеть ограничения, связанные с производительностью дисковых накопителей? На самом деле, здесь нет ничего хитрого. Следуйте советам, приведенным ниже, и вы сможете создать подсистему ввода-вывода с оптимальной производительностью:

  • Выделяйте отдельно операции последовательного ввода-вывода. Выделяйте отдельные дисковые накопители для тех компонент, которые по своей природе производят последовательный ввод-вывод, и тогда вы сможете воспользоваться этой их особенностью. Примером файла, доступ к которому осуществляется в последовательном порядке, является журнал транзакций. Если вы поместите на одном диске более одного файла, доступ к которому осуществляется в последовательном порядке, то операции ввода-вывода станут не последовательными (с переходом головок на соседнюю дорожку), а произвольными, т.к. дисковый накопитель будет производить поиск среди разнообразных фрагментов последовательных записей.
  • Распределяйте операции произвольного ввода-вывода. Так как по своей сути операции ввода-вывода носят произвольный характер, то вы можете снизить нагрузку на подсистему ввода-вывода, добавляя дополнительные дисковые накопители. Если вы создадите систему с достаточно большим количеством дисковых накопителей для обслуживания операций произвольного ввода-вывода, то проблемы с производительностью не возникнут. В лекции 6 мы расскажем, как определить потребное количество дисков и как их следует конфигурировать.
  • Массивы RAID

    Как вы понимаете, если просто добавлять в систему новые и новые дисковые накопители, то с нею будет очень сложно работать. Поэтому, вместо того, чтобы добавлять десятки или сотни отдельных дисковых накопителей, многие пользователи предпочитают применять массивы RAID (Redundant Array of Independent Disks, массивы независимых дисковых накопителей с избыточностью). Массивы RAID могут быть реализованы с использованием программных средств и имеющихся у вас устройств ввода-вывода, либо могут быть приобретены как аппаратные устройства RAID. В этом разделе мы познакомим вас с массивами RAID и расскажем о том, как они работают.

    Как ясно из самого их названия, массивы RAID содержат в себе два или несколько дисковых накопителей, образуя тем самым массив дисковых накопителей. Операционная система воспринимает весь этот массив как один логический диск. Этот логический диск называют также дисковый том, потому что он является набором дисков, кажущихся одним диском. Для пользователей, для приложения и даже (если применяется аппаратный массив RAID) для Microsoft Windows 2000 массив RAID воспринимается как один диск. Во многих случаях, однако, этот один диск будет иметь гораздо больший объем, чем любой из дисков, имеющихся в продаже. Но благодаря массивам RAID можно создавать не только большие логические диски, но также, во многих из конфигураций RAID (уровнях RAID), обеспечивать также и отказоустойчивость логического диска. Эта отказоустойчивость позволяет диску RAID сохранять работоспособность даже при отказе одного или нескольких из отдельных дисковых накопителей, составляющих массив RAID. В следующих разделах мы покажем, как достигаются такие возможности, и расскажем о характеристиках различных уровней RAID.

    Мы уже сказали, что массивы RAID могут быть реализованы программно; фактически, Windows 2000 поставляется вместе с программным обеспечением для RAID. Но в данной лекции мы в основном будем рассказывать об аппаратных реализациях RAID, потому что они обладают дополнительными функциональными возможностями. Мы расскажем об этих возможностях в следующих двух разделах и познакомим вас с функциональными возможностями и характеристиками различных уровней RAID.

    Понятия, относящиеся к подсистеме ввода-вывода

    Аппаратные контроллеры RAID обеспечивают не только основные функциональные возможности RAID, но и некоторые дополнительные средства. Среди этих дополнительных возможностей аппаратных реализаций RAID чаще всего встречается кэш контроллера. В этом разделе вы узнаете о кэше контроллера, кэшах дисковых накопителей и о разнице между внутренними и внешними массивами RAID. Кроме того, вы узнаете о новой технологии ввода-вывода – сетях хранения данных SAN (Storage Area Network). В данном разделе мы также рассмотрим некоторые разнообразные вопросы, имеющие отношение к контроллерам RAID, к дисковым накопителям и к пропускной способности устройств ввода-вывода.

    Способы преодоления ограниченных возможностей дисков

    Чтобы улучшить производительность ввода-вывода, многие производители поставляют контроллеры, имеющие кэши. Кэш контроллера – это оперативная память, установленная в контроллере дисковых накопителей. Этот кэш применяется для выполнения двух задач:

  • Кэширование записи. Поскольку контроллер имеет свою собственную память, то контроллер может сообщать операционной системе (а следовательно, и SQL Server), что операция ввода-вывода завершилась, как только данные будут записаны в кэш, что значительно повышает производительность записи.
  • Кэширование упреждающего чтения. Другой способ применения контроллера кэша – это чтение данных в дополнение к запрошенным данным. Это делается в предположении, что вскоре может поступить запрос на эти дополнительные данные. Если это случится, то время отклика резко сократится.
  • Как вы узнаете позднее в данной лекции, производительность записи может оказаться критически важной, особенно, когда вы применяете массивы RAID уровня 5. В большинстве случаев контроллер кэша является большим достоинством. Но есть два момента, о которых мы должны вас предостеречь:

  • Не пользуйтесь кэшированием записи, если вы не имеете батарейную поддержку бесперебойного электропитания. Большинство контроллеров с кэшированием имеет батарею или предусматривает возможность применения батареи. Благодаря этой батарее данные в кэше не пропадут при отказе электропитания. Без батареи данные из кэша пропадут, что может повлечь повреждение базы данных.
  • В редких случаях, когда массив RAID работает на грани своей мощности, кэширование записи может привести к ухудшению производительности чтения. Это происходит из-за того, что приоритет отдается контроллеру записи, для того, чтобы освободить кэш.
  • Кэши дисковых накопителей

    Большинство дисковых накопителей тоже содержит кэш с оперативной памятью. Этот кэш имеет меньший объем, чем кэш контроллера. Он может хранить одновременно немного запросов, благодаря чему дисковый накопитель может самостоятельно выполнить лифтовую сортировку (elevator sorting). Но так как этот кэш совсем маленький (обычно – только несколько килобайт), то он не может применяться для значительного упреждающего чтения или для кэширования значительных объемов данных. Многие поставщики контроллеров RAID и контроллеров SCSI не разрешают изменять состояние этого кэша, но, однако, некоторые производители массивов RAID все же разрешают пользователям включать либо выключать этот кэш.

    Внутренние и внешние массивы RAID

    Имеется два основных типа систем RAID: внутренние и внешние. Эти термины описывают, где находятся алгоритмы работы массивов RAID. В большинстве систем алгоритмы работы RAID находятся на контроллере, который установлен в стойке корпуса компьютера. Такие системы RAID называются внутренними. А у внешней RAID-системы алгоритмы работы находятся в запоминающем устройстве или в запоминающих устройствах, в которых размещены дисковые накопители. Это различие показано на рис. 5-5. Каждый тип систем имеет свои особенности и характеристики. Однако различия между внутренними и внешними системами RAID не будут играть значительную роль в материале данной лекции. Мы рассказали об этих двух разновидностях контроллеров RAID только для полноты изложения. В следующем разделе вы узнаете о различных уровнях RAID. Эти уровни значительно важнее в классификации контроллеров RAID.

    (рис 5.5) Внутренние и внешние системы RAID

    Сети хранения данных (SAN)

    Одной из новейших технологий, появившихся на рынке, является SAN (storage area network, сеть хранения данных). Основой SAN является большая внешняя система RAID, которой могут пользоваться совместно несколько компьютеров. Из-за этого в названии технологии появилось слово network – сеть. Благодаря SAN вы можете консолидировать (собрать воедино) все запоминающие устройства и снизить расходы, осуществляя работу с системой и поддержку системы в одном месте.

    Технология SAN имеет довольно простую концепцию. Внешняя система RAID соединяет адаптер главной шины (HBA, host bus adapter) непосредственно с подсистемой RAID (см. рис. 5.6). В сети SAN происходит соединение нескольких адаптеров главной шины через коммутатор, по крайней мере, с одной внешней системой RAID. В такой конфигурации все компьютеры, входящие в сеть SAN, могут осуществлять доступ к подсистеме RAID.

    (рис 5.6) Система SAN

    Когда мы писали нашу книгу, несколько компьютеров не могли пользоваться совместно одним логическим диском в составе SAN. Программное обеспечение SAN производит сегментацию дисковой памяти, сопоставляя каждому из компьютеров свой логический диск. Однако у SAN имеются следующие достоинства:

  • Кластеризация. Кластеризация в SAN очень проста, так как SAN уже является внешним RAID-контроллером.
  • Консолидация запоминающих устройств. Благодаря наличию централизованного хранилища данных обслуживание запоминающих устройств становится проще.
  • Более рациональное использование дисковой памяти. Вместо того чтобы резервировать дополнительные дисковые накопители на каждом из компьютеров, вы можете продуктивно пользоваться этой дисковой памятью со многих компьютеров.
  • Отказоустойчивость. Все компьютеры, имеющие доступ к SAN, могут пользоваться подключенными к сети резервными дисковыми накопителями, которые немедленно вступают в строй вместо отказавших.
  • Пропускная способность контроллера и шины

    Вы должны оценить не только ограничения, связанные с дисковым накопителем, но и ограничения пропускной способности шины ввода-вывода (обычно это SCSI или Fibre Channel). Так как шины работают с заданной тактовой частотой и имеют определенное количество разрядов данных (32 бита, 64 бита и т.д.), то максимальная пропускная способность ограничена некоторым фиксированным значением. Ваши потребности могут достичь до пропускных способностей контроллера, шины PCI или шины ввода-вывода контроллера или превысить их. Вы можете избежать этого, распределив контроллеры по нескольким шинам PCI вашего компьютера. Большинство компьютеров сейчас выпускается с тремя и более шинами PCI.

    Подсистемы ввода-вывода высшего класса

    Компании, которым необходимо обеспечивать доступность в течение 99,99% времени и более в сочетании с максимальной производительностью, часто обращаются к поставщикам вроде фирмы EMC. Такие поставщики предлагают сложные подсистемы ввода-вывода, содержащие кэши объемами в несколько Гб и множественные каналы для передачи данных от компьютеров к дисковым накопителям. Множественные каналы обеспечивают избыточность. Если какая-либо компонента системы откажет (например, откажет канал ввода-вывода, контроллер или кэш), то подсистема ввода-вывода не прекратит свое функционирование. При тщательном планировании состава таких подсистем ввода-вывода, они могут обеспечить высочайший уровень производительности и надежности.

    Лифтовая сортировка

    Лифтовая сортировка (elevator sorting) – это метод для обеспечения большей эффективности операций произвольного ввода-вывода. Когда диск получает произвольные запросы ввода-вывода, головки должны перемещаться произвольным образом по дорожкам диска, внутрь и наружу. Из-за этих операций произвольного ввода-вывода возникают задержки, мы уже рассказывали вам об этом. Многие из RAID-контроллеров поддерживают лифтовую сортировку, благодаря которой поиск произвольных дорожек становится более эффективным. Когда на контроллере, поддерживающем лифтовую сортировку, собрались в очереди несколько запросов ввода-вывода, то операции ввода-вывода могут быть отсортированы таким образом, чтобы избавиться от лишних перемещений головок. Движения головок, оптимизированные при помощи лифтовой сортировки, напоминают движения лифта, забирающего попутных пассажиров при перемещении между этажами в нужном направлении.

    Представьте, что было бы, если бы лифт обслуживал пассажиров строго в том порядке, в котором они нажимали бы на кнопки. Тогда лифт проезжал бы мимо нужных этажей, вместо того, чтобы остановиться и дать людям войти или выйти. Настоящий лифт работает более эффективно, потому что он делает остановки на нужных этажах. Алгоритмы лифтовой сортировки работают примерно так же. Если в очереди имеется более одной операции ввода-вывода, то контроллер найдет наиболее эффективный путь движения головок, который очистит очередь (рис. 5.7).

    (рис 5.7) Лифтовая сортировка

    Как видите, благодаря лифтовой сортировке накопитель может более эффективно производить переход головок к нужным дорожкам. Общее время поиска дорожек сокращается (хотя время поиска дорожки для отдельных операций иногда может и увеличиться). Однако для работы лифтовой сортировки вы должны иметь на том контроллере или на дисковом накопителе, для которых она будет производиться, несколько или даже много операций ввода-вывода, ожидающих своего исполнения. Такая ситуация часто возникает при чрезмерной нагрузке на подсистему ввода-вывода. Диск, работающий оптимальным образом, во многих случаях имеет лишь одну или две операции ввода-вывода, ожидающие своего исполнения, что делает сомнительной полезность лифтовой сортировки.

    Надежность дисков

    Дисковые накопители являются одними из немногих компонент компьютера, имеющими подвижные детали. Диск вращается с большой скоростью и работает нагретым до высокой температуры. Среди деталей накопителя имеются несколько двигателей и подшипников, которые рано или поздно, но обязательно износятся. Среди технических характеристик дискового накопителя имеется средняя продолжительность наработки на отказ (MTBF, mean time between failures). Данная техническая характеристика показывает, сколько в среднем прослужит этот накопитель. Однако это число показывает лишь среднее время. При одинаковой средней продолжительности наработки на отказ срок службы у разных дисков будет неодинаковым. Типичные современные диски могут иметь среднюю продолжительности наработки на отказ равную миллиону часов, т.е. 114 годам. Это долгий срок, но некоторые диски с таким показателем MTBF прослужат гораздо дольше, а некоторые – сломаются очень быстро. Дело в том, что диски содержат подвижные детали, и поэтому они подвержены износу и могут ломаться.

    Обзор типовых уровней RAID

    Главной особенностью массивов RAID является то, что логический диск формируется из двух или нескольких физических дисковых накопителей и воспринимается Windows 2000 (и Performance Monitor) как один физический дисковый накопитель. Логический дисковый накопитель может содержать многие сотни Гб данных, хотя изготовлять дисковые накопители емкостью в 100 Гб не удается (пока что!).

    Большинство уровней RAID, о которых мы вам расскажем, применяют расслоение данных (data striping), при помощи которого данные с двух или нескольких дисков объединяются в один большой логический RAID-диск. Это делается так: первый фрагмент данных берется с первого диска, второй кусок данных – со второго диска, и так далее. Эти фрагменты данных называются слои (stripes) или куски (chunks). Размер слоев данных задается контроллером. Некоторые контроллеры разрешают вам конфигурировать размеры слоев, а некоторые применяют слои фиксированного размера.

    Название "слой" ("кусок") применяется как к фрагментам данных на каждом из отдельных дисков, так и к набору слоев (кусков) для всей совокупности дисков (рис. 5.8).

    Таким образом, термин слой может применяться, когда речь идет о данных на каком-либо одном из дисковых накопителей (в этом случае говорят слой диска). Так говорят и о наборе связанных данных с разных дисков (а в этом случае говорят слой RAID ). Помните об этом, когда будете читать данную лекцию и другие места, где рассказывается о массивах RAID.

    (рис 5.8) Слои RAID

    Уровень RAID – это обозначение типа конфигурации массива RAID, поэтому он определяет характеристики массива RAID, не описываемые алгоритмами, содержащимися во внутренних или внешних логических компонентах. Одной из наиболее важных характеристик, определяемых уровнем RAID, является отказоустойчивость. Отказоустойчивость – это способность системы RAID продолжать работать даже после отказов дисковых накопителей, входящих в ее состав. Отказоустойчивость является основной целью, ради которой создаются контроллеры RAID. Так как ваши данные представляют ценность, то вам следует защищать их от возможных отказов дисков. В данном разделе мы изучим наиболее широко применяемые уровни RAID: как они работают, какая у них отказоустойчивость и насколько быстро происходит ввод-вывод данных. Помимо этих уровней RAID, есть и другие, но они применяются редко и мы не будем их рассматривать. Мы расскажем лишь о наиболее широко применяемых уровнях RAID.

    RAID 0

    RAID 0 являются самым "фундаментальным" из уровней RAID, он обеспечивает только расслоение дисков. Куски данных создаются на каждом из дисковых накопителей, а размер кусков задается контроллером. Для составления большого логического диска применяется метод кругового распределения кусков данных по отдельным дискам массива RAID 0 (рис. 5.9).

    (рис 5.8) RAID 0

    Хотя RAID 0 и причисляется к массивам RAID, однако данный уровень RAID не обеспечивает избыточности (redundancy, вспомните расшифровку аббревиатуры RAID: Redundant Array of Independent Disks ). Раз избыточности нет, то и отказоустойчивость тоже отсутствует. Если в массиве RAID 0 откажет хотя бы один диск, то все данные будут потеряны. Отказ одного из дисков будет сравним с уничтожением каждого четвертого слова в книге. Если произойдет такая потеря данных, то массив RAID станет бесполезным.

    Рекомендации по применению RAID 0

    Как правило, нельзя рекомендовать применять RAID 0 для хранения файлов данных SQL Server. Так как данные в базе данных очень важны для вашего бизнеса, то их потеря может погубить вашу фирму. Массивы RAID 0 не защищают от отказов дисков, поэтому вам не следует применять их ни для каких критически важных компонент, таких как операционная система, журнал транзакций или файлы базы данных.

    Примечание.Диски вращаются с большими скоростями и работают в условиях высоких температур. Так как они содержат подвижные детали, то когда-нибудь они обязательно сломаются. Поэтому важно, чтобы файлы данных SQL Server были бы защищены от отказов дисков при помощи отказоустойчивой системы.

    RAID 1

    RAID 1 являются "фундаментальным" уровнем RAID, обеспечивающим отказоустойчивость. В алгоритме RAID 1, называющемся также "зеркальное отражение", предусмотрено изготовление дублирующей копии вашего диска с данными. Дублирующая копия содержит ту же самую информацию, что имеется и на первоначальном диске (рис. 5.10). При отказе диска в строй вступит диск-дубль, и вы не потеряете данные. Так как на каждом диске (и на первоначальном, и на зеркале) хранятся все данные, то расслоение данных отсутствует. В RAID 1 второй диск применяется для дублирования первого, поэтому общий объем логического тома RAID 1 совпадает с объемом одного дискового накопителя. RAID 1 является дорогостоящим решением: при удвоении количества применяемых дисков вы взамен не получаете никакого увеличения объема дисковой памяти, но зато он обеспечивает высокий уровень отказоустойчивости.

    (рис 5.10) RAID 1

    Для томов RAID 1 операция ввода-вывода не считается завершенной, пока контроллер не запишет данные на оба дисковых накопителя. Пока этого не произойдет, нет и безопасности для данных при отказе одного из дисков. После того, как данные будут записаны на оба дисковых накопителя, восстановление данных станет возможным при отказе любого из дисков. Поэтому, если запись данных на один из дисков займет времени больше, чем запись этих же данных на другой диск, то общая задержка будет равна максимальной из двух задержек для разных дисков.

    Запись данных на оба диска также снижает производительность логического дискового накопителя. При подсчете количества операций ввода-вывода, производимых на всех дисках массива, нужно умножать количество записей на 2. Чтение данных производится только с одного из дисков. Скорости работы дисков могут отличаться, потому что головки одного из дисков могут оказаться в другом положении, чем головки другого диска, и из-за этого время поиска нужной дорожки может оказаться более длительным. Положение головок может быть разным из-за функции уровня RAID 1, называющейся параллельный поиск (split seek).

    Благодаря параллельному поиску, диски, входящие в состав массива RAID 1, могут производить чтение дисков независимо друг от друга. Параллельный поиск возможен потому, что чтение может производиться каждый раз лишь только на одном из дисков. Большинство из производителей контроллеров поддерживают параллельный поиск. Применение параллельного поиска повышает производительность, потому что обработка ввода-вывода распределяется по двум дискам, вместо одного диска. Но, из-за того, что головки движутся независимо, а запись должна быть выполнена обеими головками, общая задержка записи равна большей из двух задержек для каждого из отдельных дисков.

    Рекомендации по применению RAID 1

    RAID 1 обеспечивает высокую степень отказоустойчивости и высокую производительность. RAID 1 является прекрасным решением для случаев, когда все данные способны уместиться на одном диске. Ниже даны некоторые рекомендации по применению RAID 1:

  • Применяйте RAID 1 для диска, на котором содержится ваша операционная система, потому что ее воссоздание занимает очень много времени. RAID 1 хорошо подходит для этой задачи еще и потому, что операционная система обычно может уместиться на одном диске.
  • Применяйте RAID 1 для журнала транзакций. Обычно журнал транзакций SQL Server может уместиться на одном диске. Кроме того, для журнала транзакций применяется в основном последовательная запись. Чтение из журнала транзакций производиться только из-за операций отката. Поэтому, если вы выделите для журнала транзакций отдельный том RAID 1, то вы достигните высокой производительности.
  • Для томов RAID 1 следует применять кэширование записи. Так как запись для RAID 1 не завершена до тех пор, пока не будет выполнена запись на обоих дисках, то производительность записи может быть повышена при помощи кэша записи. Но если вы применяете кэш записи, обязательно защищайте данные в нем при помощи бесперебойного электропитания.
  • Из дальнейшего материала в данной лекции вы узнаете, что в случаях, когда для хранения данных требуется более одного диска, можно применять и другие решения, обеспечивающие отказоустойчивость. RAID 1 является прекрасным решением для случаев, когда требуется отказоустойчивость и данные способны уместиться на одном диске.

    RAID 5

    RAID 5 являются отказоустойчивым уровнем RAID, в котором для защиты данных применяется контроль по четности. Каждый слой данных (stripe) RAID создает информацию для контроля по четности, хранимую на одном из дисков в составе слоя. В сочетании с другими дисками в составе слоя RAID, информация для контроля по четности может быть использована для воссоздания данных с любого из дисков слоя. Поэтому массивы RAID 5 устойчивы к отказу одного из дисковых накопителей, входящего в состав массива. Информация для контроля по четности распределяется поочередно по всем дискам массива RAID (рис. 5.11).

    (рис 5.11) RAID 5

    Достоинством RAID 5 является то, что дисковая память, доступная при применении этого уровня RAID, составляет (n-1)*(объем одного диска) где n равно количеству дисков в массиве. Так, массив RAID 5, составленный из 10 дисков, будет иметь объем, как у 9 дисков, что делает его экономичным и в то же время отказоустойчивым решением.

    К сожалению, массивы RAID 5 имеют недостатки, связанные с производительностью. Обработка информации для контроля по четности приводит к дополнительной нагрузке на компьютер. При записи данных в массив RAID 5 требуется чтение как слоя данных с целевого диска, так и слоя с информацией для контроля по четности, затем потребуется перерасчет информации контроля по четности, а затем должна быть произведена запись обоих слоев данных. Таким образом, как видите, запись в массив RAID 5 производит фактически четыре физических операции ввода-вывода.

    Контроль по четности в массивах RAID 5

    В массивах RAID 5 для данных каждого из слоев на каждом из дисковых накопителей создается бит контроля по четности. Бит контроля по четности является дополнительным элементом данных, благодаря которому, имея биты из набора данных, по которому он был создан, можно узнать другие биты из набора данных. Бит контроля по четности создается так: все остальные биты суммируются, а затем определяется, какое значение он должен иметь, чтобы получилось четное (или нечетное число). Бит контроля по четности, в сочетании с остальными битами, может применяться, чтобы восстановить значение потерянного бита.

    Давайте разберем работу контроля по четности на примере. В нашем примере мы будем считать, что система RAID 5 содержит пять дисковых накопителей.

    Каждый дисковый накопитель, по существу, составлен из некоторого количества битов, от начала до конца слоя диска. Бит четности создается в зависимости от значений битов с каждого из дисковых накопителей.

    В нашем примере будем считать, что контроль по четности должен обеспечить четность суммы битов, т.е. сумма всех битов должна давать результат 0 (имеется в виду сложение по модулю 2, т.е. результат сложения битов должен быть четным. – Прим. пер.). Если первый бит первого диска равен 0, первый бит второго диска равен 1, первый бит третьего диска равен 1, первый бит четвертого диска равен 1, то бит контроля по четности для этих битов должен быть равен 1, чтобы дополнить эти биты до четного числа (см. табл. 5.2).

    Пример контроля по четности для массива RAID
    диск 1: бит 1 диск 2: бит 1 диск 3: бит 1 диск 4: бит 1 диск 5: бит контроля по четности Сумма битов
    0 1 1 1 1 4(четная)

    Контроль по четности следует понимать как действия, применяемые к отдельным битам. Хотя слой диска содержит много битов, контроль по четности для отдельных битов позволит восстановить все данные. Биты контроля по четности, перечисленные в табл. 5.2, создаются на самом деле по отдельным битам, составляющим слои данных. Несмотря на то, что дисковые накопители разбиваются на куски данных (слои), с возможными размерами по 64 Кб и более, но контроль по четности, как мы вам показали, может быть произведен на уровне отдельных битов. На самом деле контроль по четности вычисляется при помощи алгоритмов более сложных, чем тот, который мы сейчас описали.

    Давайте теперь предположим, что диск 3 сломался. В этом случае бит контроля по четности вместе с битами других дисков может быть использован для восстановления отсутствующего бита диска 3, потому что их сумма должна дополнять неизвестный бит диска 3 до четного числа.

    Создание данных для контроля по четности

    Как мы уже объяснили в данном разделе, данные контроля по четности, применяемые в массивах RAID 5, составляются из битов, дополняющих до четного числа сумму одинаково отстоящих от начала битов всех дисковых накопителей. Но вам, конечно,понятно, что было бы непрактичным, чтобы контроллер массива считывал бы все данные со всех дисковых накопителей при каждой операции ввода-вывода. Это было бы неэффективно и медленно.

    При создании массива RAID 5 происходит первоначальное обнуление данных и создание битов контроля по четности. В результате создается набор дисковых накопителей без данных, но с полным набором битов контроля по четности.

    С этого момента, всякий раз при записи данных на дисковый накопитель, должно производиться чтение данных с диска данных и с диска контроля по четности. Новые данные должны сравниваться со старыми данными, и если какой-либо бит данных поменялся, то данные контроля по четности для этого бита тоже должны быть изменены. Эта проверка производится при помощи логической операции "исключающее ИЛИ" ( XOR, exclusive OR ).Поэтому требуется чтение данных только с диска данных и диска контроля по четности, а не со всех дисков массива. Как только описанная операция вычисления изменений данных контроля по четности будет завершена, запись должна быть произведена на оба диска, т.к. операция с данными контроля по четности затрагивает весь слой данных. Таким образом, для выполнения каждой записи в том RAID 5 производятся четыре физических операции ввода-вывода: два чтения (одно – чтение с диска данных, другое – чтение с диска контроля по четности) и две записи (сами данные и данные контроля по четности). Но в массивах RAID 5 данные контроля по четности равномерно распределены по всем дисковым накопителям, поэтому и нагрузка на накопители будет распределена равномерно.

    Рекомендации по применению RAID 5

    Так как запись в массив RAID 5 требует дополнительных операций ввода-вывода, то этот уровень RAID можно рекомендовать для дисковых томов, используемых преимущественно для чтения. Поскольку данные контроля по четности равномерно распределены по многим дискам массива, то для операций чтения используются все диски. С учетом этих особенностей можно дать следующие рекомендации:

  • Применяйте RAID 5 для томов, предназначенных только для чтения. Любой том дисков, операции записи на котором превышают 10% от объема ввода-вывода, не следует реализовывать как RAID 5.
  • Применяйте кэширование записи для томов RAID 5. Так как запись для RAID 5 не завершена до тех пор, пока не будут выполнены два чтения и две записи, то при использовании кэша записи время отклика для записи может быть сокращено. (Используя кэш записи, обязательно применяйте батарею для бесперебойного электропитания.) Но надо отметить, что если поток записываемых данных превысит производительность записи дисков, то кэширование записи вам не поможет. В любом случае, вы не должны превышать пропускную способность дисков.
  • Как видите, RAID 5 является экономичным решением, но вы расплачиваетесь за это производительностью. А насколько велика может быть эта цена, вы узнаете из дальнейшего материала данной лекции.

    RAID 10

    (рис 5.12) RAID 10

    Как и у RAID 1, каждая операция записи RAID 10 потребует двух физических операций ввода-вывода – по одной операции записи на каждый диск зеркальной пары. Поэтому, при подсчете количества операций ввода-вывода в расчете на один диск, нужно умножать количество записей на 2. Как и для массивов RAID 1, для RAID 10 операции записи не считаются завершенными, пока не будут выполнены обе записи, это может увеличить длительность задержки записи. Но так же, как и для RAID 1, большинство контроллеров поддерживает параллельный поиск для RAID 10.

    RAID 10 обеспечивает высокую степень отказоустойчивости. На самом деле, массив может остаться работоспособным даже при отказе более чем одного диска. Конечно, отказ дисков, входящих в зеркальную пару, приведет к потере данных. Если диски, входящие в разные зеркальные пары смонтированы по разным стойкам для оборудования, то отказ даже всей стойки не приведет к потере данных.

    Рекомендации по применению RAID 10

    RAID 10 обеспечивает высокую производительность и высокую степень отказоустойчивости. Уровень RAID 10 следует применять, когда нужна работа с большими томами, для которых операции записи составляют более 10% от общего объема операций ввода-вывода. Можно дать следующие рекомендации по применению RAID 10:

  • Применяйте RAID 10 всякий раз, когда операции записи составляют более 10% от общего объема операций ввода-вывода для массива RAID.
  • Применяйте RAID 10, когда производительность является критически важной. Так как в RAID 10 применяется расслоение данных, то вы будете иметь превосходную производительность.
  • Для томов RAID 10 следует применять кэширование записи. Так как запись для RAID 10 не завершена до тех пор, пока не будут выполнены обе операции записи, то благодаря применению кэша время записи может быть сокращено. Кэширование записи безопасно только когда вы применяете батарею для бесперебойного электропитания для защиты кэша.
  • Уровень RAID 10 является наилучшим отказоустойчивым решением, он обеспечивает хорошую защиту данных и высокую производительность, однако затраты на него тоже большие. Вам придется приобрести диски в двойном количестве, по сравнению с RAID 0. Если же ваш том служит главным образом для чтения данных, то можно применять RAID 5.

    Сравнение производительности уровней RAID

    Для правильного конфигурирования и настройки вашей системы RAID, вам нужно понимать различия в производительности различных уровней RAID, о которых мы рассказали в предыдущем разделе. Если вы будете понимать, как работает система RAID и какие действия она осуществляет в различных ситуациях, вы лучше сможете настраивать свою подсистему ввода-вывода. В данном разделе мы внимательно сравним различные показатели производительности, с которыми вы познакомились в предыдущем разделе. В наших примерах мы будем считать, что отдельный дисковый накопитель может выполнять 85 операций произвольного ввода-вывода в секунду.

    Производительность чтения

    Производительность чтения не сильно зависит от выбранного вами уровня RAID. Когда операция чтения применяется к массиву RAID, то каждый диск вносит свой вклад в производительность по чтению. Так как для высокой производительности основным препятствием являются операции произвольного ввода-вывода, то мы сейчас рассмотрим эту тему. Вы можете максимально повысить производительность последовательного ввода-вывода, выделив их на отдельный том. Давайте посмотрим, как происходит произвольный ввод-вывод для различных уровней RAID:

  • В томах RAID 0 данные распределены равномерно по всем дискам массива. Поэтому и операции произвольного ввода-вывода должны быть равномерно распределены по всем дискам системы. Тогда, с учетом нашего предположения, что отдельный дисковый накопитель может выполнять 85 операций произвольного ввода-вывода в секунду, массив RAID 0 из десяти дисков сможет выполнять 850 операций в секунду.
  • Тома RAID 1 поддерживают параллельный поиск, при котором операции чтения производятся обоими дисковыми накопителями. Поэтому RAID 1 может выполнять в два раза больше операций чтения, чем одиночный диск, т.е. 170 операций ввода-вывода в секунду. Если же операции чтения будут производиться чаще, то производительность снизится.
  • В системах RAID 5 данные распределяются равномерно по всем дисковым накопителям, входящим в состав массива. Даже несмотря на то, что один дисковый накопитель в каждом слое данных служит для хранения данных контроля по четности, из-за произвольных по своей природе операций ввода-вывода, используются обычно все дисковые накопители. Поэтому, как и для массива RAID 0, темп (производительность) чтения массива RAID 5 составит n*85 операций в секунду, где n – количество дисковых накопителей в массиве. Если операции чтения будут производиться в большем темпе, то производительность SQL Server снизится.
  • Массивы RAID 0, как и массивы RAID 1, поддерживают параллельный поиск. Поэтому для них максимальная производительность чтения составит n*85 операций в секунду, где n – количество дисковых накопителей. Вы могли бы инициировать запуск операций ввода-вывода с более высоким темпом, но в этом темпе исполняться они не смогут.
  • Как видите, подсчитать производительность чтения массивов RAID совсем просто. Добавляя достаточное количество дисковых накопителей, так чтобы ваши потребности в производительности ввода-вывода соответствовали этим ограничениям, вы сможете оптимизировать производительность вашей системы.

    Производительность записи

    Производительность записи очень сильно зависит от выбранного вами уровня RAID. И снова, поскольку основные трудности возникают из-за операций произвольного ввода-вывода, то мы их сейчас и рассмотрим. Вы можете максимально повысить производительность последовательного ввода-вывода, выделив их на отдельный том или тома. Давайте посмотрим, как происходит запись произвольных данных для различных уровней RAID:

  • Уровень RAID 0 лучше всего подходит для обработки операций записи без ущерба для производительности, но вы расплачиваетесь за это отказоустойчивостью. Так как в RAID 0 не применяется зеркальное дублирование или контроль по четности, то производительность RAID 0 равна просто сумме производительностей отдельных дисковых накопителей. Поэтому массив RAID 0, состоящий из десяти дисков, сможет выполнять 850 операций в секунду (с учетом нашего предположения о производительности отдельного накопителя).
  • Тома RAID 1 должны выполнять зеркальное дублирование всех данных, записываемых в массив, из-за чего одна запись в массив RAID 1 порождает две операции ввода-вывода на дисковые накопители. Поэтому массив RAID 1 имеет темп записи такой же, как и у одиночного дискового накопителя, т.е. 85 операций ввода-вывода в секунду.
  • Операции записи в массивы RAID 5 происходят еще медленней. Запись в RAID 5 порождает четыре физических операции ввода-вывода на диски. Поэтому производительность записи в массив RAID 5 в четыре раза меньше производительности записи отдельных дисковых накопителей в составе массива.
  • Массивы RAID 10 имеют такие же показатели производительности записи, как и массивы RAID 1. Каждая запись в массив RAID 10 порождает две физических операции записи. Поэтому производительность записи в массив RAID 10 в два раза меньше производительности записи отдельных дисковых накопителей в составе массива.
  • Как видите, вычислить производительность записи массивов RAID довольно сложно. Добавляя достаточное количество дисковых накопителей, так чтобы ваши потребности в производительности ввода-вывода соответствовали этим ограничениям, вы сможете оптимизировать производительность вашей системы. В следующем разделе вы узнаете, как можно подсчитать количество операций ввода-вывода на один диск в различных обстоятельствах.

    Подсчет количества операций ввода-вывода для дисков

    Чтобы определить объем нагрузки, приходящейся на отдельные дисковые накопители системы, вам придется выполнить некоторые расчеты. Если вы пользуетесь аппаратным контроллером RAID, то количество операций ввода-вывода в секунду, показываемое монитором производительности Performance Monitor означает количество операций ввода-вывода, выполняемых массивом как единым целым. Вы не увидите сведений о дополнительных операциях ввода-вывода, генерируемых контроллером и служащих для обеспечения отказоустойчивости. Фактически, Windows 2000 не замечает их выполнения, но вы должны знать о них, чтобы правильно определить количество дисковых накопителей, необходимое для обеспечения оптимальной производительности.

    RAID 0

    В массивах RAID 0 темп операций ввода-вывода на один диск вычисляется как сумма всех операций чтения и записи для массива, деленная на количество дисков в массиве. Для RAID 0 нужна лишь одна простая и понятная формула:

    количество операций на диск = (чтения + записи) / количество дисков

    RAID 1

    Для массивов RAID 1 вычисления будут несколько более сложными. Так как количество записей удваивается, то число операций ввода-вывода на один диск в секунду равно сумме количества операций чтения и удвоенного количества операций записи для массива, деленной на количество дисков в массиве (для RAID 0 – два). Нужно применять такую формулу:

    количество операций на диск = (чтения + (2 * записи)) / 2

    Запись в массивы RAID 1 происходит медленней, но они обеспечивают лучшую отказоустойчивость.

    RAID 5

    Массивы RAID 5 обеспечивают отказоустойчивость, но при записи у них получается очень большая нагрузка на диски. Операции чтения в массивах RAID 5 распределены по многим дисковым накопителям массива, но для записи приходится выполнять четыре физических операции ввода-вывода. Чтобы подсчитать количество операций ввода-вывода, приходящихся на один дисковый накопитель, надо сложить количество операций чтения и учетверенное количество операций записи, а затем разделить на количество дисков в массиве. Поэтому формула для RAID 5 будет такой:

    количество операций на диск = (чтения + (4 * записи)) / количество дисков

    RAID 10

    Скорость записи в массивы RAID 10 такая же, как в RAID 1, но зато RAID 10 обеспечивает высокую степень отказоустойчивости. Расчет для RAID 10 аналогичен расчету для RAID 1. Поскольку количество записей удваивается, то число операций ввода-вывода на один диск равно сумме количества операций чтения и удвоенного количества операций записи для массива, деленной на количество дисков в массиве. Формула для RAID 10 будет такой:

    количество операций на диск = (чтения + (2 * записи)) / количество дисков

    Сравнение различных уровней RAID

    Давайте сравним разные уровни RAID. Тогда вам станет легче понять, какой уровень RAID лучше подходит для вашей системы. Когда вы сравниваете производительность работы разных уровней RAID, одним из наиболее важных факторов, оказывающих влияние на нее, является соотношение чтения и записи. При выполнении операций чтения производительность различных уровней RAID отличается не сильно, различия относятся в основном к производительности операций записи. Также нужно учитывать, нужна ли вашей системе отказоустойчивость. И наконец, вам следует оценить соотношение стоимости системы и ее емкости. Характеристики для различных уровней RAID перечисленны в табл. 5.3.

    Сравнение уровней RAID
    Уровень RAID Производительность Отказоустойчивость Оценка стоимости
    RAID 0 Наилучшая Без отказоустойчивости Экономичный
    RAID 1 Хорошая Хорошая Дорогой
    RAID 5 Быстрая для чтения, медленная для записи Нормальная Самый экономичный из уровней, обеспечивающих отказоустойчивость
    RAID 10 Хорошая Хорошая Дорогой

    Как видите, наилучший вариант зависит от ваших потребностей. Чтобы понять различие между производительностью RAID 5 и RAID 10 при разных соотношениях чтения и записи, посмотрите табл. 5.4, в которой показаны данные для массивов RAID 5 и RAID 10, выполняющих 500 операций ввода-вывода в секунду на 10 дисковых накопителях при разных соотношениях чтения и записи.

    Сравнение RAID 5 и RAID 10
    Соотношение Чтения/Записи Операции ввода-вывода RAID 5 (Чтения + (4 * Записи)) /  Кол-во дисков Операции ввода-вывода RAID 10 (Чтения + (2 * Записи)) /  Кол-во дисков
    100% чтений

    0% записей

    (500+0)/10

    50 операций ввода-вывода на диск

    (500+0)/10

    50 операций ввода-вывода на диск

    90% чтений

    10% записей

    (450+200)/10

    65 операций ввода-вывода на диск

    (450+100)/10

    55 операций ввода-вывода на диск

    75% чтений

    25% записей

    (375+500)/10

    87.5 операций ввода-вывода на диск

    (375+250)/10

    62.5 операций ввода-вывода на диск

    50% чтений

    50% записей

    (250+1000)/10

    125 операций ввода-вывода на диск

    (250+500)/10

    75 операций ввода-вывода на диск

    0% чтений

    100% записей

    (0+2000)/10

    200 операций ввода-вывода на диск

    (0+1000)/10

    100 операций ввода-вывода на диск

    Как видите, когда соотношение чтения к записи составляет 90%:10%, нагрузка на диски для RAID 5 и RAID 10 почти не отличается. Но когда запись составляет более высокий процент в операциях ввода-вывода, нагрузка на диски массивов RAID 5 становится гораздо больше.

    Задержки ввода-вывода и SQL Server

    SQL Server очень чувствительна к задержкам ввода-вывода, потому что транзакции обрабатываются алгоритмом SQL Server одновременно. При обычной работе база данных SQL Server взаимодействует с десятками и сотнями приложений. Чтобы поддерживать эту одновременную работу, SQL Server имеет сложную систему блокировок (замков) строк, страниц, экстентов и таблиц, с которой вы познакомитесь в нашей книге. При блокировке каких-либо данных или ресурсов SQL Server, другие процессы должны ждать, пока эти данные или ресурсы не будут разблокированы.

    Если длительность выполнения операций ввода-вывода слишком велика, то эти ресурсы будут блокированы недопустимо долго, еще сильнее замедляя работу системы. Кроме того, это повышает вероятность тупиковых ситуаций (взаимоблокировок). Чем дольше выполняются операции ввода-вывода, тем дольше длятся и блокировки и тем серьезнее становятся эти проблемы. И в результате отдельные задержки могут сложиться, вызвать "эффект снежного кома" и испортить работу системы.

    Кроме того, обработка запросов станет очень медленной. Например, если на вашей системе выполняется сканирование больших таблиц, то для выполнения таких задач часто требуется чтение сотен, тысяч и даже миллионов строк в базах данных. Для миллиона операций ввода-вывода даже небольшие изменения производительности становятся очень важными. Выполнение одного миллиона операций по 10 мс займет около 2,8 часа. А если ваша подсистема ввода-вывода оказалась перегружена и каждая операция ввода-вывода требует 40 мс, то выполнение такого же запроса займет уже более 11 часов.

    Как видите, производительность SQL Server может очень сильно пострадать из-за плохого начального проектирования или плохого конфигурирования подсистемы ввода-вывода. Если вы спроектируете свою подсистему ввода-вывода так, что она будет вписываться в возможности отдельных компонент, то производительность вашей системы будет оптимальной.

    Планирование размещения дисков SQL Server

    Из материала данной лекции ясно, что вы должны правильно спланировать свою систему ввода-вывода, чтобы не допускать ее перегрузки. Перегрузка подсистемы ввода-вывода повлечет увеличение задержек ввода-вывода и падение производительности SQL Server. В данном разделе вы изучите, как построить систему SQL Server, способную работать в рамках ограничений вашей подсистемы. Сначала вы научитесь определять требования вашей системы к вводу-выводу. Затем вы изучите планирование системы, а последним этапом будет само создание вашей системы.

    Определяем требования к вводу-выводу

    Определение требований к вводу-выводу системы, существующей еще только в виде концепции, может оказаться хоть и сложным, но вполне возможным делом. Однако если у вас нет конкретных данных, на основе которых можно определить требования к вводу-выводу, то вы должны смочь собрать достаточно данных, чтобы можно было сделать обоснованное предположение. В любой ситуации, создание подсистемы ввода-вывода, неспособной к росту, будет ошибкой. Всегда предусматривайте резервы для необходимого роста мощности и производительности, рано или поздно они вам понадобятся. Вы должны спроектировать систему так, чтобы она удовлетворяла бы минимальным требованиям к объему дисковой памяти, необходимой для хранения данных, и к необходимому для вас уровню производительности. В следующем разделе вы узнаете, как определить какое количество дисков потребуется для удовлетворения этим условиям.

    Объем дисковой памяти

    Определить, сколько места на дисках потребуется для ваших данных, достаточно просто. Объем необходимого места равен сумме следующих величин:

  • Дисковой памяти, необходимой для данных.
  • Дисковой памяти, необходимой для индексов.
  • Дисковой памяти, необходимой для временных данных.
  • Дисковой памяти, необходимой для журнала транзакций.
  • Дисковая память, отводимая для данных, должна иметь достаточно места для хранения данных, которые будут добавлены в вашу базу данных. Рост базы данных в значительной степени определяется вашим бизнесом и вашими клиентами. Чтобы оценить рост вашей системы, можно проводить регулярные проверки существующей базы данных и подсчитывать, как изменился объем дисковой памяти, занимаемой базой данных. Темп роста базы данных должен измеряться несколько месяцев, чтобы можно было определить его закономерности. Рост базы данных может оказаться таким, что удивит вас.

    Для новой системы, не имеющей истории, при оценке роста, среди прочих критериев, вы можете воспользоваться количеством заказов на продукцию, умноженным на размер строки. Взяв эти показатели для нескольких периодов времени (например, месяцев или лет), вы получите грубую оценку о скорости роста файлов с данными. Это не даст вам информации о росте индексов. Объем дисковой памяти, необходимой для индексов в расчете на одну строку данных, зависит от конструкции индексов и от объема данных. Для сложного индекса требуется больше места в расчете на одну строку данных, чем для простого индекса. И решение о том, сколько времени система должна существовать в условиях роста – два года, пять лет или дольше, – принимаете вы. Вот так производится оценка, с каким объемом дисковой памяти должна быть сконфигурирована ваша подсистема ввода-вывода.

    Определившись с объемом данных, объемом индексов, объемом временной базы данных и с темпом роста, вы можете определить, сколько места на дисках вам потребуется. Затем вы должны учесть место, необходимое для обеспечения отказоустойчивости в массивах RAID. Помните, что в массивах RAID 1 и RAID 10 (с зеркальным дублированием данных) для обеспечения отказоустойчивости тратится половина физического места на дисках. В массивах RAID 5 для обеспечения отказоустойчивости тратится один дисковый накопитель, входящий в состав массива. Также помните, что объем дисков, указываемый изготовителями, обозначает емкость неотформатированного диска. Неотформатированный дисковый накопитель, маркированный, как имеющий емкость 9,1 Гб, после форматирования будет вмещать на самом деле 8,6 Гб.

    И когда вы подсчитаете объем дисковой памяти, необходимой в данный момент, и объем дисковой памяти, необходимой для будущего роста, тогда вы сможете перейти к следующему этапу: оценке производительности. Для правильного конфигурирования подсистемы ввода-вывода нужно оценивать и объем необходимой дисковой памяти, и требования к производительности.

    Производительность

    Недостаточно просто сконфигурировать систему так, чтобы она отвечала требованиям к объему необходимой дисковой памяти. Как вы уже знаете из материала данной лекции, конфигурация подсистемы ввода-вывода может серьезно ухудшить или значительно улучшить производительность вашей системы. Однако оценка требований к производительности совсем не так проста, как оценка требований к объему дисковой памяти.

    Наилучшим способом оценки производительности является изучение аналогичных приложений или систем. Эти данные могут стать отправной точкой для оценки будущих требований. Дополнительную информацию об этом вы получите в лекции 6. Предположим, что вы нашли похожую систему. Тогда для определения необходимого количества дисков вы можете воспользоваться данными, собранными при исследовании этой системы, и информацией, которую вы знаете из данной лекции. Не забудьте учесть влияние уровня RAID, применяемого в той подсистеме ввода-вывода. Следующим этапом станет планирование размещения дисков SQL Server, а после этого можно будет осуществить реализацию вашего решения.

    Планирование размещения дисков

    При планировании размещения дисков принимаются решения о том, как данные должны быть размещены на дисках, а затем пишутся сценарии SQL, которые создадут базу данных. Достоинством создания базы данных при помощи сценариев SQL, а не при помощи SQL Server Enterprise Manager является то, что вы можете пользоваться ими многократно и вносить в них изменения.

    В сценариях должно быть отражено количество логических томов, которое имеет ваша система, а также количество физических дисков в этих томах. Важно сбалансировать базу данных так, чтобы все дисковые накопители обрабатывали приблизительно равные количества операций ввода-вывода в секунду. Производительность несбалансированной системы будет ограничена возможностями самого медленного из томов. Вы должны позаботиться, чтобы журнал транзакций и файлы данных были распределены по дисковым накопителям так, чтобы обеспечивалась оптимальная производительность.

    Планирование размещения журнала транзакций

    Планирование размещения журнала транзакций очень простое. Часто наилучшим решением является использование для журнала транзакций только одного файла данных. Если вам придется добавлять к своей базе данных дополнительные файлы журналов транзакций, не забудьте, что их следует размещать на томах RAID 1 или RAID 10. Также не забудьте, что файлы журналов транзакций должны храниться отдельно от данных и от других журналов транзакций.

    Планирование размещения файлов данных

    Самый простой способ сконфигурировать вашу подсистему ввода-вывода для файлов данных – это сконфигурировать каждый том как состоящий из одинакового числа дисковых накопителей одинакового размера. Во многих случаях вам не потребуется разбивать подсистему ввода-вывода на несколько томов. На самом деле, вы можете быть абсолютно довольны, имея один логический том с одним контроллером. Однако для охвата нескольких контроллеров не следует применять средства расслоения Windows 2000, потому что это вызывает очень большую нагрузку.

    Совет. При планировании размещения файлов данных охватывайте контроллерами максимально возможное количество дисков. Благодаря этому контроллер сможет распределить данные по многим дискам. Не применяйте средства расслоения Windows 2000 для охвата нескольких контроллеров, т.к. это слишком сильно нагружает центральный процессор.

    Если вы применяете несколько контроллеров, то нужно упростить конфигурацию, применяя одинаковое расслоение и одинаковое количество дисков на каждом из контроллеров. Если вы не можете использовать одинаковое количество дисков на каждом из контроллеров, то для правильного заполнения базы данных вы можете воспользоваться пропорциональным заполнением.

    Например, если у вас имеется два тома, один – из 20 дисковых накопителей, а другой – из 10 накопителей, то нужно создать группу файлов из двух файлов данных. (О применении файлов и групп файлов см. лекцию 9.) Первый файл данных нужно поместить на 20-дисковый том, и он должен быть в два раза больше файла данных, размещаемого на 10-дисковый томе. При загрузке данных, SQL Server будет загружать в первый файл в два раза больше данных, чем во второй файл. Благодаря этому интенсивность ввода-вывода будет примерно одинаковой для всех дисков.

    Реализация конфигурации

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

    --
    -- Сценарий SQL для создания базы данных, состоящей из нескольких файлов 
    -- d:, e: и f: - для данных,  e: и f: имеют в два раза больше дисковых накопителей, 
    -- чем имеется у d:, поэтому размер базы данных, распределенной для них в 
    -- два раза больше, чем для d:.  l: используется для журнала. 
    --
    
    CREATE DATABASE demo 
    ON
    PRIMARY ( NAME = demo1,
          FILENAME = 'd:\data\demo_dat1.mdf',
          SIZE = 100MB,
          MAXSIZE = 200,
          FILEGROWTH = 20),
    ( NAME = demo2,
       FILENAME = 'e:\data\demo_dat2.ndf',
       SIZE = 200MB,
       MAXSIZE = 200,
       FILEGROWTH = 20),
    ( NAME = demo3,
       FILENAME = 'f:\data\demo_dat3.ndf',
       SIZE = 200MB,
       MAXSIZE = 200,
       FILEGROWTH = 20)
    LOG ON 
    ( NAME = demolog1,
       FILENAME = 'l:\data\demo_log1.ldf',
       SIZE = 100MB,
       MAXSIZE = 200,
       FILEGROWTH = 20)
    GO

    Информация в данной лекции, особенно в данном разделе, поможет вам создать оптимальную подсистему ввода-вывода для вашей системы SQL Server. В следующем разделе даны несколько советов и рекомендаций, которые помогут вам создавать и исправлять подсистемы ввода-вывода.

    Советы и рекомендации для подсистемы ввода-вывода

    В данном разделе даны советы и рекомендации о том, как лучше всего организовать применение контроллеров RAID в вашей системе. Некоторые из этих советов и рекомендаций вы уже встретили при чтении данной лекции, а некоторые – новые. Будет замечательно, если некоторые из них помогут вам лучше конфигурировать и использовать свой массив RAID. Следуя этим советам и тщательно следя за состоянием системы, вы сможете избежать проблем с производительностью.

  • Размещайте журнал транзакций SQL Server на отдельном томе RAID 0 или RAID 1. Операции ввода-вывода для журнала транзакций почти на 100% являются последовательными (с переходом головок на соседнюю дорожку диска), и почти 100% из них являются операциями записи. Операции произвольного ввода-вывода для журнала транзакций бывают лишь при выполнении отката. Информация из журнала транзакций должна считываться, только когда данные для отката недоступны из кэша.
  • Сконфигурируйте достаточное количество дисковых накопителей, чтобы на каждый диск приходилось менее 85 операций ввода-вывода. Вы можете просто добавлять в массив дополнительные дисковые накопители, пока их не будет достаточно. Если операции ввода-вывода носят произвольный характер, как это обычно и бывает, то их следует распределять по всем дисковым накопителям массива.
  • Конфигурируйте тома данных как массивы RAID 5, если операции записи составляют менее 10% от общего объема ввода-вывода, и как массивы RAID 10, если более 10%.
  • Регулярно измеряйте количество операций ввода-вывода, приходящихся на один диск в секунду. Если этот показатель приближается к пределу возможностей диска, то добавляйте дополнительные дисковые накопители.
  • Распределяйте контроллеры по доступным слотам PCI вашего компьютера. Если нет особой необходимости, не ставьте несколько контроллеров на одну шину PCI.
  • Применяйте Windows 2000 RAID только на компьютерах, на которых имеется избыток ресурсов центрального процессора. Программная реализация RAID вызывает очень большую нагрузку, что может замедлить работу компьютера с недостаточно мощным центральным процессором.
  • Заключение

    Как вы узнали из данной лекции, подсистема ввода-вывода является чрезвычайно важной компонентой вашей системы управления базы данных. Теперь вы знаете, как работают дисковые накопители и каковы их ограничения. Зная пределы возможностей дисковых накопителей, вы сможете сконфигурировать свою систему так, чтобы она функционировала в рамках этих ограничений. Зная характеристики уровней RAID, вы сможете сконфигурировать систему так, чтобы воспользоваться достоинствами того или иного уровня RAID. При проектировании своей системы вы должны тщательно спланировать состав и настройку подсистемы ввода-вывода. Настройка ввода-вывода связана с мощностью. Если ваши компоненты будут работать в пределах своих возможностей, то система сможет достичь оптимальной производительности.

    Вернуться к учебному плану