На нас произвели сильное впечатление огромные сдвиги в программном обеспечении и аппаратных технологиях, которые произошли за год-полтора до этого, но особенно нас вдохновили исследования пропускной способности диска SATA, проведенные в 2004 году командой Microsoft Research под руководством Джима Грея. Глядя на полученный им превосходный результат, мы решили создать прототип сервера, который бы уверенно обрабатывал более 2 Гбайт однотипных операций чтения и записи в базе данных в секунду. В исследованиях и тестах Грея были задействованы сервер Newisys 4300, диски SATA, контроллеры дисков SATA, непосредственно соединенные 48 кабелями SATA с 48 дисками SATA. В конфигурации Грея была достигнута отметка 2,5 Гбайт в секунду для последовательных записей и немного меньше - для последовательных считываний.
Наш сервер было решено собрать из общедоступных комплектующих, с передовым микропроцессором, 64-разрядной операционной системой, большой оперативной памятью, базой данных и хранилищем на жестких дисках с прямым подключением. Данная статья посвящена этой системе - прототипу сервера с Windows Server 2003 x64, SQL Server 2005 x64, 32 Гбайт оперативной памяти и дисками большой емкости RPM SATA 7200 прямого подключения. Данная система, которую наша команда тестировала в течение 6 месяцев, ни в чем не уступает мега-серверам, стоимость которых подчас в 10–20 раз выше. И в будущем такая система вполне может стать одним из лидеров на рынке серверов баз данных.
Прототип
В июле 2005 года Сан Воуба, несколько представителей поставщиков аппаратного обеспечения и я собрали в лагере Microsoft в Редмонде наш прототип. Мы задались целью протестировать SQL Server 2005 x64 с высокоскоростным и высокоемким хранилищем на жестких дисках прямого подключения, используя диски SATA с последовательно подключаемыми контроллерами дисков SAS SCSI, устройствами расширения и кабелями SAS. На диски SATA выбор пал в силу их большой емкости – до 500 Гбайт на диск – и перспективы большего числа одновременно подключаемых дисков в недалеком будущем. Также диски SATA в несколько раз дешевле дисков SCSI той же емкости и сравнимы с дисками SCSI по пропускной способности однотипных операций ввода-вывода. Пропускная способность по этому типу операций особенно важна для стандартных задач в хранилищах данных, когда огромные объемы данных перемещаются с места на место или в процессе выполнения запроса сканируются гигабайты хранимых данных. Вопросы сходства и различия в гибкости, высокой готовности и надежности между решениями на базе технологии хранения SAN и решениями на основе дисков прямого подключения останутся за рамками данной статьи. Превосходные описания дисков SATA и протоколов SAS приведены в материалах организаций SCSI Trade Association (http://www.scsita.org) и Serial ATA International Organization (http://www.sata-io.org).
Для тестирования прототипа мы использовали реальные базы данных общей емкостью более 2 Тбайт из хранилища данных, управляемого SQL Server 2000. Кроме того, для измерения пропускной способности дисков мы воспользовались утилитой под названием SQLIO (SQLIO.exe доступна на сайте http://www.microsoft.com/downloads).
Четыре компании предоставили нам свое оборудование для создания прототипа сервера. В Таблице 1 указана стоимость использованных комплектующих в ценах на декабрь 2005 года. Newisys (Sanmina-MCI Company) предоставила сервер модели 4300 с оперативной памятью объемом 32 Гбайт и четырьмя двухъядерными процессорами AMD Opteron 2,2 ГГц. Newisys также предоставила 64 диска Seagate SATA емкостью по 400 Гбайт. LSI Logic Corporation предоставила 6 контроллеров дисков (HBA) SAS3442X. Vitesse Semiconductor Company предоставила 4 карты расширения SAS. А Chenbro Micom Company предоставила 4 дисковых стойки с 16 отсеками каждая. Рисунок 1 отражает конфигурацию, созданную из этих комплектующих.
Мы решили использовать адаптеры SAS HBA и платы расширений для SAS от компании LSI, потому что это активно развивающаяся технология, которая эволюционирует от традиционного стандарта SCSI и в связи с тем, что SAS позволяет одновременно подключать диски SATA и SAS к одному и тому же контроллеру. Мы установили на сервере Newisys шесть SAS HBA, задействовав 4 слота PCI-X 133 МГц, 1 слот PCI-X 100 МГц и 1 слот PCI-X 66 МГц. На материнской плате 6 контроллеров HBA в этой конфигурации распределены по шинам PCI-X и трем мостам PCI-X (см. Рисунок 1). Это позволило оптимизировать полосу пропускания и обеспечить высокую скорость обработки данных. Мы обнаружили, что SQL Server 2005 может справляться с большим количеством данных, поэтому чем быстрее контроллеры и диски, тем быстрее оперативная память сможет обрабатывать запросы и выполнять запись данных.
Благодаря использованию контроллера дисков SAS от компании LSI и платы расширения SAS от Vitesse, нам удалось соединить одним кабелем Molex каждый контроллер диска HBA в каждом из шести PCI-X слотов с одной из четырех карт расширения SAS и таким образом уменьшить число кабелей с 48, как было у Грея, до шести. А имея 6 контроллеров дисков HBA и только 4 карты расширения от Vitesse, мы смогли подключить дополнительные кабели Molex для контроллеров дисков 5 и 6 к тем же платам расширения Vitesse SAS, к каким были подключены контроллеры 3 и 4.
Платы расширения SAS позволяют последовательно проводить дополнительное расширение, увеличивая число дисков, которые можно напрямую подключить к контроллерам дисков. Однако наше первоначальное тестирование показало, что один контроллер может управляться максимум с 12 дисками при последовательном сканировании. Шесть карт могут полностью использовать полосу пропускания 72 дисков для повышения производительности, но также позволят удвоить или утроить число дисков, путем добавления устройств расширения с дополнительными дисками.
К устройствам расширения Vitesse мы применили зонную систему, что позволило разбить трафик от восьми физических дисков на каждый из контроллеров 3, 4, 5 и 6. В принципе, плата расширения Vitesse SAS позволяет установить 16 физических дисков SATA, используя кабели Infiniband, и одним кабелем соединить плату с каждым контроллером дисков LSI HBA в шести слотах PCI-X. В нашей конфигурации каждый LSI HBA имел пропускную способность от 400 Мбайт в секунду – вдвое больше современной пропускной способности типичного волоконно-оптического контроллера, используемого для подключения к SAN.
Как только все оборудование было собрано, а кабели подключены, мы с помощью SQLIO.exe смогли воочию убедиться в том, что прототип развивает скорость 2,2 Гбайт в секунду при последовательных считываниях, чуть больше 2 Гбайт на последовательных записях, и что у нас более 24 Тбайт доступного дискового пространства. Я хочу еще раз обратить ваше внимание на то, что система дисков прямого подключения, обеспечивающая пропускную способность более 2 Гбайт в секунду, необычайно хороша в плане быстродействия – во многих случаях она производительнее хранилищ SAN, которые в 40 с лишним раз дороже нашего решения. Стоимость некоторых хранилищ SAN на терабайт дискового пространства близка к 20000 долл. А стоимость всего нашего прототипа вместе со всеми дисками и дополнительным дисковым оборудованием составляет приблизительно 46100 долл.
Прототип превзошел наши ожидания, и тем не менее, его результат оказался несколько меньше пропускной способности в 2,5 Гбайт однотипных операций ввода-вывода в секунду, достигнутой Джимом Греем. Возможно, это объясняется тем, что мы использовали протоколы SAS. В новых тестах мы постараемся повысить пропускную способность. Зато, используя SAS, мы смогли наращивать платы расширения, добавив к имеющимся четырем картам сервера еще несколько, и уменьшить число кабелей, ведущих от контроллеров дисков к устройствам расширения, с 48 до 6. Одним словом, мы могли бы добавить к установленным 64 дискам еще больше – возможно, удвоить их количество, доведя до 128, – что дало бы нам более 48 Тбайт доступного дискового пространства.
Работаем с реальными данными
Довольные пропускной способностью и вместимостью наших дисков, продемонстрированной в тестовом режиме работы, мы приступили к воссозданию базы данных объемом 2 Тбайт. Все 64 диска были заняты двумя центральными базами данных, по 2 Тбайт данных, сформированными в рамках одного экземпляра SQL Server 2000. С помощью Windows 2003 мы применили зеркалирование дисков. Это уменьшило объем доступного пространства до 12 Тбайт. Учитывая стоимость и пропускную способность этого сервера, а также отказоустойчивость зеркалированных дисков, можно было не сомневаться, что мы построили высокопроизводительный, надежный сервер с большим количеством дискового пространства. Даже 12 Тбайт делали наш сервер-прототип обладателем мощного хранилища.
Мы воспроизвели две пользовательских базы данных. Каждая база данных – и целевая, и база-источник – содержали по 16 файлов данных SQL Server, и сначала каждый файл был помещен на отдельном зеркалированном томе. Затем мы совместили по восемь файлов каждой базы данных на одном и том же наборе из восьми зеркалированных дисков, чтобы иметь восемь свободных зеркалированных дисков для TempDB и журнального файла SQL Server.
Как только мы воспроизвели свои базы данных на сервере-прототипе, мы начали выполнять хранимые процедуры, запросы и построение индексов. Так мы смогли сравнить рабочие характеристики прототипа и реального сервера, имевшего 16 процессоров, 64 Гбайт оперативной памяти, который был соединен с высокопроизводительным хранилищем SAN с шестью контроллерами волоконно-оптической связи, обладавшими пропускной способность однотипных операций в 170 Мбайт в секунду. Сравнение некоторых основных результатов по обоим серверам приведено в Таблице 2.
Это не все результаты, которые мы могли бы привести, однако уже по Таблице 2 видно, что наш прототип имеет преимущество перед более крупным и дорогостоящим сервером. Кроме того, для таких операций, как SELECT INTO и построение индекса, преимущество очень существенное. На реальном сервере немного быстрее был только поиск по диапазонному критерию (range query). Мы планируем провести много других тестов, но не по однотипным операциям ввода-вывода, а на основе рабочих задач со смешанными операциями ввода-вывода и задач OLTP. Важно отметить, что использованные нами в тестах диски SATA сравнимы по пропускной способности с дисками SCSI и SAS только когда операции ввода-вывода полностью однотипны. А вот по произвольным операциям ввода-вывода диски SATA значительно медленнее дисков SCSI и SAS. Типичный диск SATA 7200 RPM обеспечивает примерно 100 операций ввода-вывода в секунду, тогда как SCSI и SAS диски - более 150. Поскольку на нашем сервере были установлены контроллеры дисков и устройства расширения SAS, в следующем цикле тестов мы просто вынем диски SATA из стойки Chenbro и вставим в нее диски SAS. Также мы надеемся на хорошие результаты по операциям OLTP.
Аппаратное обеспечение, использовавшееся в нашем прототипе сервера, в сочетании с Windows Server 2003 x64 и SQL Server 2005 x64 обнаружило потрясающую вычислительную мощность базы данных, огромный объем памяти и максимальную пропускную способность. Надеюсь, что результаты, представленные в этой статье, побудят читателей рассмотреть возможность использования SQL Server 2005 x64 на серверах разработки и серверах контроля качества совместно с производственными приложениями.
Выражаю особую благодарность Джиму Грею из команды Microsoft Research за его исследования, которые послужили поводом для создания нашего прототипа.
Рич Джонсон (richjohn@microsoft.com) - архитектор приложений для бизнес-аналитики в Microsoft Consulting Services. Работает в Microsoft с 1996 года менеджером по проектам и архитектором проектов OLTP и проектов хранения данных на основе SQL Server.
Таблица 1. Комплектующие и цены
Комплектующие | Цена, долл. |
сервер Newisys 4300, 32 Гбайт памяти, 4 двухъядерных процессора AMD Opteron 2,2 ГГц; | 22500 |
64 диска Seagate SATA 7200 емкостью по 400 Гбайт; | 11340 |
6 контроллеров LSI SAS3442X; | 1600 |
4 устройства расширения Vitesse SAS; | 3980 |
4 стойки Chenbro; | 6680 |
всего | 46100 |
Таблица 2. Результаты сравнительных тестов для сервера-прототипа и реального сервера
Тест | Прототип, чч:мм:сс | Реальный сервер, чч:мм:сс |
Построение индекса по столбцу с одним целочисленным значением в Таблице из 35 миллионов строк | 00:00:12 | 00:00:17 |
Выполнение запроса SELECT INTO с 35 миллионами строк | 00:00:54 | 00:01:53 |
Выполнение запроса SELECT INTO с 204 миллионами строк | 00:04:04 | 00:14:53 |
Выполнение запроса SELECT INTO с 203 миллионами строк из нескольких небольших таблиц, общим объемом 100 Гбайт, включая несколько преобразований над столбцами | 01:24:11 | 02:35:02 |
Поиск с диапазонным критерием по 70 миллионам строк из 6 разбитых таблиц SQL Server 2000 с использованием представления UNION ALL | 00:00:56 | 00:00:53 |