Создание высокопроизводительных баз данных на основе федеративных (интегрированных) серверов БД Microsoft SQL Server 2000


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

Этот документ носит исключительно информативный характер. MICROSOFT НЕ ДАЕТ В НЕМ НИКАКИХ ГАРАНТИЙ, НИ ЯВНЫХ, НИ ПОДРАЗУМЕВАЕМЫХ.

©2000 Microsoft Corporation. Все права защищены.

Microsoft, Windows и Windows 2000 являются либо зарегистрированными товарными знаками, либо товарными знаками корпорации Microsoft Corporation в США и/или других странах.

Других товарные знаки и торговые марки, упомянутые в настоящем документе, являются товарными знаками своих законных владельцев.

Содержание

 

Введение...................................................................................................... 4

Современная масштабируемая архитектура.................................................. 4

Новое измерение ¾ экстенсивное масштабирование...................................... 5

Запас мощности для приложений электронной коммерции............................... 6

Достижение высокой надежности................................................................. 8

Будущее SQL Server.................................................................................. 9

Распределенные секционированные представления в SQL Server 2000. Технический обзор     10

Как работают распределенные секционированные представления....................... 13

Создание распределенных секционированных таблиц и представлений........... 13

Как процессор запросов использует распределенные секционированные представления    14

Проектирование систем с эффективным использованием распределенного секционированного представления............................................................................................. 16

Планирование разбиения.......................................................................... 16

Проектирование прикладного уровня с равномерным распределением нагрузки 17

Обеспечение высокой надежности............................................................. 18

Резервное копирование и восстановление федеративных серверов баз данных 18

Использование системных сетей (System Area Networks)................................... 19

Compaq ServerNet II................................................................................ 19

 


Введение

С выходом Microsoft® Windows® 2000 открылись новые технологические перспективы, основанные на  новейшей операционной системе и прогрессивной архитектуре баз данных. Значимость этих перспектив, почеркивают несколько мировых рекордов по производительности, достигнутых при совместном использовании  SQL Server 7.0 и Windows 2000 и объявленных недавно  Microsoft. Еще раз подтверждено, что Microsoft SQL Server 2000 способен на равных конкурировать с самыми производительными компьютерными системами, независимо от используемой в них аппаратной или программной платформы.

Эти  рекорды удалось достичь благодаря стратегии Microsoft, направленной на обеспечение практически неограниченной экстенсивной масштабируемости программного обеспечения ¾ когда масштабирование достигается за счет распределения рабочей нагрузки между группами серверов. Следующим шагом в этом году станет выпуск SQL Server 2000, который позволит строить приложения с беспрецедентным уровнем масштабируемости и надежности. Эта технология является предвестником полномасштабной реализации подхода к организации кластеров без разделяемых ресурсов, который Microsoft намерена воплотить в новой версии SQL Server, и открывает такие возможности, как локализация сбоев и объединенное управление.

 

Современная масштабируемая архитектура

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

SQL Server  обеспечивает высочайший уровень масштабируемости при использовании мощных серверов с симметричным мультипроцессированием (SMP), которые поддерживают подавляющее большинство современных приложений. Одна такая система с SQL Server и Windows 2000 способна обслужить тысячи пользователей, обеспечивая им доступ к базам  данных, в которых  хранятся миллиарды записей.

SMP-серверы и программное обеспечение с их поддержкой продолжают развиваться стремительными темпами, версии SQL Server и Windows 2000 для 16- и 32-процессорных систем, а также их 64-разрядные версии будут выпущены позднее в этом году.

Производительность SQL Server и соотношение цена/производительность при использовании SMP-систем за последнее время значительно улучшились, что демонстрируют приведенные ниже графики. С начала 1997 г. производительность возросла с 4 тыс. транзакций в минуту до почти 50 тыс. ¾ более чем в десять раз всего за пару лет, в то же время цена значительно снизилась. Ежегодный рост производительности составил 200%, а снижение цен — 65% в год. Эти успехи достигнуты частично за счет повышения производительности и снижения стоимости оборудования; однако SQL Server также прогрессировал очень быстро. Microsoft считает, что в обозримом будущем обе тенденции — совершенствование как оборудования, так и программного обеспечения — будут развиваться в том же темпе.

 

