(Возврат на основную страницу)

 

Содержание номера за Июль 2009 год

SQL Server

Июль 2009
№ 7 (103)

 

Editorial

Майкл Оти

Хорошо или быстро 

Programming

Сушил Кордиа

Поддержка уведомлений в управляемом поставщике данных (SqlClient Managed Provider)

Майкл Ванхутт

Минимальный набор разрешений на уровне базы данных, необходимый для класса SqlDependency

DB Design & Warehousing

Джо Уэбб

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

Сюзан Конвей

ГИС и SQL Server 2008: создание карт с вашими данными. Часть 2

Other

Младен Прайдич

Как диагностировать и устранять проблемы с компонентом Service Broker

 

Хорошо или быстро

Майкл Оти (Michael Otey)

 

Недавно я работал в одном проекте с программированием на Java. Те, кто регулярно читает мои статьи, знают, что это не та работа, которую я люблю больше всего. При планировании проекта я рассмотрел ряд наиболее популярных сред программирования для Java, включая Eclipse, JBuilder и NetBeans. Я пытался найти тот же набор функциональности, который имеется в Microsoft Visual Studio и Microsoft .NET Framework. К моему разочарованию, ни один из рассмотренных инструментов даже близко не приближался к среде разработки, предлагаемой Microsoft. Это только укрепило мое мнение о том, что средства разработки от Microsoft — лучшие в индустрии. Мне нравится богатый набор компонентов в Visual Studio.NET, который помогает при тяжелой работе создания богатого функциональностью пользовательского интерфейса и даже способен выполнять привязку интерфейсных объектов к базе данных. В значительном числе случаев все, что мне нужно сделать, — это связать компоненты вместе несколькими строками кода в методах обработки событий самих компонентов.

Visual Studio против Java

Хотя не стану спорить, что я лучше знаком со средой разработки Visual Studio, чем с аналогичными инструментами для Java, я был удивлен сложностью организации среды разработки для Java. Они показались мне трудными в использовании, реализована была только часть привычного мне функционала. Конечно, разработчики на Java вполне могут не согласиться со мной, но мне не хватало того, что предлагает Visual Studio 2008: развитых шаблонов проектов для оконного интерфейса веб­приложений, поддержки мобильных устройств, веб­служб и даже проектов инсталляции (setup project); богатой среды разработки с более чем 60 различными компонентами; поддержки IntelliSense; интегрированной отладки и поддержки разработки для нескольких платформ. Ни одна среда разработки даже не приближается к тому, что предлагает полный пакет Visual Stu­dio. А некоторые к тому же были еще и с массой ошибок.

В чем проблема с производительностью разработки?

Хочу сразу предупредить, тот факт, что Visual Studio дает ускорение производительности разработки — потенциально может сыграть злую шутку, как не парадоксально это звучит. Качество кода тут не причем, с этим все нормально. Скорее проблема в том, что прививается привычка программировать «быстренько». При работе со средами разработки под Java эта проблема не возникает, приходится тщательно прорабатывать все аспекты проекта. В ситуации, когда у вас нет готовых значительных блоков проекта, программировать «быстренько» просто не получается. Продавцы от Microsoft говорят разработчикам, что когда у вас получается быстро программировать, вы можете сконцентрироваться на бизнес­аспектах проекта. Это, несомненно, верный лозунг, но слишком увлеченные разработчики могут неверно интерпретировать его в том смысле, что можно проскакивать все аспекты разработки проекта. Иногда это и верно, но привычка приводит к тому, что попытка сделать «быстренько» распространяется и на те аспекты разработки, где такой подход уж никак не подходит.

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

Хороший код против прекрасного

Не поймите меня неправильно. Мне очень нравятся средства разработки Visual Studio и я безнадежно разбалован ими. Но при всем том, я отказываюсь принимать скорость предлагаемой разработки во всех ситуациях. Следует помнить, что основная задача разработчика заключается в создании качественного кода, а не в том, чтобы создать как можно больше кода за минимальное время. Не позволяйте средствам быстрой разработки соблазнить вас на сокращение оценочных сроков выполнения проекта. Повышение производительности — это хорошо, но надежный качественный код, способный реально решать бизнес­задачи, — куда лучше.

