Решения Microsoft 2000   Продукты  |   Поддержка  |   Поиск  |   Путеводитель по серверу  
microsoft
  Платформа 2001   |   Digital Dashboard - Русские компоненты   |
Основная страница

Введение

Методология

Технологии

Продукты

Решения

Где и как приобрести продукты Microsoft

Где и как обучиться по продуктам Microsoft

Где и как получить техническую поддержку и консультации


Базы данных рабочей группы

Для разработки баз данных рабочих групп Microsoft предлагает SQL Server 7.0 Standard Edition. Основные ее достоинства: простота эксплуатации, снижающая требования к подготовке администратора, наличие инструментов для упреждающего мониторинга и решения потенциальных проблем; предоставление мастеров для решения типовых задач эксплуатации БД; ряд других средств, позволяющих значительно сократить затраты на обучение и сопровождение.

СУБД - это сложный программный механизм, состоящий из множества частей. Рассмотрим два наиболее важных ее элемента - процессор запросов (query processor) и механизм хранения (storage engine).

Процессор запросов SQL Server 7.0

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

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

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

Существуют разовые (ad hoc) и хранимые (prepared) запросы, различающиеся по типу подготовки. Разовые запросы сразу отправляются на исполнение, тогда как хранимые предварительно компилируются, что позволяет повысить быстродействие. После компиляции и размещения в процедурном кэше запрос может совместно использоваться всеми пользователями сохраненной процедуры (в предыдущих версиях для каждого из них создавалась отдельная копия запроса). Аналогичным образом могут совместно использоваться разовые планы.

SQL Server 7.0 может прибегнуть к автопараметризации запроса. На этой основе в создаваемых процедурах запросов осуществляется преобразование констант в параметры. В результате снижаются затраты на компиляцию и обеспечивается такая же эффективность, как у хранимых процедур. Введена также полная поддержка обработки запросов с параметрами, которая часто используется при работе с ODBC, OLE DB и при выполнении операций prepare/execute.

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

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

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

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

Для оптимизации запросов в SQL Server 7.0 используются следующие методы соединения: итерации с вложенными циклами (nested loops iteration), соединения слиянием (merge Join), соединение с хешированием (hash Join), группы хеширования (hash team).

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

Помимо хранения и поиска в собственных базах данных, Microsoft SQL Server 7.0 можно использовать как шлюз для доступа к другим хранилищам - реляционным и нереляционным. Такие распределенные запросы могут выполняться в гетерогенной среде, обеспечивающей доступ к любым источникам данных через драйверы OLE DB или ODBC (Oracle, IBM DB2, SYBASE, Informix, Excel, Access, dBase, Paradox, Visual FoxPro и т.д.).

Механизм хранения SQL Server 7.0

Разработка надежных высокопроизводительных СУБД выдвигает строгие требования к механизмам хранения данных. Они должны обеспечивать простоту доступа, возможность быстрого восстановления и содержать утилиты для автоматического администрирования. SQL Server 7.0 удовлетворяет всем этим требованиям.

Для хранения баз данных в версии 7.0 используются группы файлов, что обеспечивает гибкость при настройке. Вся информация рассредоточена по файлам следующих типов: первичный файл данных (primary data file), вторичные файлы данных (secondary data files), файлы журнала (log files). Группы файлов можно использовать для физической привязки объектов БД к месту хранения, например для того, чтобы поместить тот или иной индекс на более быстрый диск.

Наименьшую единицу хранения данных в SQL Server составляет страница размером 8 Кб. В ее начале расположен заголовок (head) длиной 96 байт, содержащий системную информацию. Основной единицей распределения пространства для таблиц и индексов является протяжение (extent). В SQL Server 7.0 существует два типа протяжения: однородное и смешанное. Однородное протяжение состоит из 8 смежных страниц и имеет размер 64 Кб. Оно принадлежит единственному объекту-владельцу, который может им пользоваться. Смешанные протяжения ориентированы на хранение небольших таблиц и индексов по одной странице на каждый. Следовательно, в одном смешанном протяжении может храниться до 8 объектов. Когда размер таблицы или индекса достигает 8 страниц, пространство выделяется путем однородных протяжений. Поскольку размер страницы равен 8 Кб, а Windows NT Server выполняет дисковые операции чтения-записи секторами по 512 байт, то в принципе может статься (например, если внезапно выключить питание), что на диск будет записана только часть изменений в странице. Для определения такой ситуации в заголовках страниц имеются так называемые "рваные" биты (torn bits), которые выставляются в единицы, когда соответствующие сектора читаются или записываются на диск. Своевременное обнаружение частично записанных (рваных) страниц обеспечивает целостность данных. Поскольку процедура выявления рваных страниц влияет на производительность (хотя и очень незначительно), предусмотрена возможность ее отключения, например, при использовании дисковых контроллеров, оснащенных системой автономного питания, которые сами отслеживают целостность операций ввода-вывода как последовательностей действий над секторами.