Показатели «Производительность» и «соотношение цена/производительность» для SQL Server на SMP-серверах значительно улучшились за последние годы. Эти графики демонстрируют изменения в показателях, измеренных с помощью тестов TPC-C, за период с 1997 по 1999 гг.

 

Архитектура SMP позволяет "наращивать" серверы путем добавления нескольких процессоров, работающих с общей оперативной памятью. Система может развиваться за счет увеличения объема оперативной памяти, установки дополнительных дисков, сетевых адаптеров и процессоров. Использование SMP — самый распространенный способ масштабирования. Модель программного обеспечения для SMP, которую часто называют моделью с разделяемой памятью, предусматривает работу единственной копии операционной системы, где прикладные процессы исполняются так, как если бы это была однопроцессорная система. Программы для SMP-систем относительно просты в разработке и позволяют воспользоваться преимуществами стандартизированных промышленных аппаратных и программных компонентов.

Новое измерение ¾ экстенсивное масштабирование

Экстенсивное масштабирование широко используется платформой Windows при разделении серверов приложений промежуточного звена. Сейчас Microsoft решает гораздо более сложную проблему ¾ добавление нового измерения к возможностям масштабирования звена базы данных. После выпуска позднее в этом году SQL Server 2000 возможность экстенсивного масштабирования обеспечит пользователям практически неограниченные резервы мощности для эксплуатации приложений баз данных в электронной коммерции. Она позволит распределить нагрузку между несколькими независимыми компьютерами, на которых работает SQL Server, и использовать широко доступное оборудование.

Одна из важнейших особенностей экстенсивного масштабирования с разделением нагрузки — "прозрачность" приложений. При этом группа рассредоточенных серверов взаимодействует так, чтобы обеспечить единое представление данных, сохранив при этом также и возможность их модификации. Экстенсивное масштабирование с разделением в SQL Server 2000 является предвестником полномасштабной реализации подхода к организации кластеров, включая локализацию сбоев и объединенное управление, который Microsoft намерена воплотить в новой версии под кодовым названием "Yukon", последующей за выпуском SQL Server 2000. Отличие экстенсивного масштабирования с разделением заключается в том, что оно не обеспечивает прозрачности администрирования ¾ серверы остаются автономными и управляются независимо.

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

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

Запас мощности для приложений электронной коммерции

Сегодня SQL Server 7.0 и Windows 2000, работающие на SMP-серверах, способны удовлетворить потребности самых мощных приложений для электронной коммерции и корпоративных отраслевых систем. Как показало исследование компании Media Metrix, многие популярные современные Web-узлы электронной коммерции, включая buy.com, Dell, CarPoint, FreeShop.com и CDW.com, используют SQL Server.

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

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

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


Достижение высокой надежности

Экстенсивное масштабирование с разделением нагрузки может использоваться в сочетании со службами Microsoft Cluster Services в Microsoft Windows NT 4.0 и Windows 2000 для повышения надежности системы и обеспечения ее постоянной доступности. Microsoft Cluster Services обеспечивают аварийное переключение с одного сервера на другой при возникновении поломки или необходимости остановки для обслуживания. В SQL Server 2000 и Windows 2000 Data Center средства аварийного переключения могут работать в конфигурациях, содержащих до четырех серверов в кластере.

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

Службы Microsoft Cluster Service обеспечивают миграцию имени виртуального сервера и IP-адресов между узлами кластера, таким образом, клиентская часть даже не "подозревает" о перемещении сервера.

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

 

Microsoft SQL Server Enterprise Edition поддерживает базы данных с высоким коэффициентом доступности. При аварии одного из двух серверов база данных "перемещается" на исправный узел кластера. Таким образом восстанавливается ее работоспособность, и она по-прежнему готова обслуживать клиентов. Эта миграция и восстановление занимает считанные секунды, однако зависит от выполняющихся приложений. SQL Server 2000 и Windows 2000 Datacenter Server поддерживают аварийное переключение в кластерах, содержащих четыре узла.

Будущее SQL Server

Экстенсивное масштабирование с разделением в SQL Server 2000 является предвестником полномасштабной реализации подхода к организации кластеров без разделяемых ресурсов, который Microsoft намерена воплотить в новом продукте под кодовым названием "Yukon", последующим за выпуском SQL Server 2000. Microsoft еще не объявляла даты выпуска бета- или RTM-версии Yukon.

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

