Алексей Шуленин, Microsoft
Реферат доклада
Анализ тенденций развития крупного корпоративного бизнеса как в нашей стране, так и за рубежом объективно свидетельствует о преобладании интереса к внедрению платформенных решений. Ни один изолированный продукт, будь это операционная система, Web-сервер, сервер электронной почты, сервер баз данных и т.д., сам по себе не в состоянии решить весь спектр проблем, возникающих на этапах автоматизации бизнес-процессов современного предприятия. Это приводит к тому, что предпочтения рынка заметно смещаются в сторону комплексных систем, что закономерно. В конечном счете заказчику нужен не набор отдельно взятых программных продуктов, а интегрированное решение на их основе. Microsoft Windows DNA (Distributed interNetwork Architecture) представляет собой интегрированную платформу для построения и внедрения бизнес-решений, преимущественно ориентированных на работу в Интернет/интранет. Подобно молекулам ДНК, составляющим основу всего живого, концепция Windows DNA направлена на то, чтобы служить информационной основой для предприятий самого различного уровня, формы собственности и отраслевой направленности. (В английском языке аббревиатура DNA расшифровывается как DeoxyriboNucleic Acid, т.е. ДНК). Благодаря тому, что Windows DNA базируется на Windows 2000, операционной системе в которую изначально встроены Интернет-сервисы и технологии создания распределенных приложений СОМ+, разработчики могут сфокусироваться непосредственно на бизнес-аспектах своих систем, используя при этом обширное множество языков программирования и средств быстрого построения приложений. Уровень данных, с которым непосредственно взаимодействует слой прикладной бизнес-логики, основывается на сервере баз данных Microsoft SQL Server 2000. Именно он будет рассмотрен в ходе данного доклада.
Как наверняка знает большинство аудитории, в особенности те из вас, кто интересуется историей создания Microsoft SQL Server или принимает участие в тестировании новых версий этого сервера баз данных, проект разработки SQL Server 2000 получил кодовое наименование Shiloh. Такое название носит город в штате Теннеси, близ которого в апреле 1862 г. произошла решающая битва между войсками Севера и Юга в Гражданской войне США. SQL Server 2000 призван закрепить и развить тот успех, который получила на рынке СУБД 7-я версия этого продукта, а также продемонстрировать свою конкурентоспособность и преимущества в high-end системах. Несмотря на то, что он расценивается в целом как эволюционный релиз, базирующийся на инновационных принципах, заложенных в архитектуру версии 7.0, эти принципы получили мощный импульс дальнейшего развития в направлениях роста производительности, надежности, управляемости и масштабируемости в новой версии SQL Server. Очевидно, что каждый из перечисленных критериев имеет крайне важное значение при проектировании уровня данных в корпоративных системах. Разработка SQL Server 2000 как составной части платформе Windows DNA имела своей целью в первую очередь добиться лидерства в пространстве этих критериев. В рамках настоящего доклада мы рассмотрим только два из перечисленных измерений, а именно, масштабируемость и управляемость.
В SQL Server 2000 нашел свое отражение первый этап технологии shared nothing. Рассмотрим две основные тенденции наращивания масштабируемости систем. Наиболее широко распространенным на данный момент является подход, связанный с вертикальным масштабированием (scale-up). К нему можно отнести появившиеся еще в начале 70-х годов SMP-системы, параллельные кластеры на основе общих дисков (несмотря на то, что идея кластеров возникла едва ли не раньше симметричного мультипроцессирования, реально они получают распространение в середине 80-х стараниями, в первую очередь, DEC). Наконец, еще почти десятилетие спустя на арену выходит технология NUMA. В качестве характерной особенности вертикального масштабирования выступает наличие тех или иных общих ресурсов (shared resources). Для многопроцессорных серверов это практически shared everything, т.е. применительно к СУБД - блокировки, журнал транзакций, процедурный кэш, буферный пул, операции ввода/вывода и т.д., для параллельных кластеров - разделение доступа к общим дискам, для ссNUMA - согласование кэша. Таким образом наряду с очевидными преимуществами вертикальное масштабирование имеет свои недостатки, главный из которых - "напряжение" на общих ресурсах. Влияние этого эффекта можно продемонстрировать следующим образом. Если построить условный график масштабируемости scale-up системы, отложив по оси Y, скажем, производительность, а по оси Х - системные ресурсы, например, количество процессоров в SMP-сервере или узлов в кластере, то с ростом Х угол наклона кривой масштабируемости будет уменьшаться, стремясь к горизонтальной линии. При очень больших Х возможно даже ухудшение производительности. Другой слабой стороной является зависимость от аппаратной платформы. Например, в случае SMP мы не можем бесконечно наращивать количество процессоров в сервере сверх того числа, которое на данный момент реально поддерживает производитель данного "железа". Специфика NUMA, поддержку которой обеспечивает довольно ограниченное число поставщиков оборудования, таких как Sequent Computers Inc., Data General Corp. и некоторые другие, требует специальной операционной системы и внесения серьезных изменений на уровне ядра СУБД, не говоря уже о немалой стоимости таких комплексов.
В плане развития своего сервера баз данных Microsoft делает ставку на параллельные архитектуры горизонтального масштабирования (scale-out), основной принцип которой можно сформулировать как "никаких общих ресурсов" (shared nothing). В идеале это означает кластер из группы машин потребительского класса, каждая из которых имеет свои собственные ресурсы в виде процессоров, памяти, дисков, решающих тем не менее совместные задачи, например, работу с распределенной базой данных. Такой подход представляется очень привлекательным по следующим причинам. Во-первых, отсутствие каких бы то ни было общих ресурсов в подобной конфигурации снимает риск возникновения "пробок" на доступе к системе, что обеспечивает практически линейную масштабируемость. Во-вторых, он не требует использования дорогостоящих аппаратных решений, так как виртуальный кластер собирается из обыкновенных серверов. В третьих, масштабируемость вверх и вниз обеспечивается простым увеличением или уменьшением числа узлов. Естественно, что ничто само по себе с неба не падает, и для реализации этой концепции в ее полном объеме Microsoft предстоит разрешить многочисленные довольно трудоемкие технические проблемы. Однако уже первые шаги внедрения этой технологии показали, что игра стоит свеч. Напомню, что в феврале 2000 года, находясь в процессе бета-тестирования, Microsoft SQL Server 2000 установил новый мировой рекорд скорости обработки запросов - 227 079 транзакций в минуту. Измерения производились по официальным тестам TPC-C - см. http://www.tpc.org. Результат был продемонстрирован на кластере из 12 серверов Compaq ProLiant 8500 (8 процессоров Intel Pentium III Xeon 550 МГц каждый) под управлением MS Windows 2000, где в качестве ПО промежуточного слоя использовался Microsoft СОМ+. Несмотря на то, что на первом этапе реализации не поддерживается автоматическое перераспределение данных в случае добавления нового узла в или, наоборот, выхода одного из узлов виртуального кластера из строя, несмотря на многие другие ограничения, хотелось бы подчеркнуть, что на момент подготовки доклада достигнутый показатель является абсолютным рекордом быстродействия среди всех серверов баз данных на любой операционной системе и аппаратной платформе. Данный результат эквивалентен системе, производительность которой равна 575 сайтам Amazon.com и eBay, вместе взятым.
На сегодня редакции SQL Server могут работать на полном спектре операционных систем семейства Windows. Настольные редакции SQL Server 7.0 и выше, а также MSDE, входящий, например, в состав MS Access 2000 как альтернативный по сравнению с Jet механизм обработки данных, устанавливаются на Windows 9х, Windows NT 4.0 Workstation и Windows 2000 Professional. Стандартные редакции SQL Server 7.0 работают на Windows NT 4.0 Server и Windows 2000 Server. Корпоративная редакция SQL Server предназначена для Windows NT 4.0 Enterprise Edition, Windows 2000 Advanced Server и Windows 2000 DataCenter. Следует отметить, что все они базируются на едином коде, тем самым, обеспечивается практически 100%-совместимость приложений. Начав с использования SQL Server Desktop Edition или MSDE, организация по мере роста может переходить на более мощные редакции SQL Server, не переписывая по соображениям совместимости работающие приложения. Основные отличия корпоративной редакции Windows NT 4.0 от стандартной состояли в поддержке отказоустойчивых кластеров, большего числа процессоров (8 по сравнению с 4 непосредственно "из коробки") и возможностью адресации приложениями большего объема памяти (3 Гб по сравнению с 2). SQL Server 2000 Enterprise Edition будет адресовать 8 Гб на Windows 2000 Advanced Server и 64 Гб на Windows 2000 DataCenter. Это достигается благодаря поддержке Address Windowing Extensions (AWE) - набору дополнительных функций управления памятью в составе Win32 API, которые позволяют адресовать больший объем памяти, нежели 4 Гб даже при обычной 32-разрядной адресации за счет его отображения через выделенное "окно" в стандартном адресном пространстве. Эта технология оказывается особеннно эффективной при работе со сверхбольшими базами данных (VLDB), для которой характерны интенсивные по потреблению памяти операции. SQL Server 2000 будет первым продуктом из состава Microsoft BackOffice, для которого выйдет 64-разрядная версия сразу после появления 64-разрядной версии Windows 2000.
Говоря о масштабируемости вниз, следует отметить, что вскоре после выхода SQL Server 2000 Microsoft планирует выпустить мобильную редакцию SQL Server, способную работать на наладонных и карманных компьютерах, а также встраиваемых устройствах, таких как мобильные телефоны, автомагнитолы, видеомагнитофоны и т.д. При этом будет обеспечена совместимость вверх со "взрослыми" редакциями SQL Server за счет использования стандартов OLE DB и ADO и встроенных механизмов репликации. В качестве операционной системы, по всей видимости, будет поддерживаться Windows СЕ 2.11 и выше.
Реляционный механизм SQL Server 2000 обеспечивает немало новых возможностей, которые наверняка окажутся полезными разработчикам бизнес-логики на стороне сервера. Не имея сейчас возможности рассмотреть их всех подробно, назову только некоторые из них, наиболее, как мне представляется, существенные.
Например,
CREATE TABLE country (country_name NVARCHAR(75) NOT NULL PRIMARY KEY) CREATE TABLE employee ( employee_name NVARCHAR(75) NOT NULL, nationality NVARCHAR(75) NOT NULL REFERENCES country ON UPDATE CASCADE ON DELETE NO ACTION, passport_number VARCHAR(25) NOT NULL, PRIMARY KEY (nationality, passport_number))
Например,
CREATE FUNCTION ExtractNamePart(@InName varchar(100), @part tinyint) RETURNS varchar(30) AS BEGIN DECLARE @offset tinyint SET @offset = charindex(' ', @InName) RETURN CASE @part WHEN 1 THEN substring(@InName, 1, @offset-1) WHEN 2 THEN substring(@InName,@offset+1, len(@InName)) ELSE NULL END END SELECT NamePart(fld1) FROM Tbl SELECT : FROM Tbl WHERE NamePart(fld1) = :
Например,
CREATE VIEW CustomersAll AS SELECT CustomerID, CompanyName, Address, Region FROM CustomerEast UNION ALL SELECT CustomerID, CompanyName, Address, Region FROM CustomerCentral UNION ALL SELECT CustomerID, CompanyName, Address, Region FROM CustomerWest CREATE TRIGGER IO_Trig_INS_CustomersAll ON CustomersAll INSTEAD OF INSERT AS BEGIN INSERT INTO CustomersEast SELECT CustomerID,CompanyName,Address,Region FROM inserted WHERE Region = 'East' INSERT INTO CustomersCentral SELECT CustomerID, CompanyName, Address,Region FROM inserted WHERE Region = 'Central' INSERT INTO CustomersWest SELECT CustomerID, CompanyName, Address,Region FROM inserted WHERE Region = 'West' END
Для каждого типа транзакций (INSERT / UPDATE / DELETE) допускается не более одного триггера INSTEAD OF. Для традиционных триггеров AFTER, которых по-прежнему может быть несколько на один тип действия, появилась возможность задавать, какой из них будет выполнен первым, а какой последним при помощи sp_settriggerorder.
В отличие от SQL Server 7.0, XML-расширения к которому вышли уже после выпуска продукта и были основаны на преобразовании уже полученного множества данных в XML-формат, SQL Server 2000 обеспечивает встроенную поддержку XML, когда результаты запросов изначально выводятся в XML-формате. Возможны запросы в том числе на обновление данных. Поддерживаются предикаты FOR XML RAW (плоский recordset), FOR XML AUTO (структурированный recordset на основе связей между таблицами) и FOR XML EXPLICIT, дающий полный контроль над представлением результата. Запросы к SQL Server могут передаваться по HTTP, т.е. прямым доступом к соответствующему URL. Обеспечивается работа с аннотированными схемами (отображение между XML и реляционной схемой) и шаблонами в форме инкапсулированных параметризованных запросов с поддержкой XSL/T и XPATH.
Например,
SELECT SUM(SalesAmount) FROM S WHERE Datepart(mm, SalesDate)=12
в SQL Server 7.0 при любом раскладе требует сканирования всей таблицы, в то время как в SQL Server 2000 мы можем сделать следующее:
ALTER TABLE S ADD SalesMonth as DatePart(mm, SalesDate) CREATE INDEX iSalesMonth on S (SalesMonth, SalesAmount) SELECT SUM(SalesAmount) FROM S WHERE SalesMonth=12При этом будет использован индекс iSalesMonth.
Пример. Предположим, мы хотим определить 5 основных продуктов, по которым сумма скидок за весь период продаж была наибольшей. Это можно сделать, построив представление
CREATE VIEW Vdiscount WITH SCHEMABINDING AS SELECT SUM(UnitPrice*Quantity*Discount) SumDiscountPrice, COUNT_BIG(*) Count, ProductID FROM dbo.[Order Details] GROUP BY ProductID
Если теперь построить по нему индекс
CREATE UNIQUE CLUSTERED INDEX VDiscountInd ON Vdiscount (ProductID),
то будет сохранено не только определение запроса (как в случае обычного представления), но и само проиндексированное множество результатов. Индексированные представления позволяют значительно повысить производительность аналитических запросов, изобилующих предикатами связвания таблиц и агрегатами.
Например,
CREATE DATABASE MyDB COLLATE Latin1_General_CS_AI CREATE TABLE Products (ProductId char(20), ProductName char(20) COLLATE French_CS_AS, Description char(20) COLLATE French_CI_AI) SELECT * FROM PRODUCTS ORDER BY ProductName, Description SELECT * FROM PRODUCTS ORDER BY ProductName COLLATE French_CI_AI
Например,
CREATE FUNCTION LargeOrderShippers ( @FreightParm money ) RETURNS @OrderShipperTab TABLE ( ShipperID int, ShipperName nvarchar(80), OrderID int, ShippedDate datetime, Freight money ) AS BEGIN INSERT @OrderShipperTab SELECT S.ShipperID, S.CompanyName, O.OrderID, O.ShippedDate, O.Freight FROM Shippers AS S, Orders AS O WHERE S.ShipperID = O.ShipVia AND O.Freight > @FreightParm RETURN END SELECT * FROM LargeOrderShippers( $500 )
Данная возможность позволяет устанавливать на один компьютер несколько экземпляров SQL Server. Каждый экземпляр имеет свое множество системных и пользовательских баз данных. Приложения получают возможность устанавливать соединения с любым экземпляром SQL Server так, как если бы те работали на разных компьютерах. На одной машине могут сосуществовать один экземпляр SQL Server 6.5 или 7.0 и один и более экземпляров SQL Server 2000.
Теперь она может работать как кластерный сервис в отказоустойчивом кластере MSCS. Функция отслеживания изменений (change tracking) позволяет вести журнал всех изменений, касающихся полнотекстовых данных. Полнотекстовый индекс теперь может обновляться как по расписанию, так и по мере того, как в данные вносятся изменения, а также принудительно по команде. Фильтрация образов (image filtering) позволяет индексировать документы, хранящиеся в полях типа image, и выполнять по ним запросы. На данный момент возможна работа с простыми текстовыми документами, HTML-файлами, а также документами MS Office. Имеется возможность подключения фильтров третьих фирм.
Позволяют ассоциировать пользовательские метаданные с объектами SQL Server, причем ассоциации сохраняются и после переименования объекта. Это позволяет сделать базу данных более документированной. Следующий пример добавляет свойство с именем Caption и значением EmployeeID к полю ID таблицы Tbl1:
CREATE TABLE Tbl1 (id int , name char (20)) GO EXEC sp_addextendedproperty 'caption', 'Employee ID', 'user', dbo, 'table', Tbl1, 'column', id
Расширенные свойства можно запрашивать с помощью системной хранимой функции fn_listextendedproperty.
Несмотря на то, что приведенные примеры иллюстрированы скриптами на Тransact-SQL, для большинства из них, естественно, имеется возможность выполнить аналогичные действия из графического интерфейса. Утилиты графического интерфейса, такие как SQL Enterprise Manager, SQL Query Analyzer, SQL Profiler и др. также претерпели весьма существенные изменения в целях более простого и удобного использования. Например, в состав SQL Query Analyzer вошли встроенный отладчик хранимых процедур и функций и средство просмотра серверных объектов (object browser). В службы преобразования данных были включены возможности сохранения пакетов в виде кода на VBScript, переноса ограничений типа "первичный / внешний ключ" при импорте / экспорте данных в / из гетерогенных источников (Oracle, Sybase, Access, :), поддержки прилинкованных серверов и т.д. В службы тиражирования добавился новый вид репликации - с использованием сервисов очередей сообщений (MSMQ), благодаря чему не требуется он-лайновая доступность издателя в момент обновления данных на подписчике. Кроме того, тиражирование в SQL Server 2000 поддерживает репликацию изменений схемы данных. Средства создания и управления сервером теплого резерва (log shipping), ранее входившие в состав BackOffice Resource Kit на правах самостоятельной утилиты, были встроены в SQL Enterprise Manager (раздел Management). Если говорить об инструментарии администратора, то пожалуй, наиболее существенным моментом здесь является интеграция SQL Server 2000 со службой каталогов Windows 2000. Соответстующие расширения схемы позволяют хранить в службе каталогов свойства сервера, баз данных, объектов тиражирования и других сущностей, благодаря чему приложения, работающие со службой каталогов, получают возможность запрашивать список серверов в домене или отыскивать сервера, удовлетворяющие тем или иным заданным свойствам. Простейшим примером такого приложения является утилита SQL Active Directory Search, позволяющая находить сервера домена по их атрибутам, хранящимся в службе каталогов, таким как имя сервера, версия, имя базы данных, порядок сортировки по умолчанию, работает ли сервер в кластере и т.д.
Естественно, список новых технологий, заложенных в SQL Server 2000 не ограничивается тем беглым экскурсом, который мы только что предприняли. Наиболее полно ознакомиться с возможностями новой версии слушатели могут, получив 2-ю бета-версию SQL Server 2000, которая будет свободно доступна на http://www.microsoft.com/sql вплоть до появления окончательного релиза. Мы обязательно продолжим наш разговор в дальнейшем более подробно после официального выхода SQL Server 2000.