Поддержка уведомлений в управляемом поставщике данных (SqlClient Managed Provider)

Сушил Кордиа (Sushil Cordia)

DOWNLOAD

 

Позвольте мне после краткого перерыва возобновить свои записи заметкой о такой новой возможности в версии Whidbey, как поддержка уведомлений в управляемом поставщике данных SQL (SqlClient MP). Существуют сценарии, в которых приложению необходимо сохранить в кэше данные, полученные с сервера БД, а затем повторно извлечь эти данные, но уже из кэша, чтобы вернуть их для хранения на сервер (ради достижения более высокой производительности). Как правило, такому приложению потребуется некоторый механизм, обеспечивающий получение уведомлений, если этот самый кэш был кем­то изменен. В двух словах, эта возможность позволяет следить за состоянием конкретного результирующего набора (выборки строк таблицы, определенной предложением select) и получать уведомления, если в контролируемом результирующем наборе что­то меняется.

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

Минимальный набор разрешений на уровне базы данных, необходимый для класса SqlDependency

Майкл Ванхутт (Michael Vanhoutte)

 

В версии .NET 2.0 есть замечательная новая возможность, которая называется зависимость (SqlDependency), она обеспечивает механизм уведомления приложения в случае некорректности кэша. Мы не собираемся разъяснять применение этой технологии в данной статье, потому что уже существует множество хороших ресурсов («Поддержка уведомлений в управляемом поставщике данных» Сушила Кордиа). В этой статье мы намерены продемонстрировать, какими минимальными правами должен обладать пользователь Sql Server 2005 для работы с объектом SqlDependency. Сушил Кордиа ведет блог на портале MSDN, в котором описана большая часть таких прав (http://blogs.msdn.com/dataaccess/archive/2005/
09/27/474447.aspx), но я заметил, что там перечислены не все необходимые права.
Что и послужило причиной появления этой статьи.

Использование программного кода

Приложением к этой статье являются два фрагмента программного кода. Первый фрагмент — это Sql­сценарий, который обеспечивает выдачу необходимых разрешений; другой фрагмент — это консольное приложение на языке C#, в котором используется объект SqlDependency для отслеживания изменений в указанной таблице.

Согласно исходному замыслу, на Sql Server создавались две роли, которые обладали всеми разрешениями, необходимыми для выполнения Sql Dependency. Одна роль имела все разрешения для запуска слушателя SqlDependency, а другая обладала разрешениями, необходимыми для подписки на получение уведомлений об изменениях. Однако я заметил, что реализовать этот замысел невозможно. Если существуют только две роли, проблема заключается в том, что пользователи, которые являются членами этих ролей, будут принадлежать схеме dbo. Это приводит к возникновению проблем при выполнении метода SqlDependency.Start, потому что данный метод пытается создать очередь в схеме пользователя, но не имеет для этого достаточно прав. Следовательно, решение, которое рассматривается в этой статье, предполагает создание двух ролей с необходимыми разрешениями, но вам также придется гарантировать наличие у пользователя, инициирующего работу объекта SqlDependency, собственной схемы, владельцем которой является он сам.

Далее приводится Sql­сценарий, который обеспечивает выполнение следующих действий:

 

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

Джо Уэбб (Joe Webb)

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

Введение

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

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

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

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

Памятка об индексации

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

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

Кластеризованные индексы