Кластеры без разделяемых ресурсов — это конфигурация, в которой каждый сервер кластера управляет собственными ресурсами, так же, как и в группе серверов SQL Server 2000. Каждый сервер имеет свои собственные процессоры, память, накопители и самостоятельно осуществляет блокировку записей и транзакции. Каждый сервер в кластере взаимодействует и координирует свою работу со всеми остальными через сеть или с помощью высокоскоростной технологии соединения с малым временем ожидания, например, GigaNet или ServerNet.

Существует две альтернативы отсутствию разделяемых ресурсов: совместное использование всех ресурсов и разделение дисков. Совместное использование всех ресурсов — архитектура, присущая серверам с симметричным мультипроцессированием (SMP) — SMP-серверы масштабируются путем распределения нагрузки между несколькими процессорами, работающими с общей памятью и устройствами хранения данных. В некоторых современных серверах может использоваться до 64 процессоров.

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

Распределенные секционированные представления в SQL Server 2000. Технический обзор

Распределенные секционированные представления в Microsoft® SQL Server 2000 — это группа расширений SQL Server, которые поддерживают "прозрачное горизонтальное" разбиение данных между несколькими серверами БД. Горизонтальное разбиение данных обеспечивает поддержку трафика, свойственного крупнейшим Web-узлам.

Хотя серверы баз данных взаимодействуют при обработке секционированных данных, они функционируют автономно. Каждый сервер управляется независимо, подчиняется собственным правилам работы и может поддерживать независимые процессы и данные. Такие автономные серверы известны также под названием федеративных (интегрированных) серверов. Рекордные показатели в тестах, опубликованные после выпуска Microsoft Windows® 2000, были достигнуты на кластерных системах под управлением Windows 2000 с использованием федеративных серверов базы данных SQL Server 2000.

SQL Server 2000 проектировался таким образом, чтобы отвечать возрастающим потребностям крупномасштабных систем, построенных на основе архитектуры Windows DNA, в обработке данных. Windows DNA позволяет разбить блоки обработки данных на следующие логические уровни:

·         Уровень обслуживания пользователя, реализующий интерфейс, который видят пользователи. Обычно он взаимодействует со вторым уровнем для обработки бизнес-логики.

·         Уровень бизнес-логики управляет работой Web-узла и использует постоянное хранилище данных, предоставляемое третьим уровнем.

·         Уровень хранения данных обеспечивает постоянное хранение данных, необходимых для работы Web-узла.

Группа федеративных серверов базы данных SQL Server 2000 может играть роль уровня служб хранения данных крупнейших Web-узлов. Общая производительность федеративных серверов повышается, если они работают в среде системной сети (system area network — SAN) с высокой пропускной способностью, подобной Compaq ServerNet II.

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

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

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

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

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

SQL Server версии 7.0 и SQL Server 2000 поддерживают секционированные представления; однако в SQL Server 2000 реализованы ключевые механизмы, которые обеспечивают возможность экстенсивного масштабирования:

·         Секционированные представления SQL Server 2000 являются обновляемыми. При обработке распределенных данных "прозрачность" их размещения для приложений является решающим фактором. Обновляемые представления позволяют полностью имитировать поведение исходной таблицы, тогда как необновляемые представления подобны копии, доступной только для чтения.

·         Оптимизатор запросов SQL Server 2000 поддерживает новые алгоритмы, которые позволяют свести к минимуму объем пересылки распределенных данных. Планы распределенного исполнения, генерируемые SQL Server 2000, позволяют добиться более высокой производительности при обработке больших наборов запросов, чем планы, формируемые SQL Server версии 7.0.

Секционированные представления SQL Server 2000 наилучшим образом подходят для обработки SQL-предложений подобным тем, что формируются Web-узлами и системами оперативной обработки транзакций (Online Transaction Processing — OLTP).

Как работают распределенные секционированные представления

Распределенные секционированные представления SQL Server 2000 используют средства обработки распределенных запросов для расширения сферы действия секционированных представлений на несколько серверов.

Настройка распределенных секционированных представлений осуществляется очень просто и происходит в три этапа:

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

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

