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

 

Содержание номера за Январь 2012 год

SQL Server

Январь 2012 1 (19)

 

  1. Просмотр активных сессий
    Дэвид Крейнс (David Kranes)

  2. Гуглоподобный поиск
    Жан Булинк (Jean Bulinckx)

  3. Системная процедура sp_SysMon для мониторинга состояния SQL Server
    Гохан Варол (Gokhan Varol)

  4. Как получить данные из Active Directory средствами SQL
    Патрик Александер (Patrick Alexander)

  5. Временные таблицы SQL Server
    Фил Фактор (Phil Factor)

  6. Хранимые процедуры в SQL Server: быть или не быть
    Дуглас Рейли


Просмотр активных сессий
Дэвид Крейнс (David Kranes)


Для запуска кода, сначала либо укажите SPID в команде SET скрипта для получения информации или снимите комментарий, чтобы получить информацию о всех процессах, не являющихся системными. Код написан для SQL Server 2005 и 2008.


Гуглоподобный поиск
Жан Булинк (Jean Bulinckx)


Проблема: Нам необходимо реализовать поиск, подобный google по существующей БД. В составе БД имеется несколько таблиц с информацией о людях, корпорациях, организациях, адресах и т.п. Это должно быть специализированным решением (не использующим решений третьих фирм, или SQL FTS). Решение используется в новом web приложении (от десятков до сотен одновременно работающих пользователей , время отклика от 1 секунды в большинстве случаев, до 5 секунд - в худших случаях).
 

Стратегия: Мы создадим таблицу регистров для указания на существующие таблицы. Нам также будет нужно создать таблицу тегов и таблицу связи (регистры x теги). Пакетное задание будет сканировать соответствующие таблицы (persons, organizations, addresses, и т.п.) и наполнять таблицы (registers, tags, tag_register) один раз в день.
 

Правила: Поиск будет выполняться по всем регистрам сразу. "Регистр" - это абстракция персоналии, организации или любого другого объекта. Данные об объекте располагаются в "основной" таблице (таблица persons, таблица organizations, и т.п.) и во многих таблицах-"членах" (адреса, контакты, профили, и т.п.). "Тег" - это слово, которое может находиться в любой из текстовых полей таблицы.
При поиске по тегам tag1, tag2 и tag3
Если существуют: tag1 AND tag2-100 вхождений, tag1 AND tag3-10 вхождений и нет вхождений для tag2 AND tag3 в регистре, мы игнорируем tag3 так как это вернет больше результатов, чем при игнорировании тега tag2.
Некоторые объекты разделяют многие свойства и поиск может использовать некоторые свойства для фильтрации и/или сортировки.
В этом примере мы просто используем свойство name для пополнения поля (vc_register) для организации сортировки.
 

Заключение: Ниже приведен скрипт для создания таблиц, процедуры и заполнения БД тестовыми данными.


Системная процедура sp_SysMon для мониторинга состояния SQL Server
Гохан Варол (Gokhan Varol)


Я создал системную процедуру, которая отображает некоторые системные счетчики. Компоненты процедуры можно исполнять индивидуально.


Как получить данные из Active Directory средствами SQL
Патрик Александер (Patrick Alexander)


В этой статье рассматривается использование связанных (linked) серверов и функции openquery для организации доступа к данным Active Directory.


Временные таблицы SQL Server
Фил Фактор (Phil Factor)

 

Временными таблицами пользуются все разработчики БД, но вместе с тем они, пожалуй, делают это не очень смело или не задействуют всех преимуществ таких таблиц. Временные таблицы способны повысить производительность вашего программного кода и облегчить его сопровождение, но могут стать источником несчастий, как для разработчика, так и для администратора БД, если что-то ломается, и процесс неумолимо затормаживается. Мы обратились за советом к Филу, полагая, что объяснение должно быть простым.
Временные таблицы, они и есть временные. Чаще всего, их используют, чтобы обеспечить рабочее пространство для хранения промежуточных результатов при обработке данных в пакете или процедуре. Кроме того, временные таблицы используются для передачи таблиц из функций, возвращающих табличные значения; для обмена табличными данными между хранимыми процедурами; или в виде недавно появившихся параметров, возвращающих табличные значения, для того, чтобы пересылать целые таблицы в режиме «только-чтение» из приложений в подпрограммы сервера SQL Server, или передавать предназначенные только для чтения временные таблицы как параметры. После того, как их использование завершено, эти таблицы автоматически удаляются.
Временные таблицы бывают разных видов, включая, в числе прочих, локальные временные таблицы (имена начинаются символом #), глобальные временные таблицы (имена начинаются символами ##), постоянные временные таблицы (обычная таблица, только созданная в TempDB.) и табличные переменные (имена начинаются символом @).
Прежде, чем мы вплотную займемся этой методикой, я бы советовал вам обязательно использовать табличные переменные везде, где это возможно. Это нетрудно, и сервер SQL Server работает за вас. Кроме того, тенденция такова, что табличные переменные создают меньше проблем для OLTP-систем с большой нагрузкой. Вам только иногда, может быть, потребуется, выполнить их тонкую настройку, чтобы добиться от табличных переменных хорошей производительности в соединениях (joins), я сейчас поясню это.


Хранимые процедуры в SQL Server: быть или не быть
Дуглас Рейли

 

Хранимые процедуры SQL

Несколько лет назад я был направлен на работу в SportSoft Golf (позднее переименованное в Сообщество Гольфа США), одну из старейших коммерческих интернет компаний, , подобно многим подобным устоявшую ушедшим в небытие после потрясения 11-го сентября. В то время как я там работал, переход от параллельной разработки толстых клиентов и интранет-решений к разработке только лишь интернет-решений был раздражающимсотрясал основы разработки, поскольку это был переход к использованию только хранимых процедур и отказ от нерегламентированных (ad-hoc) запросов SQL.
Джим, мой босс на тот момент, был разработчиком SQL Server со стажем и наиболее комфортно работал именно с этой платформой. Поначалу я сопротивлялся, но, в конечном счете, уступил и по сей день у меня в коде доступа к базам данных используются хранимые процедуры.
Вопрос необходимости использования хранимых процедур еще не вышел на уровень религиозных споров. Я ощутил возвращение актуальности темы в ноябре 2003, когда Роб Говард (Rob Howard), на тот момент программный менеджер Microsoft, а ныне учредитель компании Telligent systems, разместил в блоге содержательную статью о том, почему всем разработчикам на SQL Server следует использовать хранимые процедуры. В ответ Франс Боума (Frans Bouma), имеющий статус Microsoft MVP и разработчик ORM-библиотеки LLBLGen Pro, опубликовал опровержение. С тех пор было множество дискуссий, зачастую весьма жаркие.


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

Hosted by uCoz