Для хранения информации о заполнении протяжений используются специальные карты распределения. В Global Allocation Map (GAM) указывается, какие протяжения были распределены (каждая страница GAM охватывает 64 000 протяжений, т. е. около 4 Гб данных). В Shared Global Allocation Map (SGAM) содержится информация о типе каждого протяжения и наличии в нем хотя бы одной свободной страницы. В Page Free Space (PFS) сообщается о распределении отдельных страниц и приблизительном объеме свободного места в них. Таким образом, файл данных в SQL Server имеет следующее строение (см. Рис. 35). Информация об использовании протяжений для кучи (heap) или индекса записывается на страницах IAM (Index Allocation Map). С помощью этих управляющих структур обеспечивается крайне экономное расходование дискового пространства, а также возможность самоадминистрирования для баз данных сервера, например, автоматический рост и сжатие файлов БД, дефрагментация (в SQL Server 2000) и т. д.

Рис. 35. Строение файла данных в SQL Server 7.0

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

Если на таблицу определен индекс, то особых проблем нет: можно подняться на уровень выше в B-Tree, определить, на какие следующие узлы тот ссылается, и считать данные. А если индекса нет, и таблица хранится в виде "кучи"? Вот здесь-то на помощь и приходит IAM, в которой содержится битовая карта последовательных протяжений, принадлежащих данному объекту (например, таблице), так что всегда можно довольно точно предсказать, что нужно читать дальше.

Если уж речь зашла об индексах и "кучах", можно привести еще один пример. В SQL Server 7.0 каждая таблица может иметь один кластерный и до 249 некластерных индексов. Для обоих типов индексов используются структуры сбалансированного двоичного дерева. В предыдущих версиях в качестве указателя с самого нижнего, листового уровня индекса на запись данных использовался ее идентификатор (RID), состоящий из номера файла, номера страницы и номера записи в этой странице.

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

Поскольку работа с СУБД подразумевает интенсивное чтение-запись на физических носителях, задача оптимизации этих операций также актуальна. Для этого в SQL Server 7.0 используются:

  • Scatter-gather IO. Если раньше для выполнения операции чтения-записи требовался отдельный непрерывный раздел памяти, то теперь стало возможным его дробление, например, по отдельным страницам при обработке протяжения;
  • асинхронный ввод-вывод. Windows NT возвращает управление СУБД сразу после получения команды на ввод-вывод, что позволяет не дожидаясь ее завершения продолжить выполнение последующих операций.

При хранении текста и изображений (типы данных ntext, text и image) в SQL Server 7.0 используется внутренний индекс по смещению. Таким образом, поиск нужного фрагмента поля теперь происходит намного быстрее, не требуя сканирования двусвязного списка страниц, отведенных под BLOB.

Необходимый элемент при обработке базы данных - менеджер блокировок. Он динамически регулирует использование ресурсов, при этом настаивать параметры блокировки на сервере вручную уже не нужно. Предусмотрены следующие режимы блокировки ресурсов: Shared (совместное использование), Update (обновление), Exclusive (исключительное использование), Intent (предупредительная блокировка) и Schema (блокировка схемы).

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

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

В SQL Server 7.0 содержится ряд утилит, позволяющих эффективно контролировать работу сервера и управлять ею. SQL Server Enterprise Manager является консолью SQL Server, интегрированной с Microsoft Management Console (MMC). Query Analyzer позволяет получать в графическом виде и анализировать планы выполнения запросов, вести их одновременную обработку, настраивать индексы и т. д. SQL Server Profiler служит для трассировки активности сервера и анализа его трафика. Если раньше эта информация принималась через интерфейс Open Data Services (ODS), то теперь осуществляется прямой мониторинг, что позволяет держать под контролем значительно более полный набор параметров. Сохраненные результаты мониторинга можно использовать в мастере настройки индексов либо "проигрывать" на другом сервере. Для выявления "узких" мест в работе серверных приложений используются различные средства, такие как Create Trace Wizard в составе SQL Profiler, Performance Monitor, отладчик хранимых процедур в составе Visual Studio (в SQL Server 2000 включен в Query Analyzer) и др.

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

назад наверх дальше


© 2000 Корпорация Microsoft. Все права защищены.

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