3.    Создание на всех серверах-членах распределенного секционированного представления, объединяющего строки из всех таблиц-членов в виртуальной таблице, которая "ведет себя" как исходная таблица.

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

Создание распределенных секционированных таблиц и представлений

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

Вы проектируете таблицы-члены так, чтобы каждая из них хранила горизонтальный фрагмент исходной таблицы, соответствующий некоторому диапазону ключей. Диапазоны разбиения зависят от значений данных в соответствующем столбце. Диапазоны значений в каждой таблице-члене контролируются ограничением CHECK, действующим на соответствующий столбец, и не могут перекрываться. Например, нельзя сделать так, чтобы одна таблица содержала диапазон от 1 до 200000, а другая от 150000 до 300000, поскольку будет неясно, в какой таблице должны находится значения от 150000 до 200000. Ограничение CHECK для первого столбца CustomerID в примере выглядит так:

  CustomerID   INTEGER PRIMARY KEY

               CHECK (CustomerID BETWEEN 1 AND 32999),

 

После этого необходимо описать распределенное секционированное представление на каждом сервере-члене; причем представление должно иметь одно и то же имя. Это позволяет запросам ссылаться на распределенное секционированное представление по имени при выполнении на любом из серверов-членов. Система работает так, как если бы на каждом сервере-члене находилась копия исходной таблицы, хотя на самом деле там хранится лишь таблица-член и распределенное секционированное представление. Расположение данных "прозрачно" для приложения.

Чтобы создать распределенные секционированные представления:

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

·         Создайте на каждом сервере-члене распределенное секционированное представление. Представления будут использовать распределенные предложения SELECT для доступа к данным на связанных серверах-членах и объединять строки из других таблиц-членов со строками из локальной таблицы-члена.

Если расположение таблиц в примере таково: Customers_33 на сервере Server1, Customers_66 на Server2 и Customers_99 на Server3, вы можете проделать на сервере Server1 следующее:

·         Добавить описание связанного сервера с именем Server2, содержащее информацию о соединении для Server2, и описание связанного сервера с именем Server3 для доступа к серверу Server3.

·         Создать распределенное секционированное представление:

CREATE VIEW Customers AS

   SELECT * FROM CompanyDatabase.TableOwner.Customers_33

UNION ALL

   SELECT * FROM Server2.CompanyDatabase.TableOwner.Customers_66

UNION ALL

   SELECT * FROM Server3.CompanyDatabase.TableOwner.Customers_99

 

Проделайте то же самое на серверах Server2 и Server3.

Как процессор запросов использует распределенные секционированные представления

Процессор обработки запросов в Microsoft SQL Server 2000 был усовершенствован для оптимизации исполнения распределенных секционированных представлений. Наиболее существенное усовершенствование касается сокращения объема передаваемых между серверами-членами данных.

SQL Server 2000 строит "интеллектуальные" динамические планы использования распределенных запросов для доступа к данным в удаленных таблицах-членах. Процессор обработки запросов:

·         Использует OLE DB для получения определений ограничений CHECK из каждой таблицы-члена, чтобы построить карту распределения ключевых значений по таблицам-членам.

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

Предположим, что на сервере Server1 выполняется запрос:

SELECT *

FROM Customers

WHERE CustomerID BETWEEN 3200000 AND 3400000

 

SQL Server 2000 извлекает строки со значениями ключей от 3200000 до 3299999 из локальной таблицы и использует распределенный запрос для получения строк со значениями ключей от 3300000 до 3400000 с сервера Server2.

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

CREATE PROCEDURE GetCustomer @CustomerIDParameter INT AS

  SELECT *

  FROM CompanyDatabase.TableOwner.Customers

  WHERE CustomerID = @CustomerIDParameter

 

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

IF @CustomerIDParameter BETWEEN 1 and 3299999

  Get row in local table CompanyDatabase.TableOwner.Customer_33

ELSEIF @CustomerIDParameter BETWEEN 3300000 and 6599999

  Get row in linked table Server2.CompanyDatabase.TableOwner.Customer_66

ELSEIF @CustomerIDParameter BETWEEN 6600000 and 9999999

  Get row in linked table Server3.CompanyDatabase.TableOwner.Customer_99