Кластеризованный индекс — это индекс, чьи узлы­листья, то есть самый низший уровень индекса, содержат собственно страницы данных базовой таблицы. Следовательно, с точки зрения достижения любых практических целей индекс и сама таблица — это одно и то же. Каждая таблица может иметь только один кластеризованный индекс. Дополнительные сведения о кластеризованных индексах ищите в документации Books Online в разделе «Clustered Index Structures» (http://msdn.microsoft.com/en­us/library/ms177443.aspx).

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

Кластеризованные индексы в изобилии используются в структурах многих баз данных. По сути дела, такая практика — создавать кластеризованный индекс для каждой таблицы — вообще рассматривается как передовой опыт; точный подсчет, разумеется, никто не проводил, и можно не сомневаться в наличии исключений. Дополнительную информацию о преимуществах кластеризованных индексов ищите в статье из серии SQL Server Best Practices, озаглавленной «Com­paring Tables Organized with Clustered Indexes versus Heaps» и доступной на портале TechNet .

Некластеризованные индексы

Некластеризованные индексы используют аналогичную методологию для хранения индексированных данных таблиц на  SQL Server. Однако в некластеризованном индексе самый нижний уровень индекса не содержит страницу данных таблицы. Вместо этого в некластеризованном индексе  содержится  информация, которая позволяет серверу SQL Ser­ver перейти к страницам данных в случае необходимости. Для таблиц, у которых есть кластеризованный индекс, вершина­лист  некластеризованного индекса содержит ключи кластеризованного индекса. В предыдущем примере узлы­листья некластеризованного индекса для таблицы Customers содержали бы значения ключа Cus­tomer_ID.

Если у базовой таблицы нет кластеризованного индекса (такая структура данных называется куча), листовой узел некластеризованного индекса содержит указатель на строку данных на странице в куче.

ГИС и SQL Server 2008: создание карт с вашими данными. Часть 2*

Сюзан Конвей (Susan Conway)

Мобильные геоинформационные системы (GIS)

Мобильные устройства геоинформационных систем (ГИС), с которыми знакомо большинство людей, — это, разумеется, использование глобальной системы навигации (GPS) в автомобилях. Однако мобильные геоинформационные системы находят гораздо более широкое применение. Мобильные геоинформационные системы (ГИС) могут, например, использоваться для прокладки маршрута, оценки потенциального воздействия и помощи при ликвидации последствий стихийных бедствий, таких как наводнения или тропические циклоны. Например, в случае появления тропического циклона прогнозисты могут использовать геоинформационную систему (ГИС), чтобы следить за продвижением циклона в реальном времени и таким образом обеспечить информацию о предполагаемом месте его подхода к берегу. На основе этих данных можно создать карты, позволяющие оценить масштабы эвакуации населения (и необходимое для этого время) или размеры возможного разрушения инфраструктуры.

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

Такого сорта «мобильные данные» могут вводиться в геоинформационную систему (ГИС) путем заполнения формы или в виде текстового сообщения и часто с использованием специально предназначенного для этого мобильного КПК (PDA). Такого рода схема является узко специализированной, и в повседневной практике сотрудники, работающие на месте, часто вводят данные в ГИС, инсталлированную на ноутбуке, или ждут возвращения в офис (такой режим не является режимом реального времени, но тем не менее позволяет создать карты).

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

ГИС масштаба предприятия

ГИС­решения масштаба предприятия принимают форму сервера геоинформационных систем (GIS Server). Хранящиеся там данные могут просматривать, добавлять и изменять некоторые или все сотрудники (как это определено администратором). Такая форма ГИС может быть особенно полезна, когда фирма является крупным предприятием, и ее офисы и клиенты разбросаны по разным местам.

Примером могла бы послужить строительная фирма, чьи проектировщики имеют возможность передавать на ГИС­сервер размеры зданий в плане, которыми затем могут пользоваться менеджеры, чтобы потребовать внесения изменений или выдать разрешение на строительство. Более того, по мере того, как разворачивается строительство запланированного здания, в ГИС может добавляться детализирующая информация с места, позволяющая следить за тем, как продвигается строительство различных частей здания (например, строительство ведется, строительство завершено), или за такими факторами, как соблюдение техники безопасности (область повышенной опасности, используется крупногабаритное оборудование). Можно обеспечить доступность таких ГИС­данных в оперативном режиме, например для заказчиков строительной фирмы или для муниципального совета.

Геоинформационные системы (ГИС) в SQL Server 2008

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

Ссылки

•    GDAL/OGR (http://www.gdal.org/).

•    FWtools (http://fwtools.maptools.org/).

•    SQL Server 2008 Spatial Tools (http://www.sharpgis.net/page/SQL­Server­2008­Spatial­Tools.aspx).

* См. Сюзан Конвей. ГИС и SQL Server 2008: создание карт с вашими данными. Часть 1 // SQL Server для профессионалов. 2009. № 6.

Как диагностировать и устранять проблемы с компонентом Service Broker

Младен Прайдич (Mladen Prajdi)

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

(Возврат на основную страницу)

Hosted by uCoz