Проектирование систем с эффективным использованием распределенного секционированного представления

Распределенные секционированные представления стали важнейшим новым усовершенствованием, которое позволило Microsoft SQL Server 2000 достичь рекордного уровня производительности, объявленного при выпуске Microsoft Windows® 2000. Для достижения столь высокой производительности экстенсивно масштабируемая система должна равномерно распределять нагрузку между несколькими серверами каждого звена. На уровне федеративной базы данных этого можно добиться, только если приложение посылает каждое SQL-предложение тому серверу-члену, который содержит большую часть необходимых данных.

Планирование разбиения

Секционирование эффективно, если таблицы в базе данных естественным образом можно разбить на фрагменты, и при этом большинство строк, к которым обращается отдельное SQL-предложение, может быть размещено на одном сервере-члене. Таблицы объединяются в связанные группы. Например, при вводе заказа используются таблицы Orders, Customers и Parts, в которых фиксируется соответствие между клиентами, заказами и деталями. Разбиение будет наиболее эффективно, если все строки логической группы таблиц могут быть размещены на одном сервере-члене.

Разбиение наиболее эффективно, если таблицы в базе данных могут быть сегментированы симметрично, т.е. когда:

·         Связанные между собой данные размещаются на одном сервере-члене, и большинство SQL-предложений могут быть направлены соответствующему серверу-члену таким образом, что объем пересылки данных с других серверов-членов будет минимален или она вообще отсутствует. Задача проектирования распределенного секционированного представления может быть сформулирована в виде правила 80/20: разбиение должно быть произведено так, чтобы большинство SQL-предложений могли направляться на сервер-член, где хранится, по крайней мере, 80% необходимых данных, а остальные 20% или менее пересылались посредством распределенных запросов. Хорошим тестом возможности достичь этой цели является проверка того, размещаются ли  все строки сегмента на том же сервере-члене, что и строки, на которые они ссылаются через внешние ключи. База данных, удовлетворяющая этим требованиям — хороший кандидат на разбиение.

·         Данные равномерно распределены между серверами-членами.

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

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

·         Значительно повышает производительность работы баз данных, которые не могут быть секционированы симметрично, за счет асимметричного разбиения некоторых таблиц.

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

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

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

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

Проектирование прикладного уровня с равномерным распределением нагрузки

Для достижения высокой производительности уровень бизнес-логики реализуется в виде идентичных компонентов COM+, работающих на серверах приложений. При этом средства управления нагрузкой Windows 2000 Network Load Balancing могут равномерно распределить запросы в звене бизнес-логики. Поскольку запрос пользователя может обрабатываться на любом сервере приложений, бизнес-компоненты должны каким-то образом осуществлять маршрутизацию SQL-предложений на соответствующие серверы-члены. Бизнес-компоненты должны "уметь" сравнивать данные, полученные с клиентского уровня, и определять, какой из серверов-членов должен обрабатывать SQL-предложение.

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

Обеспечение высокой надежности

Доступ к данным на крупных Web-узлах или в системах оперативной обработки транзакций должен быть чрезвычайно надежен. Данные должны быть доступны круглосуточно, 7 дней в неделю, 52 недели в год. На прикладном уровне отказ одного сервера может привести к снижению производительности системы, но не вызовет остановки всей системы. Остальные серверы кластера перераспределят между собой дополнительную нагрузку, пока отремонтированный сервер не будет вновь подключен к кластеру.

Хотя SQL Server 2000 не поддерживает такой тип кластеризации с распределением нагрузки, он поддерживает службы Microsoft Cluster Services и аварийное переключение. В таких кластерах каждый сервер — это от двух до четырех серверов, которые воспринимаются приложениями как один виртуальный сервер. Если основной узел кластера выходит из строя, другой узел выявляет факт поломки и автоматически начинает обслуживать все запросы, направляемые виртуальному серверу. Кластер продолжает работать в таком режиме до тех пор, пока отремонтированный сервер не подключается обратно. Кластеризация с аварийным переключением помогает обеспечить постоянную доступность, но не осуществляет никакого распределения нагрузки.

Резервное копирование и восстановление федеративных серверов баз данных

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

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

Наиболее важный аспект в организации восстановления набора БД-членов — тот же, что и при восстановлении любой другой базы данных: планирование и проверка процедур восстановления перед запуском базы данных в эксплуатацию. Вы должны определить порядок восстановления состояния всех баз данных на один и тот же логический момент времени. SQL Server 2000 будет включать соответствующие средства для поддержки восстановления всех БД-членов.

Использование системных сетей (System Area Networks)

Системные сети — SAN (system area networks) используются для организации высокоскоростного и очень надежного соединения в кластерах или группах серверов. Многоярусные распределенные системы могут порождать исключительно высокий уровень межсерверного сетевого трафика. Обеспечение высокой производительности в таких системах возможно, только если передача сообщений осуществляется достаточно быстро и серверы не тратят много времени на обработку сообщений и ожидание ответов. По сравнению с локальными (LAN) и глобальными (WAN) сетями SAN обеспечивают более высокий уровень трафика, снижая нагрузку на центральные процессоры систем и время ожидания сообщений. Кроме того, SAN более надежны, чем LAN или WAN, и используются в группах или кластерах, где серверы расположены недалеко друг от друга, например в одном машинном зале.

Компании Compaq, Intel, Microsoft и другие разработали архитектуру виртуального интерфейса Virtual Interface (VI) Architecture в качестве общей спецификации SAN, которая допускает множество аппаратных реализаций. Архитектура VI позволяет создать гибкие, масштабируемые и надежные решения на основе недорогих стандартных компонентов. Системные сети VI могут удовлетворить жесткие требования крупных Web-серверов к интенсивности обмена сообщениями. Для взаимодействия как в локальных или глобальных сетях TCP/IP, так и в системных сетях VI серверные приложения могут использовать Windows Sockets Direct API в составе Windows 2000. Дополнительную информацию об архитектуре VI можно получить по адресу http://www.viarch.org.

Системные сети (SAN) хорошо подходят для использования с SQL Server 2000 в следующих случаях:

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

·         Серверы SQL Server 2000 используют SAN для повышения скорости обработки распределенных запросов, распределенных транзакций и репликации данных на серверах баз данных и расположены в одном месте.

Compaq ServerNet II

Compaq ServerNet II будет выпущена вскоре за ServerNet. Сейчас эта новая технология находится в стадии бета-тестирования. Ожидается, что она будет доступна для использования во втором квартале 2000 г. Она должна обеспечить значительное повышение производительности и представляет собой основанную на стандартах аппаратную реализацию архитектуры VI, которая послужит "мостом" на пути к архитектуре ввода/вывода нового поколения под названием InfiniBand.

Хотя Compaq еще не объявила о широкой доступности ServerNet II, Microsoft и Compaq используют ее в некоторых тестах и демонстрациях для подтверждения производительности и масштабируемости, которые она обеспечит. Технология станет ключевым "строительным блоком" при создании масштабируемых кластеров, необходимых для Интернета и других приложений с многоярусной архитектурой.

ServerNet II базируется на надежной, отказоустойчивой конструкции ServerNet, обеспечивающей высокую производительность и зрелой технологии, первоначально разработанной для архитектуры Himalaya. Она использует новую технологию с применением специализированных интегральных микросхем (ASIC), которые позволяют значительно повысить производительность. Высокая мощность достигается за счет использования 12-портовых коммутаторов и реализации стандартов архитектуры VI на аппаратном уровне.

Compaq, Microsoft и Intel опубликовали спецификацию архитектуры VI Architecture в 1997 г. В ее разработке приняли участие более 100 компаний. Архитектура обеспечивает распределенным приложениям, таким как кластеры SQL2000, возможность пересылать информацию практически на аппаратном уровне, устраняя накладные расходы на поддержку TCP/IP и операционной системы. Надежность и отказоустойчивость конструкции ServerNet II дополняется аппаратной реализацией архитектуры VI, что позволяет достичь самого высокого уровня надежности. При этом удается организовать чрезвычайно эффективное взаимодействие серверов в кластере, высокая скорость которого позволяет серверам выполнить больше работы. Тестовые замеры производительности SQL 2000 продемонстрировали преимущества масштабирования с использованием интерфейса VI и технологии ServerNet II, зафиксировав рекордные показатели производительности кластера.

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