SQL.RU
 client/server technologies
 Главная | Документация | Статьи | Книги | Форум | Блоги | Опросы | Гостевая | Рассылка | Работа | Поиск | FAQ |
   
#345<<  #346  >>#347

СОДЕРЖАНИЕ

1.СТАТЬИ
1.1.Основы ввода-вывода Microsoft SQL Server. Часть 2 (продолжение)
1.2.Управление памятью Microsoft SQL Server 2005 Analysis Services
2.ССЫЛКИ НА СТАТЬИ
2.1.Статьи на русском языке
2.2.Англоязычные статьи
3.ФОРУМ SQL.RU
3.1.Самые популярные темы недели
3.2.Вопросы остались без ответа
 

 

СТАТЬИ

Основы ввода-вывода Microsoft SQL Server. Часть 2 (продолжение)

По материалам статьи Bob Dorr: Microsoft SQL Server I/O Basics. Chapter 2

Принудительная краткая блокировка

SQL Server 2000 и SQL Server 2005 могут использовать принудительные краткие блокировки (latch enforcement) для страниц базы данных, находящихся в кэше буферного пула. Принудительная краткая блокировка является механизмом виртуальной защиты памяти (VirtualProtect), когда страница базы данных меняет состояние с "чистая" на "грязная". В представленной ниже таблице показаны виртуальные состояния защиты.

Состояние страницы

Виртуальное состояние защиты

Грязная

"Чтение и запись" во время изменения.

Чистая
 

"Только для чтения" - когда установлена эта защита, любая попытка изменения страницы (называемая наложенной записью или "загрязнением") приводит к возникновению обработанного исключения и генерации мини-дампа для дополнительного исследования.

Страница базы данных остается в виртуальном состоянии защиты "Только для чтения", пока не будет установлена краткая блокировка изменения (modification latch). Когда установлена краткая блокировка изменения, защита страницы изменяется на "Чтение и запись". Как только краткая блокировка изменения будет снята, защита страницы возвращается в виртуальное состояние "Только для чтения".

    Обратите внимание, что по умолчанию защита принудительной краткой блокировкой отключена. Принудительную краткую блокировку можно включить флагом трассировки -T815. SQL Server 2000 SP4 и 2005 принимает или отключает это флаг без необходимости перезапуска службы SQL Server, для чего используются команды: DBCC traceon (815,-1) и DBCC traceoff (815,-1). Более ранние версии требуют включения этого флага трассировки в параметрах запуска SQL Server.
    Также, обратите внимание, что этот флаг трассировки должен использоваться только по рекомендации службы поддержки Microsoft SQL Server, поскольку его использование может привести к существенным изменениям в работе сервера, и изменение виртуальных состояний защиты не поддерживается на некоторых версиях операционных систем, когда используются режимы PAE/AWE.
    Кроме того, обратите внимание, что расширенная поддержка VirtualProtect в Windows Server ™ 2003 SP1 и Windows XP SP2 подразумевает использование механизмов виртуальной защиты и для распределённой через AWE памяти. Это очень существенное изменение, и из-за расширения возможностей защиты оно может повлиять на работу SQL Server, если в его глобальной конфигурации указано использование AWE или фиксации страниц памяти (locked pages memory).

Принудительная краткая блокировка применяется только к страницам базы данных. Другие области памяти остаются неизменными и краткой блокировкой не защищаются. Например, к таким областям можно отнести: буфер вывода TDS, план запроса и любые другие структуры памяти, которые тоже не подпадают под действие защиты принудительной краткой блокировки.
До непосредственно изменений, SQL Server должен изменить защиту страниц, разрешив читать и писать в страницы базы данных. Краткая блокировка используется для поддержания физической стабильности страницы базы данных, поэтому краткая блокировка изменения удерживается ровно столько, сколько нужно для выполнения физических изменений на странице. Если в течение этого времени страница будет повреждена (наложенная запись), принудительная краткая блокировка не будет в состоянии вызвать исключение.
В версиях предшествующих SQL Server 2004 SP4, защита принудительной краткой блокировки использовала больше переходов из состояния в состояние. В следующей таблице показаны транзакции защиты, применяемые в предшествующих SQL Server 2000 SP4 версиях:

Состояние страницы

Виртуальное состояние защиты

Грязная

"Чтение и запись" во время изменения.

Чистая без ссылок
 

"Нет доступа" - любая попытка чтения или записи на странице вызывает исключение.

Чистая с ссылками
 

"Только для чтения" - когда установлена эта защита, любая попытка изменения страницы (называемая наложенной записью или "загрязнением") приводит к возникновению обработанного исключения и генерации мини-дампа для дополнительного исследования.

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

[В начало]

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

Инструкции BACKUP и RESTORE в SQL Server 2005 поддерживают опцию вычисления контрольной суммы - CHECKSUM, которая позволяет использовать защиту контрольной суммой потока резервирования и вызвать операции проверки контрольной суммы во время восстановления из резервной копии. Чтобы включить поддержку контрольной суммой резервной копии, нужно в команде BACKUP включить опцию CHECKSUM.
Процессы резервного копирования и восстановления пытаются по возможности работать с большими блоками. Например, операция резервирования просматривает битовые маски распределений в базе данных, чтобы определить, какие страницы данных попадают в поток на резервный носитель. Как только блок данных идентифицирован, операция резервного копирования считывает из файла данных для записи в поток резервирования большие от 64 КБ до 1 МБ блоки. Операция резервного копирования старается не работать с отдельными байтами страниц данных или блоков журнала регистрации транзакций, это помогает повысить производительность и скорость копирования.
Операции резервного копирования и восстановления, у которых для защиты целостности данных задействованы возможности проверки контрольной суммы, более требовательны к процессорным ресурсам. Резервное копирование или восстановление с включённой опцией контрольной суммы просматривает каждый байт потока, что как раз и повышает нагрузку на процессоры. Расчёт контрольной суммы для резервирования и восстановления использует тот же алгоритм, который вычисляет значение контрольной суммы для носителей резервных копий, и который используется для страниц данных и блоков журнала транзакций.
Следующие правила применимы к командам BACKUP и RESTORE для операции CHECKSUM:

  • По умолчанию, в SQL Server 2005 операции BACKUP и RESTORE поддерживают обратную совместимость (значение по умолчанию - NO_CHECKSUM).

  • Установка для базы данных опции PAGE_VERIFY не влияет на операции резервного копирования и восстановления. Влияет только установка опции CHECKSUM в команде резервного копирования или восстановления.

  • Контрольная сумма резервного копирования и восстановления - это одно значение, представляющее контрольную сумму всего потока; оно не относится к отдельным страницам или блокам журнала, помещённым в поток резервирования. Значение вычисляется во время резервного копирования и сохраняется в резервной копии. Это значение вычисляется повторно во время восстановления и сверяется с хранимым значением.

  • Резервное копирование с опцией CHECKSUM не изменяет страницы при сохранении их на резервном носителе. Состояния защиты страницы (NONE, CHECKSUM или TORN) будет таким, каким оно было считано в файле базы данных. Если контрольная сумма была сохранена на странице данных, она будет проверена перед тем, как эта страница будет записана в поток резервирования.

  • Если резервная копия была создана с опцией CHECKSUM, для проверки контрольной суммы могут использоваться команды восстановления и сверки. Попытка восстановления с опцией CHECKSUM резервной копии без контрольной суммы возвратит ошибку.

Для получения более подробной информации о резервном копировании и восстановлении, обратитесь к SQL Server 2005 Books Online.

ПРОДОЛЖЕНИЕ СЛЕДУЕТ

[В начало]

Управление памятью Microsoft SQL Server 2005 Analysis Services

Глава из книги: "Microsoft SQL Server 2005 Analysis Services. OLAP и многомерный анализ данных"
Авторы: Александр Бергер, Ирина Горбач, Эдуард Меломед, Владислав Щербинин, Виталий Степаненко

Авторы рассылки благодарят издательство БХВ-Петербург за предоставленные к публикации материалы.

Аннотация издательства

Книга, написанная разработчиками Microsoft SQL Server 2005 Analysis Services, дает читателю полное представление об его функционировании и устройстве. В ней рассмотрены основы многомерного анализа данных и дано глубокое представление о многомерных моделях данных и устройстве OLAP-сервера. Описаны основные концепции языка доступа к многомерным данным MDX и его расширенные возможности, а также архитектура сервера, методы обработки данных и алгоритмы доступа к данным. Приведены внутренние и внешние протоколы обмена данными, включая протокол XML/A. Рассмотрены алгоритмы управления ресурсами Analysis Services, в том числе алгоритмы управления памятью. Описан процесс создания эффективных клиентских приложений с использованием Analysis Services, механизмы интеграции многомерных и реляционных баз данных. Уделено внимание безопасности, а также администрированию Microsoft SQL Server 2005 Analysis Services.

Для знакомства с книгой, Вашему вниманию предлагаются следующие главы:

[В начало]

Благодарности

Эта книга является плодом трехлетнего труда авторов, и на протяжении всего этого времени многие оказывали помощь и поддержку в ее написании. Мы благодарим всех тех, кто способствовал выпуску книги, с начала ее написания и до того мгновения, когда ее возьмет в свои руки читатель.
В первую очередь мы хотим сказать большое спасибо нашему коллеге и другу Моше Пасуманскому. Его постоянная поддержка и глубокие знания внутреннего устройства Analysis Services оказали нам неоценимую помощь. Без Мошиных советов и его сайта www.mosha.com/msolap наша книга не была бы такой полной.
Мы хотим выразить особую благодарность редакторскому коллективу издательства "БХВ-Петербург", в частности, Игорю Шишигину - за его терпение и поддержку в течение всего проекта, и Елене Кашлаковой - за приведение нашего текста к канонам русского языка.
Эта книга не была бы возможна без всесторонней помощи наших коллег - разработчиков Analysis Services, особенно Олега Львовича, Михаила Энтина, Михаила Вовчика, Мариуса Думитру (Marius Dumitru), Акшая Мирчандари (Akshai Mirchandani), Адриана Думитраску (Adrian Dumitrascu), Балы Атур (Bala Atur) и Джеффри Ванг (Jeffrey Wang).
Массу полезных технических замечаний о содержании книги и большую помощь в проверке правильности и доступности текста для русскоязычного читателя оказал Владимир Штепа.
Мы также хотим выразить признательность Александру Гладченко и нашим коллегам из российского отделения Microsoft: Владимиру Павлову, Александру Ложечкину и Андрею Синкину, за значительную помощь в работе над технической терминологией многомерных баз данных.
Немалую роль в том, что эта книга увидела свет, сыграл форум sql.ru, мы благодарны его создателям и участникам, общение с которыми вдохновило нас на написание этой книги.

[В начало]

Предисловие

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

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

  • За мои годы работы аналитиком в "The OLAP Report" и намного ранее - руководителем проектов я редко встречал разработчиков, готовых предоставить такую глубокую и точную информацию о том, как на самом деле работает их продукт. Даже с соглашением о неразглашении немногие производители программного обеспечения готовы по собственной воле предоставить такой уровень внутренней информации.

Но почему это должно интересовать тех, кто не является разработчиками OLAP-серверов? Почему простой пользователь или разработчик приложений должны заботиться о том, что же на самом деле происходит под капотом? Обычному водителю ведь не надо знать точные подробности того, как работает двигатель машины.
Но существует множество причин, почему это так важно. Analysis Services на сегодняшний день несомненно наиболее широко используемый OLAP-сервер, а это само по себе означает, что большинство пользователей Analysis Services - новички в OLAP. Исследования "The OLAP Surveys" постоянно показывают, что основным аргументом при выборе системы является цена и тот факт, что система поставляется с SQL Server, а не такие факторы, как производительность, масштабируемость, простота использования или функциональность.
Это не означает, что в Analysis Services отсутствуют эти возможности, это просто означает, что обычные покупатели Analysis Services в меньшей степени заботятся о них, чем покупатели других продуктов. Но когда придет время создавать приложения, им несомненно придется принимать во внимание эти факторы, и эта книга поможет им успешно это осуществить. То, что Analysis Services рассматривается как продукт с низкой стоимостью, поставляющийся с SQL Server, не означает, что это простое небольшое дополнение: особенно в версии 2005, это современный, обширный и сложный продукт. Далеко не очевидно, как он работает, и мало одних только предположений, чтобы полностью использовать его возможности.
Многие из новых пользователей Analysis Services, работавшие ранее с реляционными базами данных, могут предполагать, что базы данных OLAP аналогичны реляцион-ным. Они заблуждаются, если только не брать во внимание кажущееся сходство между MDX и SQL. Надо действительно думать многомерно и понимать, как работают кубы Analysis Services.
И даже пользователи, имеющие опыт работы с другими серверами OLAP, обнаружат, что они отличаются друг от друга намного больше, чем реляционные базы данных. Если вы начнете использовать Analysis Services без понимания этих отличий и не зная то, как на самом деле работает Analysis Services, вы создадите себе проблемы в будущем. Даже если вам и удастся сразу получить правильные результаты, в будущем это может сказаться на производительности и сопровождаемости вашего приложения.
Исследования "The OLAP Surveys" постоянно показывают, что если что-то действительно и значит в OLAP, то это скорость выполнения запросов. Низкая производительность является самой большой причиной недовольства пользователей различных OLAP-систем, и Analysis Services не исключение. Низкая производительность запросов также была самым большим фактором, сдерживающим широкое внедрение.
Множество людей надеются, что увеличение производительности аппаратного обеспечения поможет им избавиться от проблем: если приложение работает слишком медленно, просто понадеемся на следующее поколение более быстрого железа, чтобы решить проблему. Но результаты опросов "The OLAP Surveys" показывают, что такой подход не будет работать: количество жалоб на производительность запросов увеличивается с каждым годом, независимо от того, увеличивалась ли действительная производительность или нет. В нашу эру, когда все рассчитывают получать результат поиска в Web среди миллиардов документов, книг и сообщений менее чем за секунду, никто больше не хочет ждать пять или десять секунд простой отчет из небольшой внутренней базы данных. OLAP-приложению недостаточно просто быть быстрее электронной таблицы или реляционного приложения, на замену которым оно пришло - это приложение должно быть таким же быстрым, как и другие системы, которыми мы все пользуемся каждый день.
Хорошая новость состоит в том, что быстрое выполнение запросов возможно, если вы будете полностью использовать все возможности OLAP-сервера: по исследовани-ям "The OLAP Surveys", 57 процентов пользователей Analysis Services 2005 сообщили, что обычно их запросы выполняются менее, чем за пять секунд. Это было традиционным целевым критерием для времени выполнения запросов, но я считаю, что в новой эре мгновенного поиска в Web это значение должно быть уменьшено до одной секунды. Это сложная цель, и для ее достижения разработчикам приложений потребуется на самом деле знать, что они делают, а также потратить время на оптимизацию их систем.
Как раз об этом эта книга. Авторы этой книги, которые работали над Analysis Services с самых первых дней, задолго до того, как эта система была названа Analysis Services - подробно описали, что на самом деле происходит внутри Analysis Services 2005, вплоть до структур записей данных. Попутно было описано множество параметров, приведена полезная информация о том, как эти параметры влияют на использование памяти и других компьютерных ресурсов.
Эта книга не предназначена для обучения новых пользователей работе с Analysis Services 2005, она для технически подготовленных специалистов, которые хотят использовать все возможности Analysis Services - за счет понимания, как оно на самом деле работает, так как эта книга написана теми, кто действительно знает это, в отличие от "внешних" авторов, которым часто приходится строить догадки. Если вы только начинаете использовать Analysis Services, вероятно, вам лучше начать с книги или курсов "как сделать?", а не с книги "что происходит внутри?", подобной этой.

Nigel Pendse (Найджел Пендз)
Редактор "The OLAP Report"
Автор "The OLAP Survey"

[В начало]

Введение

Разработка, которая привела к созданию Analysis Services 2005, началась в израильской фирме "Панорама" с небольшого проекта для британского издательства, которое было заинтересовано в анализе бизнеса на основе данных, накопленных в реляционной базе данных. Работа над проектом показала, что для реализации такой задачи требуется специальный подход к данным и специальные методы их обработки, которые могут оказаться полезными для большого числа задач.
Так, в конце 1994 г. два программиста приступили к проекту создания приложения для анализа данных, позволяющего предоставить руководителям предприятий средство для принятия более обоснованных решений. Приложение было выпущено в 1995 г. и успешно установлено на ряде предприятий. К концу года "Панорама" имела несколько десятков пользователей и могла позволить себе разработку следующей версии, которая должна была стать клиент-серверным приложением и состоять из сервера, хранящего данные в специальном формате, и графического клиента, позволяющего анализировать их в интерактивном режиме.
Летом 1996 г. разработку заметил один из ведущих OLAP-аналитиков, и ей заинтересовалась компания Microsoft, которая приобрела технологию к концу 1996 г. В начале 1997 г. немного разросшаяся группа разработчиков (Александр Бергер, Амир и Ариель Нетц, Моша Пасуманский и Эдвард Меломед) переехала из Тель-Авива в Редмонд и приступила к подготовке выпуска первой версии OLAP Server фирмы "Микрософт". Команда была расширена несколькими ветеранами Microsoft и новыми разработчиками (так, например, Ирина Горбач присоединилась к команде сразу после начала работы над проектом в Редмонде).
Однако стратегия, которая работала для небольшой компании, самостоятельно устанавливавшей свой продукт у каждого заказчика, не годилась для большой транснациональной корпорации. Чтобы сделать приложение доступным для установки на крупных предприятиях, потребовалось формализовать и стандартизовать протоколы обмена данными и отказаться от клиентской части с графическим интерфейсом в пользу поддержки продуктов других компаний. В начале 1997 г. группа из нескольких разработчиков (включающая Александра Бергера) собралась в гостинице на одном из островов недалеко от Сиэтла для генерации идей, которые привели к разработке интерфейсов Microsoft SQL Server Analysis Services. После долгих обсуждений родилась идея создания стандарта для доступа к многомерным данным, и были заложены основы OLE DB for OLAP - расширения к стандарту обмена данных между приложением и реляционной базой данных. Важной частью стандарта стал язык MDX (MultiDimensional eXpressions) формирования запросов к многомерным данным, хранимым на OLAP Server. Основой MDX стал текстовой запрос к серверу, очень напоминающий команду Select языка SQL, только в нашем случае запрос является многомерным, запрашивающим данные из многомерного куба. Сегодня язык продолжает развиваться и меняться, но основные концепции, заложенные на острове, показали свою жизнеспособность и стали стандартом дефакто в промышленности.
Изначально предполагалось, что первая версия сервера выйдет в 1997 г. вместе с обновлением для SQL Server 6.5. Но доведение языка до состояния готовности к промышленному использованию, реализация нового типа провайдера OLE DB и обеспечения должной надежности и производительности сервера потребовало намного больше времени, чем изначально казалось разработчикам. Первая версия многомерной базы Microsoft OLAP Services была выпущена в конце 1998 г. вместе с новой версией SQL Server 7.0 (с кодовым названием "Сфинкс"). Кроме интеграции с SQL Server 7.0, OLAP Server был проинтегрирован с Excel Pivot Tables, кторый стал первым OLAP-клиентом для нового сервера.
Продукт оказался неожиданно хорошим для первой версии и очень скоро начал занимать существенные позиции на рынке многомерных аналитических баз данных. Появился целый ряд компаний, разработавший приложения на его базе, стандарт обмена данных, за исключением основных конкурентов, был благосклонно принят промышленностью. Несмотря на то, что набор функций первой версии был довольно ограничен, оказалось, что он покрывает достаточно большую область задач, а простота и элегантность позволили пользователям быстро освоить новый продукт. Так, под девизом "Многомерность в массы!" новая многомерная база данных фирмы Microsoft открыла рынок многомерных приложений для компаний любого уровня и сделала технологию, ранее доступную только большим корпорациям, пригодной для малого бизнеса. Как результат, рынок многомерного анализа значительно расширился, и на нем стали появляться новые незнакомые имена.
После успешного выпуска первой версии перед разработчиками встали новые задачи: начался этап подготовки к выпуску следующей версии SQL Server под кодовым названием Shiloh (Шайло). Теперь надо было понять, какую функциональность следует добавить в систему в первую очередь, чтобы получить продукт, который может стать лидирующей многомерной базой данных.
Задачу удалось сформулировать довольно легко, надо добавить такие функции, чтобы сделать OLAP-сервер платформой для решения задачи обработки данных в Хранилищах Данных (Data Warehouse). Для этого следовало ввести новые типы измерений, увеличить обьемы обрабатываемых данных, расширить модель вычислений. Задача оказалась довольно сложной, особенно учитывая то, что состав разработчиков не претерпел больших изменений. Тем не менее, разработка была завершена к концу 1999 г., и на рынок вышел продукт под названием Analysis Services 2000 (AS2K). За пять лет его продажи выросли в несколько раз, и к 2004 г. AS2K занял лидирующую позицию на рынке многомерных баз данных, а в 2005 г. фирма Microsoft заняла 27% рынка OLAP-систем и оторвалась от своих конкурентов.
К 2000 г. многомерные базы данных на OLAP-серверах стали неотъемлемой частью ИТ-инфраструктуры многих компаний, и к ним стали предъявляться такие же требования по надежности и управляемости, как и к реляционным базам данных. Перед проектированием третьей версии произошел ряд изменений в структуре подразделения, занимавшегося разработкой OLAP-технологии. Группа была расширена, и была поставлена задача обеспечить дальнейшее развитие платформы и доведение ее до состояния, удовлетворяющего требованиям промышленных систем (enterprise systems). Так как изменение устаревшего кода AS2K было признано нецелесообразным, было решено начать разработку с нуля и заложить основы надежного и управляемого сервера в его базовую инфраструктуру. Тому, что из этого получилось, и посвящена эта книга.
Первая часть книги посвящена многомерной модели данных в новой версии OLAP-сервера. Мы попытались формализовать представление данных в многомерной модели и ввести необходимую терминологию и понятия. Кроме того, мы посвятили эту часть и аспектам технологии многомерной базы данных и общей архитектуре клиент-серверного приложения, воплощением которой и является Analysis Services 2005.
Следующий раздел книги посвящен описанию модели многомерных данных. Практическое понимание модели данных и языка ее описания открывает доступ ко всем функциональным возможностям Analysis Services 2005, иногда даже недоступным через графические интерфейсы.
Третья часть книги освещает основы языка MDX и дает детальный обзор его возможностей и методов его использования для доступа к многомерным данным. В этой части раскрываются методы расчетов данных в многомерной модели.
Следующие главы посвящены практическим вопросам хранения данных на сервере и методам оптимизации их хранения и доступа. Кроме того, рассмотрена архитектура сервера, практические аспекты управления и контроля его работы.
Большая часть книги посвящена методам доступа к данным клиентскими приложе-ниями. Эти главы посвящены протоколу XML/A, объектным моделям доступа к данным ADOMD.NЕТ и управления данными AMO.
Важный раздел книги посвящен вопросам безопасности данных и определения прав доступа к данным.
В последнем разделе раскрыты практические аспекты администрирования и монито-ринга работы сервера.
При работе над этой книгой большое внимание было уделено разработке терминологии многомерных баз данных на русском языке. Это оказалось непростой задачей и вылилось во множество интересных дискуссий. Мы попытались сформировать основу русскоязычной терминологии многомерных баз данных, опираясь на термины, используемые в русифицированной версии SQL Server 2005, расширив и дополнив их. Мы надеемся, что книга позволит вам освоить технологии многомерных баз данных и эффективно использовать Analysis Services 2005 на практике.

[В начало]

Дополнительная информация

Для размещения дополнительной информации, а также для исправления возможных неточностей и ошибок в тексте книги мы разработали сайт www.e-tservice.com, посвященный этой книге. На нем вы сможете найти самую последнюю версию базы данных FoodMart 2005, используемую в книге, а также полный код примеров, приведенных в книге.

[В начало]

Глава 27. Управление памятью

Память является главным системным ресурсом, управляемым Analysis Services при поддержке многомерной модели данных.
В Analysis Services реализована экономическая модель (economical model) управления памятью. С помощью экономической модели Analysis Services назначает цену за килобайт, которую должна платить каждая структура данных, использующая память. Если использование памяти во всей системе растет, то растет и цена. Если структура данных, используемая различными операциями, важна для производительности работы системы, например, во время выполнения пользовательских запросов, она "получает" доход. Analysis Services выгружает структуру данных из памяти (в одних случаях выгружая ее на диск, в других - удаляя данные, хранящиеся в ней), когда она недостаточно часто используется, а цена памяти при этом высока. Такой подход к управлению памяти позволяет Analysis Services хранить в памяти наиболее полезные структуры данных и очищать структуры данных, которые редко используются системой.
Чтобы предотвратить фрагментацию памяти и эффективно управлять ею, Analysis Services отслеживает весь объем памяти, используемый различными подсистемами. Каждая подсистема обращается к Управляющему Памятью (Memory Manager) для выделения памяти, вместо использования операторов malloc и free операционной системы.
В Analysis Services есть две подсистемы, которые управляют памятью: Управляющий Памятью (Memory Manager) и Диспетчер Памяти (Memory Governor). Управляющий памятью отвечает за выделение памяти, а диспетчер памяти отвечает за распределение памяти между различными операциями, выполняемыми Analysis Services.

[В начало]

Экономическая модель управления памятью

Как было упомянуто в начале этой главы, Analysis Services использует экономическую модель управления памятью. Она определяет цену за килобайт в зависимости от объема доступной памяти. Есть два уровня использования памяти, которые используются для определения цены на память: Нижняя Граница Памяти (LowMemoryLimit) и Верхняя Граница Памяти (TotalMemoryLimit).

Analysis Services определяет цену на память согласно схеме на рис. 27.1. Сначала цена на память равна нулю, и все подсистемы могут выделять и освобождать любой объем памяти, требующийся для их работы. Память остается бесплатной, пока объем используемой памяти не достигнет значения Нижней Границы Памяти (LowMemoryLimit). После того как объем используемой памяти достигает этого значения, цена памяти начинает расти. Она растет линейно от 0 до значения, определяемого свойством конфигурации сервера Средняя Цена на Память (MidMemoryPrice) - ценой на память в точке посередине между значениями Нижней Границы Памяти (LowMemoryLimit) и Верхней Границы Памяти (TotalMemoryLimit). После того как объем свободной памяти достигнет этой средней точки, цена продолжит расти, но рост будет происходить с гораздо большей скоростью, пока объем использованной памяти не достигнет значения Верхней Границы Памяти (TotalMemoryLimit), а цена не достигнет значения Максимальной Цены на Память (HighMemoryPrice). Цена на память не может превысить значение Максимальной Цены на Память (HighMemoryPrice).
Цена на память определяет два важных параметра: объем памяти, который может выделить Analysis Services для выполнения определенной операции, и объем памяти, который должна вернуть серверу использующая ее подсистема.

[В начало]

Управляющий памятью

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

[В начало]

Держатели памяти

Объекты, которые получают память из операционной системы и предоставляют ее для выполнения различных операций, называются Держателями Памяти (Memory Holders). Каждый держатель памяти реализует интерфейс, который предоставляет управляющему памятью статистическую информацию:

  • объем памяти, используемый держателем памяти;

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

Периодически управляющий памятью опрашивает держателей памяти и собирает статистическую информацию. Пользователь может отправить на сервер запрос DISCOVER_MEMORY и получить информацию о текущем состоянии всех держателей памяти. Также можно использовать счетчики производительности (performance monitor counters) для отслеживания общего состояния памяти (счетчики производительности не позволяют увидеть состояние отдельных держателей памяти).

Analysis Services поддерживает два типа держателей памяти: сжимаемые (shrinkable) и несжимаемые (non-shrinkable), которые также известны как распределители памяти (allocators). Сжимаемые держатели памяти могут при необходимости вернуть системе часть памяти. Например, кеши могут быть очищены, если память требуется для других более важных операций, файловые накопители (file stores) могут быть выгружены на диск, если они редко используются (для дополнительной информации о файловых накопителях см. главу 20). Несжимаемые потребители памяти предоставляют память различным подсистемам и не могут вернуть память системе, пока подсистема не освободит эту память.
Управляющий памятью хранит списки держателей памяти. Сжимаемые и несжимаемые держатели памяти хранятся отдельно. В системе может быть большое количество держателей памяти. Поэтому во время одного периода очистки Analysis Services не проходит по всем существующим держателям памяти. Он проходит только по держателям памяти из одного списка. Можно использовать счетчики производительности для определения объема сжимаемой и несжимаемой памяти.
На рис. 27.2 показаны списки держателей памяти.

[В начало]

Очистка памяти

После того как используемый системой объем памяти превысит Нижнюю Границу Памяти (LowMemoryLimit), Analysis Services активизирует специальный поток очистки, который периодически проходит по держателям памяти, собирает статистическую информацию о каждом держателе и отправляет внутренний запрос к сжимаемым держателям памяти на очистку определенного объема памяти.

    ЗАМЕЧАНИЕ: Период, после которого управляющий памятью активизирует поток очистки, называется Периодом Очистки (Cleaning Period) и определяется свойством конфигурации сервера LimitSystemFileCachePeriod.

Когда сжимаемый держатель памяти получает запрос на очистку, он рассчитывает налог, который должен заплатить, и пересчитывает свой баланс. Если баланс отрицательный, держатель памяти должен вернуть память системе. При принятии решения, какой объем памяти необходимо вернуть системе, держатель памяти использует стратегию, специфическую для данного типа держателей памяти (мы рассмотрим эту стратегию далее в этой главе), которая позволит держателю памяти получить положительный баланс во время следующего периода очистки.
Когда объем используемой памяти приближается к значению Верхней Границы Памяти (TotalMemoryLimit) (по умолчанию это на 12% меньше значения Верхней Границы Памяти), управляющий памятью активизирует дополнительные потоки очистки. Это снижает производительность работы системы, так как большая часть времени работы процессора теперь уходит на очистку.
Когда объем памяти достигает значения Верхней Границы Памяти (TotalMemoryLimit), управляющий памятью начинает работать в кризисном режиме. В кризисном режиме Analysis Services активизирует столько потоков очистки, сколько существует процессоров на компьютере, и повышает приоритет этих потоков. Очистка практически блокирует все остальные операции сервера, пока не будет освобождено достаточно памяти. Когда сжимаемый держатель памяти получает команду о кризисном освобождении памяти, он должен освободить всю память, которая может быть освобождена, вне зависимости от его баланса. Он также реинициализирует свои структуры данных.
Когда освобождение памяти уменьшает объем памяти, используемый системой, до значения ниже Нижней Границы Памяти (LowMemoryLimit), управляющий памятью уменьшает цену памяти до нуля и переходит в спящий режим. Он не отправляет запросы на уменьшение объема памяти и только периодически опрашивает потребителей памяти и обновляет статистическую информацию о состоянии памяти.

    ЗАМЕЧАНИЕ: Система может медленно реагировать на изменения в состоянии памяти, поэтому теоретически возможно, чтобы использование памяти превысило верхнюю границу памяти, если память выделяется быстрее, чем потоки очистки высвобождают память. Аналогично, память может очищаться очень интенсивно, и ее объем может упасть ниже нижней границы памяти.

Analysis Services отслеживает событие (out of memory event), которое отправляется операционной системой, когда у компьютера заканчивается память, и повышает цену памяти при обнаружении такого события.
В этом случае цена памяти растет очень быстро, что ускоряет возвращение памяти системе.
Чтобы рассчитать объем памяти, который может остаться у держателя памяти, и объем памяти, который держатель памяти должен освободить, экономическая модель управления памятью использует пять параметров (начальные значения этих параметров определены в свойствах конфигурации сервера в разделе MemoryModel):

  • Налог (Tax) - процент цены памяти, который должен заплатить держатель памяти за каждый килобайт в его распоряжении, за период с предыдущего раза, когда он платил налоги. Например, Analysis Services рассчитывает налог кеша на основе объема памяти, используемого всем кешем;

  • Доход (Income) - доход на каждый килобайт, используемый Analysis Services для поддержки пользовательской операции. Например, кеш получает доход столько раз, сколько раз были получены из него данные, и доход приносит только тот объем данных, который был запрошен и найден в кеше;

  • Максимальный Баланс (MaximumBalance) - максимальный доход, который может быть аккумулирован держателем памяти. После достижения этого максимума доход перестает аккумулироваться. Параметр MaximumBalance не дает потребителям памяти получить слишком большой положительный баланс и перестать реагировать на отсутствие памяти в системе;

  • Минимальный Баланс (MinimumBalance) - минимальный баланс, который может быть аккумулирован потребителем памяти. После достижения этого минимума баланс перестает уменьшаться. Параметр MinimumBalance не дает держателям памяти получить слишком большой отрицательный баланс и перестать реагировать на увеличение объема доступной памяти;

  • Аванс (InitialBonus) - при создании держатель памяти получает начальный доход, чтобы он мог не возвращать память системе во время его первого периода очистки. Параметр InitialBonus определяет, сколько периодов этот держатель памяти сможет удерживать память, не выполняя полезную работу.

[В начало]

Управление памятью системы кеша

Производительность доступа к данным в многомерной модели сильно зависит от наличия этих данных в кеше. Analysis Services поддерживает несколько уровней кеширования: кеши измерений (dimension cache) и кеши групп мер (measure group cache) используются для кеширования данных, полученных подсистемой расчетов данных (formula engine) из подсистемы хранения данных (storage engine). Кеши вычислений (formula caches) используются для хранения данных, рассчитанных подсистемой расчетов данных. Кеш значений (flat cache) - разновидность кеша вычислений, который хранит значения отдельных ячеек, также рассчитанных подсистемой расчетов данных.
Все типы кешей имеют схожую структуру данных, и для простоты мы их всех будем называть "кеш".
Для каждого запроса кеш содержит две структуры данных: подкуб, который определяет структуру полученных данных, и кеш данных, который содержит результаты запроса. Мы рассмотрим все типы кешей в главе 28. В этой главе мы рассмотрим, как управляющий памятью работает с кешами данных.
Analysis Services ищет данные в кеше, рассчитывает или получает их из хранилища и сохраняет новые данные в кеше. Когда объем используемой памяти достигает значения Нижней Границы Памяти (LowMemoryLimit), управляющий памятью принимает решение, какие данные должны остаться в кеше, а какие данные должны быть очищены. Очевидно, что управляющий памятью сохраняет часто используемые данные и удаляет редко используемые. Каждый кеш данных и соответствующий подкуб являются держателями памяти (memory holders). Если во время выполнения запроса был использован кеш данных, то он получает доход в соответствии с использованным объемом памяти. Когда наступает период очистки, кеш рассчитывает налог на основе текущей цены на память и объема памяти, используемого для кеша данных и подкуба. Если баланс положительный, то кеш остается в системе, иначе его память освобождается.
Все кеши данных регистрируются в реестре данных (data registry) - индексе для выполнения быстрого поиска кеша данных по подкубу. Реестр данных также является потребителем памяти. Когда управляющий памятью работает в нормальном режиме, он очищает кеши данных и подкубы, но не очищает индекс. Однако когда управляющий памятью объявляет кризисный режим, Analysis Services очищает все кеши данных, подкубы и сам реестр данных.

[В начало]

Управление памятью файловых накопителей

Одной из наиболее важных структур данных в Analysis Services являются файловые накопители (для дополнительной информации о файловых накопителях см. главу 20), которые Analysis Services использует для хранения большей части данных измерений. Производительность файловых накопителей влияет на производительность всей системы. Доступ к данным, хранящимся в файловых накопителях, является наиболее эффективным, когда все они загружены в память.
Весь файловый накопитель является держателем памяти, потому что было бы неэффективно иметь держатель памяти для каждой страницы файлового накопителя. При использовании страниц накопителя держатель памяти получает доход и платит налог на всю память, выделенную на все страницы накопителя.
Чтобы определить страницы, которые должны быть выгружены из памяти, Analysis Services использует счетчик посещений страниц. Когда управляющий памятью опрашивает файловые накопители, каждый накопитель анализирует текущий баланс и цену на память и принимает решение очистить часть памяти, находящейся в его распоряжении. В результате файловый накопитель выгружает редко используемые страницы на диск, а часто используемые страницы остаются в памяти. Таким образом, память, используемая файловыми накопителями, зависит от использования памяти во всей системе. Поэтому, если сервер занят работой, в результате которой данные извлекаются из кешей и не используются данные из измерений, то через некоторое время все файловые накопители будут выгружены на диск, а в кешах будет аккумулирован большой объем данных. Если использование кешей уменьшится, то кеши будут очищены, и большее количество страниц накопителей для измерений будет загружено в память.

[В начало]

Управление памятью пользовательских сессий

Объекты сессий (session object) являются держателями памяти и управляются экономической моделью памяти. Аналогично кешам, управляющий сессиями также является держателем памяти. Когда цена на память вырастает, Analysis Services удаляет сессии, которые не используются и, тем самым, не приносят доход. Однако у Analysis Services есть минимальное время, в течение которого сессия не может быть удалена, даже если у нее отрицательный баланс. Это значение может быть изменено с помощью свойства конфигурации сервера Минимальное Время Бездействия Сессии (MinIdleSessionTimeout). После того как закончится этот период времени, сессии, имеющие отрицательный баланс и не используемые некоторое время, удаляются, память освобождается и данные, сохраненные в сессии (session state), теряются. Но перед удалением всей сессии Analysis Services пытается освободить память, занятую различными компонентами внутри объекта сессии, которые могут быть удалены без потери состояния сессии. Однако если и после этой процедуры баланс сессии остается отрицательным, управляющий сессиями удаляет всю сессию.

[В начало]

Другие держатели памяти

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

[В начало]

Распределители памяти

Чтобы предотвратить фрагментацию, Analysis Services никогда не выделяет память с помощью функций операционной системы. Он использует управляющего памятью для выделения памяти для всех своих структур данных. Это дает возможность управляющему памятью следить за всей используемой в системе памятью, обеспечивать более детальный контроль над выделением памяти и более эффективно выделять память. Например, при выделении памяти структуре данных, содержащей большой объем данных, имеет смысл выделять ее страницами. Для предоставления памяти различным подсистемам Analysis Services использует распределители памяти (allocators) - несжимаемые держатели памяти.

    ЗАМЕЧАНИЕ: Внешние компоненты, работающие внутри Analysis Services, такие как провайдеры OLE DB, не интегрированы с управляющим памятью и не используют распределители памяти Analysis Services для выделения памяти.

Analysis Services поддерживает шесть типов выделения памяти, которые поддерживаются шестью типами распределителей памяти:

  • Распределитель Страниц (PageAllocator) - выделяет память в виде страницы фиксированного размера. Analysis Services поддерживает три размера страниц: Большие Страницы (Big Pages) размером 64 Kбайт, Средние Страницы (Middle Pages) размером 8 Kбайт и Маленькие Страницы (Small Pages) размером 1 Kбайт;

  • Распределитель Массивов (VectorAllocator) - позволяет выделять непрерывную память для массивов, в которых все элементы массива имеют одинаковый размер;

  • Распределитель Строк (StringAllocator) - позволяет выделять память для текстовых строк. Строки имеют отдельный распределитель памяти, потому что строки требуют специальных методов выделения памяти;

  • Распределитель Объектов (ObjectAllocator) - позволяет создавать объекты определенного класса. Этот тип распределителей памяти позволяет уменьшить фрагментацию памяти, так как если один объект удаляется, другой объект того же размера может быть размещен на его месте;

  • Групповой Распределитель (ArenaAllocator) - позволяет быстро выделять память порциями, но освобождать ее целиком. Групповой распределитель имеет указатель на начало выделенной памяти и может освободить всю память до этого указателя;

  • Общий Распределитель (GeneralAllocator) - позволяет выделять память произвольного размера.

Analysis Services также поддерживает различные уровни выделения памяти, которые определяют период существования и область действия выделенной памяти. Существует пять уровней:

  • Глобальный Уровень (Global) - память выделяется для подсистем уровня сервера, таких как пулы потоков, подсистема обработки ошибок и др. Распределители Объектов (ObjectAllocator) доступны только на этом уровне;

  • Уровень Основного Объекта (MajorObjects) - память, принадлежащая основным объектам метаданных. Это значит, что выделенная на этом уровне память освобождается при удалении основного объекта. Например, у измерения есть свои распределители памяти, и все атрибуты, иерархии и кеши измерения выделяются из распределителя памяти измерения. Вся эта память освобождается при создании новой версии измерения. Это позволяет иметь фрагментацию памяти только во время существования версии измерения. У новой версии измерения накопившаяся фрагментация исчезает;

  • Уровень Сессии (Session) - память принадлежит объекту сессии, и вся память освобождается, когда сессия удаляется. Например, границы действия сессии (которые будут рассматриваться в главе 28) выделяются с помощью распределителей памяти сессии;

  • Уровень Запроса (Request) - память принадлежит текущему пользовательскому запросу. После завершения выполнения запроса вся информация, связанная с этим запросом, удаляется (кроме данных, хранящихся в кешах). В результате выполнение пользовательских запросов не приводит к фрагментации памяти;

  • Уровень Потока (Thread) - память, относящаяся к потоку. Эта память освобождается, когда поток возвращается в пул. Этот уровень распределителей памяти не требует синхронизации, потому что распределитель используется из одного потока. В результате распределители памяти потока являются наиболее эффективными распределителями памяти системы, особенно, если учесть, что они являются Групповыми Распределителями (Arena), которые могут быть полностью освобождены перед возвратом потока в пул.

На каждом уровне распределителей памяти есть все типы распределителей (кроме Распределителя Объектов (ObjectAllocator), который поддерживается только на Глобальном Уровне (Global)). В зависимости от выполняемых операций Analysis Services использует различные типы распределителей памяти с различных уровней.

[В начало]

Диспетчер памяти

Диспетчер памяти определяет порядок выделения памяти для различных операций. Analysis Services может параллельно выполнять множество операций, однако если операции требуется большой объем памяти, ее выполнение может быть заблокировано даже при незагруженном процессоре. Чтобы предотвратить возникновение такой ситуации, в Analysis Services существует диспетчер памяти, который отвечает за управление выделением памяти различным компонентам системы.
Операции, которые управляются диспетчером памяти, являются держателями памяти (memory holders) и реализуют интерфейс держателя памяти. Analysis Services обычно использует диспетчер памяти для распределения памяти между задачами Координатора Задач (Job Coordinator). При создании задачи Analysis Services выделяет ей Аванс (InitialBonus). Перед тем как Analysis Services начнет выполнение задачи, он рассчитывает минимальный объем памяти, требующийся для ее выполнения, и максимальный объем памяти, который может быть использован задачей во время выполнения. После этого задача запрашивает память у диспетчера памяти, передавая ему минимальное и максимальное значения и свой текущий баланс. В зависимости от баланса задачи, цены на память и доступного в системе объема памяти диспетчер памяти рассчитывает объем памяти, который он может предоставить задаче. Если этот объем находится между минимальным и максимальным значениями, то диспетчер резервирует память для этой задачи, и задача начинает выполняться. Но если памяти недостаточно, диспетчер памяти блокирует запрос и помещает его в очередь Запросов на Получение Памяти (Memory Request Queue) и ждет момента, когда будет завершена другая задача, которая вернет память системе и уведомит диспетчера об освобождении памяти. После этого диспетчер памяти производит перерасчет памяти, требующейся первой задаче в очереди запросов на получение памяти, и разблокирует ее, если памяти достаточно для ее выполнения. На рис. 27.3 показана схема работы диспетчера памяти.
Начальный объем памяти, который диспетчер памяти может распределить между задачами, определяется свойством конфигурации сервера MemoryLimit в секции ProcessPlan. Если минимальный объем памяти, требуемый для выполнения задачи, больше значения MemoryLimit, то Analysis Services не может выполнить задачу и возвращает ошибку пользователю. Можно отключить появление этой ошибки с помощью свойства конфигурации сервера MemoryLimitErrorEnabled и выполнить задачу, форсировав получение необходимой памяти у диспетчера памяти. Однако отключение свойства MemoryLimitErrorEnabled не гарантирует успешного выполнения задачи, так как возможно, что в системе недостаточно памяти для ее выполнения.

Задача может быть выполнена как единое целое или в несколько стадий. Некоторые задачи могут быть выполнены как единое целое и при завершении возвращают выделенную им память диспетчеру памяти. Если задача выполняется в несколько стадий, при завершении одной стадии происходит перерасчет дохода на основе выполненной работы во время завершенной стадии и налога, который задача должна заплатить за использование предоставленной памяти. После расчета нового баланса задача также производит перерасчет максимального и минимального объемов памяти, требующихся в следующей стадии. После этого задача получает разрешение от диспетчера памяти на продолжение работы, а также получает объем памяти, который она может использовать при дальнейшем выполнении. Этот алгоритм позволяет системе производить балансировку используемой памяти между выполняющимися задачами в зависимости от изменений состояния памяти в системе.
Очевидно, что диспетчер памяти не гарантирует, что у Analysis Services есть достаточно памяти для выполнения любой задачи, так как не все подсистемы контролируются диспетчером памяти. Например, выполнение запроса не контролируется диспетчером памяти, так как имеет более высокий приоритет, чем операции обработки. Система работает наиболее эффективно, когда Analysis Services выполняет только задачи, контролируемые диспетчером памяти, такие как одновременная обработка секций и измерений, создание агрегаций и построение индексов. Однако, даже если одновременно с командами, контролируемыми диспетчером памяти, выполняются не контролируемые им задачи, все равно в системе поддерживается некоторый баланс, так как память для всех команд выделяется управляющим памятью, который контролирует состояние системы изменением цены на память.
Диспетчер памяти принимает решения о предоставлении памяти задаче на основе текущего состояния системы, что позволяет Analysis Services параллельно выполнять любой набор задач. Однако диспетчер памяти не принимает свои решения на основе операций, которые еще не получены сервером. С другой стороны, дизайнер многомерной модели обычно знает все операции, которые должны быть выполнены, и может планировать их выполнение гораздо эффективнее. Мы рекомендуем планировать выполнение сложных команд и разработать хорошо сбалансированный Пакет Команд (Batch) (для дополнительной информации о пакетах команд см. главу 26), который предоставляет Analysis Services последовательность операций, обеспечивающую достижение наилучшей производительности.

[В начало]

Модель обработки атрибутов и секций

Модели памяти обработки атрибутов и секций очень похожи, поэтому мы рассмотрим, как диспетчер памяти резервирует память во время обработки атрибутов и секций, на примере секций.
В первой стадии обработки секции Analysis Services анализирует объем памяти, который требуется для обработки этой секции (мы рассмотрели все стадии обработки в главе 21). Задача обработки секции является держателем памяти и контролируется экономической моделью управления памятью. Однако использования только экономической модели недостаточно. Если Analysis Services предоставит всю доступную память задаче обработки секции, у него не останется памяти для выполнения других операций. Можно использовать свойства конфигурации для настройки условий, с помощью которых Analysis Services выполняет начальные расчеты объема памяти, требующегося для обработки секции:

  • Максимальный Объем Буфера Обработки (BufferMemoryLimit) - определяет максимальный объем памяти, который может использовать Analysis Services для обработки одной секции или одного атрибута;

  • Максимальный Размер Буфера Обработки (BufferRecordLimit) - определяет максимальное количество записей, которые могут храниться в буфере обработки одного сегмента.

Секции обрабатываются посегментно, и Analysis Services использует два буфера: один для обработки записей и один для сжатия записей. Для расчета требуемой памяти задача обработки оценивает размер одной записи в буфере обработки. Следующая формула позволяет рассчитать количество записей, которое задача обработки помещает в буфер:

Nmax = ( BufferMemoryLimit / RecordSize ) / 2

С помощью этой формулы рассчитывается максимальное количество записей, которое Analysis Services может поместить в буфер, зная объем памяти, который может использоваться при обработке. Если это количество записей превышает разрешенное количество записей в буфере BufferRecordLimit, то Analysis Services использует максимальное значение размера буфера BufferRecordLimit. Поэтому формула для расчета максимального и минимального количеств записей в буфере выглядит следующим образом:

Nmax = Min(( BufferMemoryLimit / RecordSize ) / 2, BufferRecordLimit)
Nmin = 65536

В Analysis Services никогда не бывает сегментов размером меньше 65 536 (64 Кбайт). Чтобы найти в измерении нужные Идентификаторы Данных (DataID), задача обработки данных загружает в память хеш-таблицы ключей для всех атрибутов, используемых в группе мер. Если в группе мер содержится много больших измерений, Analysis Services будет использовать большие объемы памяти во время обработки секции. Если объем памяти ограничен, Analysis Services придется обрабатывать секцию за несколько проходов (см. главу 21). Поэтому для расчета минимального объема памяти, необходимого для обработки секции, Analysis Services добавляет к минимальному объему памяти, для размещения обоих буферов, объем памяти, необходимый для загрузки наибольшей хеш-таблицы. И для расчета максимального объема памяти он добавляет к максимальному объему памяти для размещения буферов объем памяти, необходимый для загрузки всех хеш-таблиц.
Теперь можно рассчитать максимальный и минимальный объемы памяти, которые должна запросить обработка у диспетчера памяти:

Qmax = 2 x (Nmax / Nmin + 1) x Nmin x RecordSize + QHashTables
Qminmin = 2 x Nmin x RecordSize + QLargeHashTable

Диспетчер памяти резервирует память на основе цены на память и баланса операции обработки. Поэтому количество записей в буфере рассчитывается следующей формулой:

N = Max(( Q / RecordSize ) / Nmin , Nmin)

где Q - объем памяти, зарезервированный диспетчером памяти для операции обработки.
После этого Analysis Services может выделить память для Буфера Обработки (Processing Buffer) и начать обработку секции. После обработки первого сегмента задача обработки производит переоценку своего баланса. Она рассчитывает налог в виде цены памяти, умноженной на налог, определенный моделью памяти, а также умноженной на объем памяти, выделенной для буфера обработки. Analysis Services использует специальный метод для расчета дохода задания обработки. Доход рассчитывается как количество обработанных записей, умноженное на свойство Доход (Income) модели памяти. После переоценки баланса задача обработки запрашивает у диспетчера памяти разрешение продолжить обработку и передает ему минимальный и максимальный объемы требуемой памяти, а также новый баланс. Диспетчер памяти возвращает объем памяти, который он может зарезервировать для использования при расчете нового размера буфера обработки следующего сегмента. Если буфер обработки предыдущего сегмента слишком большой, все переоценки для следующего сегмента будут сделаны через большой промежуток времени, поэтому система будет медленно реагировать на изменение состояния памяти. Однако слишком маленький сегмент не позволяет Analysis Services производить оптимизацию, связанную с группировкой записей (clustering), и снижает производительность выполнения запросов. Дизайнеры Analysis Services определили такое значение по умолчанию для BufferRecordLimit, которое удовлетворяет обоим условиям. Сохранение данных, загруженных из источника данных, также требует памяти. Для настройки требуемого объема памяти можно использовать два свойства конфигурации сервера:

  • Кешировать Данные на Диске (CacheRowsetToDisk) - определяет, должен ли Analysis Services использовать диск для хранения записей, полученных из источника. Если это свойство установлено в True, Analysis Services не потребуется дополнительная память для хранения этих записей, но в результате данные будут выгружаться на диск, и производительность обработки снизится. С другой стороны, установка этого свойства в False потребует дополнительной памяти для выполнения обработки, но это может повысить производительность обработки;

  • Размер Кеша Данных (CacheRowsetRows) - определяет количество записей, хранящихся в буфере во время чтения записей из источника. Объем памяти, требуемый для размещения буфера, рассчитывается как количество записей, умноженное на размер записи. Можно рассчитать приблизительный размер записи, если известны типы данных столбцов, запрошенных SQL-запросом во время обработки.

Если во время операции обработки доступен большой объем памяти, свойство Кешировать Данные на Диске (CacheRowsetToDisk) не влияет на производительность системы, так как данные загружаются в файловый накопитель, который не будет выгружен на диск из-за низкой цены на память. Однако если объем доступной памяти ограничен, во время обработки возрастает нагрузка на память. Данные могут быть выгружены на диск, в результате чего будет потеряна эффективность. В этом случае свойство Кешировать Данные на Диске (CacheRowsetToDisk), установленное в False, может обеспечить лучшую производительность. Мы рекомендуем изменять это свойство только после того, как вы поэкспериментируете с вашей системой и убедитесь, что вы повысили производительность обработки вашего набора данных.

[В начало]

Модель создания агрегаций

Скорость создания агрегаций сильно зависит от доступности памяти. Если в системе достаточно памяти для размещения данных из всех агрегаций, то создание агрегаций производится в несколько раз быстрее, чем в случае недостатка памяти и выгрузки агрегаций на диск.
При создании агрегаций Analysis Services рассчитывает необходимый объем памяти на основе свойств конфигурации сервера AggregationMemoryLimitMin и AggregationMemoryLimitMax. Эти свойства определяют минимальный и максимальный объемы памяти, которые задача создания агрегаций запрашивает у диспетчера памяти. Диспетчер памяти оценивает текущую цену на память, баланс задачи создания агрегаций и объем доступной памяти, после чего резервирует память для использования этой задачи.
Analysis Services создает агрегации для каждого сегмента секции. Он читает данные сегмента и создает агрегации, которые могут быть созданы на основе фактов (данные нижнего уровня детализации). Если эта агрегация может быть использована для создания других агрегаций, Analysis Services на следующем шаге начнет создание этих агрегаций. Analysis Services рекурсивно создает агрегации, пока не достигнет агрегации, из которой нельзя создать ни одной другой агрегации, и сохраняет эту агрегацию в Буфере Агрегаций (Aggregations Buffer).
После того как Analysis Services завершит сохранение всех агрегаций в буфер, задача создания агрегации производит перерасчет своего баланса. Она рассчитывает доход, умножая количество записей в созданной агрегации на свойство Доход (Income) модели памяти. Analysis Services рассчитывает налог, как текущую цену памяти, умноженную на размер буфера агрегаций, используемого для хранения этих записей, а также на свойство Налог (Tax) модели памяти.
После пересчета баланса задача создания агрегации запрашивает разрешение у диспетчера памяти на создание следующей агрегации и передает минимальный и максимальный объемы требующейся памяти и новый баланс. Диспетчер памяти возвращает объем памяти, который он может зарезервировать и который может быть использован для расчета нового размера буфера агрегаций для создания следующей агрегации. Если агрегация не помещается в новом размере буфера агрегаций, содержимое буфера выгружается во временный файл, память освобождается и заполняется новыми данными.
После создания последней агрегации последнего сегмента Analysis Services начинает слияние данных, хранящихся на диске и в памяти, а затем сохраняет агрегации на диск. Этот процесс слияния замедляет создание агрегаций. Если можно пропустить этот шаг, то выполнение задачи создания агрегации занимает значительно меньше времени. Пропустить этот шаг можно, либо увеличив объем памяти, выделенный для задачи создания агрегации, либо уменьшив количество создаваемых агрегаций, либо уменьшив размер секции.

[В начало]

Модель построения индексов

Модель построения индексов является хорошим примером, когда требуемый для задачи объем памяти может быть точно рассчитан, и после этого не нужна никакая дополнительная информация от пользователя (из файла конфигурации сервера).
Когда Analysis Services создает индексы, он должен декодировать данные сегмента (для дополнительной информации см. главу 21). К этому моменту Analysis Services уже рассчитал количество записей во время обработки секции, а также знает размер записи, поэтому он может легко рассчитать объем требующейся памяти.
Для построения индексов Analysis Services должен загрузить в память таблицы декодирования (для дополнительной информации о таблицах декодирования см. главу 20), иначе декодирование не будет эффективным, и построение индексов будет выполняться очень долго. Поэтому задача построения индексов должна зарезервировать память для всех таблиц декодирования и заблокировать эти таблицы в памяти, пока не будет завершено декодирование. Задача построения индексов рассчитывает объем памяти, требующийся для размещения записей текущего сегмента и таблиц декодирования, а также рассчитывает приблизительный объем памяти, требующийся для построения индексов, и запрашивает эту память у диспетчера памяти.
Так как секциям из одной и той же группы мер требуются одни и те же таблицы декодирования, Analysis Services может строить индексы секций из одной и той же группы мер параллельно, без большой нагрузки на память.
Если памяти для загрузки всех таблиц декодирования недостаточно, то Analysis Services вообще не может создать индексы. Необходимо проанализировать атрибуты измерений в группе мер и отключить индексы по редко используемым атрибутам, установив свойство AttributeHierarchyOptimizedState в NonOptimized (для дополнительной информации об этом свойстве см. главу 6). Наименее эффективными являются индексы атрибутов с большим количеством элементов, потому что во время создания они требуют большого объема памяти, а пользователи редко используют эти атрибуты для фильтрации в запросе.
У задачи построения индексов есть только одна стадия, и она никогда не производит переоценку требующегося объема памяти. Поэтому задача создания индексов не возвращает память диспетчеру памяти, пока не будет полностью завершена.

[В начало]

Резюме

Память является главным системным ресурсом, управляемым Analysis Services при поддержке многомерной модели данных.
В Analysis Services реализована экономическая модель (economical model) управления памятью. С помощью этой модели Analysis Services назначает цену за килобайт, которую должна платить каждая структура данных, использующая память. Если использование памяти во всей системе растет, то растет и цена. Если структура данных, используемая различными операциями, важна для производительности работы системы, например, во время выполнения пользовательских запросов, она "зарабатывает" доход. Analysis Services выгружает структуру данных из памяти (в одних случаях перемещая ее на диск, в других - удаляя данные, хранящиеся в ней), когда она недостаточно часто используется, а цена памяти при этом высока.
Объекты, которые выделяют память и предоставляют ее различным операциям Analysis Services, называются держателями памяти.
Часть подсистем Analysis Services интегрирована с управляющим памятью: кеши измерения и групп мер, кеш вычислений, файловые накопители, пользовательские сессии и многие другие.
Чтобы предотвратить фрагментацию, Analysis Services никогда не выделяет память с помощью функций операционной системы. Analysis Services использует управляющего памятью для выделения памяти для всех своих структур данных.
Диспетчер памяти определяет порядок выделения памяти для различных операций. Analysis Services может параллельно выполнять множество операций; однако, если операции требуется большой объем памяти, она может быть блокирована даже при незагруженном процессоре. Для предотвращения такой ситуации Analysis Services имеет диспетчер памяти, который отвечает за управление выделением памяти различным компонентам системы.

[В начало]

ССЫЛКИ НА СТАТЬИ

Статьи на русском языке

Нормализация отношений
info-system
С проектированием базы данных непосредственно связано понятие нормализации. Отношение называется нормализованным, если значение каждого атрибута в каждом кортеже является атомарным (неделимым).

Лицензирование Microsoft SQL Server 2005
Microsoft
Лицензирование SQL Server 2005 во многом схоже с лицензированием SQL Server 2000. Основные изменения связаны с использованием SQL Server 2005 с технологией виртуальных машин, Ознакомиться с этими изменениями можно на странице Лицензирование серверных продуктов Microsoft при использовании технологии виртуальных машин и в разделе "Виртуализация и многоэкземплярность" документа Лицензирование SQL Server 2005. Ниже описаны правила использования SQL Server 2005 на физических серверах. Для SQL Server 2005 предлагается как модель лицензирования на процессор, так и модель лицензирования с использованием серверных и клиентских лицензий. Выбор той или иной модели лицензирования зависит от потребностей клиента.

Обсуждение терминологии по MS SQL Server. Желающие приглашаются
Алексей Халяко
По сообщению Алексея Халяко, группа разработки SQL Server и терминологи предлагают всем желающим внести свою лепту в дело улучшения качества терминологии сервера.

Подписчикам MSDN стал доступен для скачивания SQL Server 2005 Developer Edition (Russian)
Anton Belousov
Новость с небольшой задержкой, но все равно нужно об этом рассказать. Спасибо Саше Гладченко за интересную новость.

Создание профилей MAPI без установки Outlook
Microsoft
Согласно распространенному ошибочному мнению, для создания профилей MAPI на сервере Microsoft Exchange должен быть установлен клиент MAPI, например Microsoft Outlook или клиент Exchange. А на самом деле клиент MAPI для этой цели не нужен. Корпорация Майкрософт не рекомендует устанавливать на рабочих серверах клиент MAPI (Outlook). При наличии подсистемы MAPI существует масса других способов создания профилей MAPI (на сервере Exchange эта система установлена).

MS03-031: Накопительное обновление для системы безопасности сервера SQL Server
Майкрософт
Корпорация Майкрософт выпустила обновление для системы безопасности, которое устраняет уязвимости в следующих продуктах:

Та же версия, но под другим именем
Брайан Моран
Несколькими неделями раньше Microsoft сообщила о выходе RTM-версии SQL Server Compact Edition, предназначенной для мобильных и "эпизодически подключаемых" пользователей. Согласно Шекспиру, "…все так же сладок розы аромат, когда другое имя ей дано…". Также и SQL Server Compact Edition под любым другим именем сохраняет свое предназначение - реализовать план Microsoft по завоеванию рынка баз данных, ориентированных на эпизодическое подключение.

Запуск SQL Server Express в среде Windows Vista
Майкл Оти
С недавним появлением Windows Vista одним из насущных вопросов для пользователей SQL Server 2005 Express является: "Как SQL Server Express будет работать в среде новой ОС"? К сожалению, SQL Server Express - одно из приложений, действительно имеющих некоторые известные проблемы совместимости с Windows Vista. Чтобы избежать этих проблем, необходима установка SQL Server 2005 Express Service Pack 2 (SP2). Второй пакет исправлений пока находится на CTP-стадии, поэтому его не следует использовать в составе производительных систем. До выпуска SP2 (ожидаемого в первом квартале 2007 г.) многие пользователи Vista будут работать с SQL Server Express SP1. Чтобы получить непосредственное представление о проблемах совместимости, я выполнил загрузку и установку SQL Server Express с Advanced Services SP1 на новой сборке версии Windows Vista Business..

[В начало]

Англоязычные статьи

You may notice unpredictable behavior on a multiprocessor computer that is running SQL Server 2000 and has the Physical Addressing Extensions (PAE) specification enabled
Microsoft
On a multiprocessor computer that is running an instance of Microsoft SQL Server 2000, you may notice unpredictable behavior that may affect the stability of the instance of SQL server under stress conditions. You may notice the following unpredictable behavior when this problem occurs:

SQLServer: Dynamic Cross-Tab
Muthusamy Anantha Kumar
Producing a cross-tab report with static number of columns is a straightforward process. When comes to the dynamic number of columns, it gets tricky. This article illustrates how to generate a cross-tab query on the fly, using the EXEC statement and simple string concatenation.

The Dedicated Administrator Connection
Wayne Fillis
New to SQL Server 2005 is the Dedicated Administrator Connection (DAC), which provides a way to ensure you can always connect to your server. No more getting locked out of a busy server as could occur in prior versions. Wayne Fillis brings us a short tutorial on this handy new feature.

ROW_NUMBER, NTILE, RANK And DENSE_RANK
SQL
Yesterday I showed how to do ranking in SQL Server 2000, today we will look at how it's done in SQL Server 2005

SQL Server Excel Workbench
Robyn Page and Phil Factor
Phil and I have teamed up on this workbench, which demonstrates how to create, read, update and delete information in Excel using T-SQL, from SQL Server. As always, the workbench is structured so that it can be pasted into Query Analyser and SSMS, and the individual examples executed - you can download the .sql from the "Code Download" link above, load it up and start experimenting!

Use Service Broker Internal Activation in SQL Server 2005
Tim Chapman
In previous articles, I covered the theory behind message-based systems and introduced the components of Service Broker, the new feature in SQL Server 2005 for building asynchronous messaging applications in the database engine. In this article, I walk you through the process of building a small Service Broker application that uses Internal Activation to process messages when they are passed.

Cleaning up imported data in SQL Server
Arthur Fuller
My current project involves a 62 million row table with more than 500 columns. The data came from a source outside SQL Server, and the table into which it arrived consisted of an identity primary key; all the remaining columns were stored as varchar(50).

Is RAID 5 Really That Bad?
Linchi Shea
RAID 5 is a dirty word in the DBA community and beyond. There are websites devoted to trash RAID 5. I've seen DBAs declaring performance root cause found the very moment they found out that some database files were placed on RAID 5 volumes. You'd be ridiculed and run out of town if you dare to suggest putting the transaction log file on RAID 5. Is this knee jerk reaction to blaming RAID 5 for a database's performance failings really justified?

CHECKDB (Part 8): Can repair fix everything?
Paul Randal
I was teaching at a Microsoft-internal class last week and there was a discussion on what corruptions can't be repaired using DBCC. At the same time, several threads popped up on forums and newsgroups with people hitting some of this unrepairable corruptions so I thought that would make a good topic for the next post in the CHECKDB series.

SQL Server 2005 and WMI
Dejan Sarka
A very effective way of administering Windows is through scripts in a scripting language that use Windows Management Instrumentation (WMI) objects. SQL Server 2005 brings WMI provider for configuration management and WMI provider for server events. You can use the first one for configuring SQL Server through a script, and the second one to monitor events on SQL Server through a script. Here is an example of VBScript script that uses WMI to enlist the protocols and enable named pipes.

New Isolation Levels Available in SQL Server 2005
Brad M. McGehee
One of the more mysterious features of SQL Server is isolation levels. Whenever a statement is executed, or a data modification is made, it runs under the influence of an isolation level. The isolation level directly impacts the performance of SQL Server, along with the integrity of the data. So what exactly is this mysterious feature all about?

How to add entries for Exchange services to Mapisvc.inf
Microsoft
Certain MAPI configurations may not include entries in the Mapisvc.inf file for Microsoft Exchange services, even though the appropriate MAPI providers for Exchange have been installed. For example, you may install Exchange Administrator on a server to get a MAPI implementation.

PerformancePoint First Impressions
Chris Webb
I was meant to be at the third day of the UK PerformancePoint airlift today, but because of the snow we've been having here in the south of England I decided against the trip to Reading and stayed at home to build a snowman instead. However, I thought I'd go ahead and blog about what I learnt on the first two days; Charlie Maitland was/is also there and has also been blogging too, here and here. It seems like the PerformancePoint hype cycle is getting up to speed - there's certainly a lot about it in the press, eg at twdi http://www.tdwi.org/News/display.aspx?ID=8313 - so I might as well add my thoughts...

FAQ: How do I connect to Excel 12 in SQL Server Integration Services (SSIS)
Euan Garden
This question has been coming up a lot internally lately, short answer is:

SQL Server 2005 Waits and Queues
Tom Davidson
SQL Server 2005 Performance Tuning using the Waits and Queues is a proven methodology that allows one to identify the best opportunities to improve performance, the so called "biggest bang for the buck". These performance improvements are likely to have a significant return on the performance tuning time investment. The methodology helps identify the areas of slow performance by looking at the problem from two directions called Waits and Queues. An analysis of Waits indicates where SQL Server is spending lots of time waiting. In addition, the biggest waits point out the most important or relevant Queues (that is, Performance Monitor counters and other data) for this workload. The cross validation of the waits analysis enables us to eliminate all except the most significant performance counters, and provides a strong indication of pressure on specific resources. Application performance can be easily explained by looking at SQL Server waits and System or Resource queues. In SQL Server 2005, the dynamic management view (DMV) sys.dm_os_wait_stats provides a valuable source of wait information from an application perspective. The system or resource perspective uses Performance Monitor counters and other data sources to provide a breakdown of system resource usage according to resource queues. Taken together, the value of the application and resource perspectives used by the waits and queues methodology enables us to narrow in on the bottleneck and eliminate the irrelevant performance data. In sum, Performance Tuning using the Waits and Queues methodology is an effective way to quickly identify and resolve application performance problems because it lets the user discover new and potentially unexpected problem areas, within applications or solutions without the typical guesswork that can accompany such work. Performance tuning of applications and solutions has been around for many years. The performance of SQL Server 2005 database applications should be evaluated from several different perspectives. Each perspective tells a different section of the complete performance story. Together they paint a detailed performance picture of the whole and also cross validate observations in each specific perspective.

SQL Server 2005: View all permissions
Jamie Thomson
Today I was asked how one can query the server to list out all permissions that a principal has on all the securables in a SQL Server database. After 10 mins of searching through BOL I came up with the following that seems to work quite well:

3rd and 45? Drop back and Punt? Nah, Generate Code
Brett Kaiser
So, we don't have DBArtisan, but I am very happy for my copy of ERWin. Don't know what I'd do with out it.

CodeGen to Create Indexes for FKs
Paul Nielsen
/* This script creates a (composite) nonclustered index for every Foreign Key without a complete matching (composite) index */

KILL spids
Tara Kizer
To quickly disconnect all non admins from a database, I use this:

Getting the difference between two sets of like data
Louis Davidson
A question came up on the forums the other day that a person wanted to compare two tables of data. Doing this is pretty easy using several techniques:

Back to "A DMV a Day"
Glenn Berry
It turns out that there are several known issues with ad-hoc plan caching in SQL Server 2005 RTM and SP1 that have been corrected in hot fixes that are rolled up in SQL Server 2005 SP2. This blog post discusses the issue in more detail.

How to prepare SQL Server 2005 and SQL Server 2000 for changes to daylight saving time in 2007
Microsoft
In August 2005, the U. S. Congress passed the Energy Policy Act. This act changes both the start date and the end date of daylight saving time (DST). When this act goes into effect in 2007, DST will start three weeks earlier and will end one week later than when it traditionally started and ended. Specifically, DST will start at 2:00 A.M. on the second Sunday in March and will end at 2:00 A.M. on the first Sunday in November.

SMO vs TSQL vs Batch vs .NET vs VBS
Mostly Mr SQL
The prototypical application I have in mind is the backup script, which involves launching a few processes, running a few TSQL commands like "BACKUP" and doing some file system shuffling, like checking for the existance of a file you intend to write, deleting old backup files, moving them to a safe place, etc. To get anything done, you find yourself doing 3 crimes against computer science:

Finding Gold in Yukon
Don Jones
Not your father's SQL Server, administrators will find comfort in Yukon, while developers are left out in the cold.

Unicode and non-Unicode data-type mis-matches
Decipherinfosys
I have seen this at many client sites. Though it seems to be a trivial issue - many developers do not realize this till their code hits a benchmark run or even worse - directly put into production with just unit tests and no benchmarks. Consider this:

Time Outs
Decipherinfosys
No, we are not talking about the time outs that you give to Kids :-) We are talking about the different kind of time outs that can occur in an application. Broadly speaking, these are the type of time outs that can occur in an application:

Bad Transaction Designs
Decipherinfosys
Here is a compilation of the bad transaction designs that we have seen in our experience in the field. Poorly written transactions are the biggest reason for experience blocking as well as data corruption issues.

Event Classes in SQL Server 2005
Decipherinfosys
This is so convenient. In SQL 2000, one had to keep a static list of the event classes and then reference them for look-ups when running diagnostic SQL statements against the data captured in SQL Server Profiler traces. In SQL Server 2005, there is a new view that gives you this information:

Lock Conversion and Lock Escalation
Decipherinfosys
Lock Conversion and Lock Esclation are different though people do get confused with the terminology and mix them up. Lock conversion means that a particular lock mode type gets converted to a higher lock mode type during the process of execution, for example: in an update statement's lifecycle, the engine first has to read the rows that it plans to update and thus takes a shared lock on the resource(s) and then does a lock conversion to an exclusive lock prior to doing an update. This is a common process across RDBMS.

An Introduction to Dynamic Management Views and Functions in SQL Server 2005
Brad M. McGehee
One my most favorite features of SQL Server 2005 is the introduction of Dynamic Management Views (DMVs) and Dynamic Management Functions (DMFs). They allow the DBA to take a peek into the internal workings of SQL Server at both the server and database levels. Using DMVs and DMFs, the DBA can better monitor the health of SQL Server, better tune SQL Server, and troubleshoot many kinds of problems. In many cases, they replace the need to use system tables and other obscure methods to find out what is happening inside SQL Server. And in many other cases, they provide new insights into SQL Server internals that have never been available before to DBAs.

Data Access Technologies Road Map
Prash Shirolkar
Learn about the past, present, and future of the Microsoft data access technologies. (8 printed pages). This article describes the past, present, and future of Microsoft data access technologies, including DB-Library, ESQL, DAO, Microsoft® Data Access Components (MDAC) (including ODBC, ADO, and OLE DB), ADO.NET, and SQL Native Client. This article identifies which technologies are being enhanced, and which technologies and components are being deprecated or excluded from future releases.

Queries in ADO.NET vNext
Murali
There's been a lot of interest in the ADO.NET CTP that we posted a few days back, and lots of questions about the internal details. I wanted to briefly describe how we handle queries in the ADO.NET CTP - and hopefully address some of your questions in this area.

Entity Mapping in ADO.NET vNext
Atul Adya
My name is Atul Adya and I am a software architect in the ADO.NET team. After working on persistent object stores, object caching, distributed file systems, and diagnostics in wireless networking, I have been spending time on a very important problem faced by programmers - reshaping/transformation/mapping of data from one data model to another.

LOB Performance in SqlDataReader
Alazela
I've been answering a few questions here and there about performance for pulling LOB data out of a SqlDataReader and figured a discussion of what's going on behind the scenes may be useful. This analysis is based primarily on the number of copies and movements of data, as well as a bit of code path inspection. Since this discussion is a bit in depth, here's the quick summary of my conclusions regarding performance for LOBs on TDS connection readers, for those who'd rather not worry too much about the details.

Entity Data Model 101: Part 1
Mike Dodaro
Most developers are familiar with the Object/Relational Mapping (ORM) problem: databases use the abstraction of rows in tables, but application programs use the abstraction of classes and objects. Existing ORM frameworks tend to address this mismatch by allowing programming classes to be annotated in order to relate them to the database.

Implicit data-type conversions in queries
Decipherinfosys
Beware of the implicit data type conversions that can occur in the queries. If you are not careful, this can lead to performance issues. Consider this for an example:

Importing DTS packages in SQL Server 2000
Decipherinfosys
In SQL Server 2000, if you have a requirement to copy/transfer multiple DTS packages from one instance to the other, doing it manually becomes cumbersome. There are utilities in the market that do that for you but what if you have to make this import a part of your install? If you have such a requirement, then you can save your DTS packages as files and then write up a simple VB Script and call it through cscript to load up the packages. You can put this process into your install shield code to give a better end user experience.

How can I update the contents of a text/ntext or varchar(max) data-type column in SQL Server?
decipherinfosys.com
Script applies to: MS SQL Server Versions: 2000, 2005. Problem Description : Sometimes there is a need to store large data set like a big xml file, resumes, book reviews etc. in the database. Since we store the data, occasionally we may have to update it as well. MS SQL Server has provided TEXT data type to store such large contents in the table. In the following example, we will show how we can manipulate such columns. We will also demonstrate how we can perform similar string manipulation for columns with VARCHAR(MAX) data type introduced in MS SQL Server 2005.

Prevent users from reconnecting in SQL Server
Tony Rogerson
The big problem with have with SQL Server of old is that its been difficult to kick people out and keep them kicked out; even using the "Single User Mode" stuff its difficult because often somebody gets before you can take control of the database.

SQL Server 2005: View all permissions (2) - Explode the roles!
Jamie Thomson
Two days ago I posted a blog entry here that showed how the following SQL statement:

Data Access API of the Day, Part I
Mike Pizzo
Why does it seem like Microsoft is coming up with a new Data Access API every time you turn around? First there was DbLib, then ODBC, then DAO, RDO, ODBCDirect, OLEDB, ADO, ADO.NET -- When is Microsoft going to run out of letters? And now what's this LINQ thing? And what about these "Entities" someone mentioned the other day? And who is the person writing this BLOG?

Data Access API of the Day Part II - Componentizing Data Access
Mike Pizzo
Welcome to Part II of Data Access API of the Day; a brief history of the evolution of Microsoft's Data Access APIs.

Data Access API of the Day Part III - Disconnected Programming in a Managed Environment
Mike Pizzo
Welcome to Part III of DataAccess API of the Day; a brief history of the evolution of Microsoft's Data Access APIs.

Data Access API of the Day - Part IV (Programming to the Conceptual Model…)
Mike Pizzo
Welcome to Part IV of Data Access API of the Day; a brief history of the evolution of Microsoft's Data Access APIs.

rsWindowsIntegratedSecurityDisabled error when running Reporting Services report in SharePoint integrated mode
Russell Christopher
I published a report to SPS, using a custom data source which simply pointed to the database in question and used Integrated Security. When I ran the report, the following error was thrown:

SQL Server 2005 Integration Services - Part 42 - XML Task continued
Marcin Policht
In the previous article of our series dedicated to SQL Server 2005 Integration Services, we started discussing various types of actions that can be performed using XML Control Flow task, covering its Validate and XSLT options. We will continue this subject by focusing our attention on the next operation type called XPATH. As mentioned earlier, we encourage you to explore sources of XML-specific information for more in-depth analysis of these topics (we will be referencing some of them throughout our presentation).

Introduction to ADO - The Command Object
Andy Warren
The third article in a four part series, this week Andy shows how to use the command object to work with stored procedure parameters.

Ten SQL Server Functions That You Hardly Use But Should
SQL
Below are 10 SQL Server functions that are hardly used but should be used a lot more

Help in getting nested triggers from your database
Mladen Prajdic
If you don't know what nested trigers are read here. Triggers are nested when a trigger performs an action that initiates another trigger. So if you have 2 table where each has an after update trigger like:

Analysis Services and "Double Hop" Authentication
Ted Malone
Working with Microsoft® SQL Server 2005 Analysis Services can be a challenge in a secure environment. For whatever reason, Microsoft® has chosen to not fully integrate Analysis Services and Kerberos out of the box, which means that administrators of Analysis Services must do a bit of work to get it to play nice when there are intermediate hosts, such as Windows SharePoint Portal Server or Internet Information Server involved.

Installing and Configuring the SSRS Add-in for SharePoint Technologies
Ted Malone
As I mentioned in a previous post, with Service Pack 2 for SQL Server 2005, you gain the capability to integrate SSRS and SharePoint. (See this post for more information)

Integrating SharePoint 2007 with SQL Server Reporting Services
Ted Malone
Starting with CTP2 (which is now publically available here) of SQL Server 2005 SP2, Microsoft supports integrating SQL Server Reporting Services (SSRS) with SharePoint Portal Server. There are a number of benefits that SSRS users and developers get with this integration including:

SQL 2005 SP2 VARDECIMAL Data Type
Ted Malone
As you might have heard, one of the things that Microsoft has added to SP2 for SQL 2005 is the "VarDecimal" data type. Now, I don't know about you, but when I hear about a new data type, I expect that I'll be able to use it just like any other data type, ala

Best Practices: Writing SQL Syntax Queries for Relevant Results in Enterprise Search
Dmitriy Meyerzon, Jo-Anne West
Learn how to write SQL syntax queries to return the most relevant results for Enterprise Search in Microsoft Office SharePoint Server 2007. (4 printed pages)

How to use custom assemblies or embedded code in Reporting Services
Sandy Yakob
Welcome back! I am Sandy Yakob with the Microsoft SQL Server Content team. I am your hostess for the SQL Server Support Voice columns. A quick note about me: I have been with Microsoft for 14 years. For the past three years, I have been working with the SQL Server Content team.

How to schedule a database backup operation by using SQL Server Management Studio in SQL Server 2005
Microsoft
This article describes how to schedule a database backup operation by using SQL Server Management Studio in Microsoft SQL Server 2005.

Entity Data Model 101 - Part 2
Mike Dodaro
In part one of this article we looked at declarations of entity and association types in conceptual schema definition language (CSDL). Now we have to be specific about where instances of those types are stored, which we refer to as "scope". First, we must distinguish entity and association types from instances of those types. Instances of entity and association types exist as members of association sets, that is, EntityType and AssociationType define scope using EntitySet and AssociationSet declarations. Second, schema syntax specifies EntitySet and AssociationSet declarations inside an EntityContainer declaration. An EntityContainer collects the sets which should be logically grouped into a single database.

We identify a dozen "next big things" in Business Intelligence that did not happen
Nigel Pendse and Carsten Bange
Vendors regularly announce new products, or features in existing products, as 'breakthrough' achievements in product functionality that are supposed to fundamentally change the way business intelligence software works. 'The next big thing' is said to make the usage of BI tools easier, provide new analysis or visualization possibilities or extend the possibilities to 'the next level'. But many of those announcements never live up to the expectations that are hyped up by overly-bold marketing statements. Sometimes it is the technology that does not deliver, but even when it does, it may be simply a solution looking for a problem.

Lose those single quotes!
Chris Webb
Although they're no longer necessary in AS2005 MDX and I no longer bother with them, I've seen a lot of examples of people still using single quotes in MDX in calculated member and set definitions. Up until recently I thought this was just a matter of taste and that it did no harm to leave them in, but last week I realised that if you do leave them in it makes debugging MDX queries much harder. To illustrate, run the following two MDX queries:

Getting SSIS Packages To Run On A 64 Bit Box
Sutha Thiru
We had some serious issues getting the SSIS packages to run on a 64 Bit platform which connects to Oracle database.

Should Clustered services be set to 'manual' or 'automatic'?
Clustering
The question goes something like this: My cluster is installed and running SQL/Exchange nicely but I noticed that all the services for SQL/Exchange are set to start manaully. Should I set the services to automatic instead?

Installing a new SQL instance into an existing cluster on a new Node
Clustering
We added a node to one of our clusters. We confirmed that the hardware, firmware, bios, OS, and installed programs were exactly alike. The new machine joined the cluster like a champ, no issues.

Having problems installing SQL SP4 on a SQL 2000 Cluster?
Clustering
Verify that there are no dependencies or extra resources other than those created by the SQL Server setup on any of the SQL Server cluster resources. Resources such as file

Surviving the Windows Server 2003 Cluster Bomb - Review
Rodney R. Fournier
The following is an article recently published about clustering and recovering from a failure:

Surviving the Windows Server 2003 Cluster Bomb
Jeffrey R. Shapiro
Here's a nightmare scenario: You bring down your seemingly infallible Windows Server 2003 cluster nodes for maintenance and boom, the cluster explodes into a million pieces. Do you leave the country, commit Seppuku, check for one way passage on an Alaskan crab boat, or call in the medics for urgent resuscitation? No need to go into exile; just save this two-part article for the day when you hear that eerie whistle of a cluster bomb about to land.

Surviving the Windows Server 2003 Cluster Bomb, Part II
Jeffrey R. Shapiro
The nightmare scenario is now playing itself out. You have pinched yourself a few times and still you do not wake from the horror. The cluster service is dead. Exchange 2003 and SQL Server are no longer operational. In a few hours, your users are going to be logging into work. Right now they cannot get their email and the company web users cannot place orders or track their shipments. Are you getting ready to change careers, or are you up to the huge task of rebuilding a totally destroyed cluster?

DAC (Dedicated Admin Connection) in SQL Server 2005
Decipherinfosys
In versions prior to SQL Server 2005, if the server had maxed out on the resources, had a spinloop or maybe had corruption, it was impossible to get access to the server via remote desktop, Enterprise Manager, Query Analyzer, osql, third party tools etc. As a result, the last resort that most of the database developers/DBAs adopted was "REBOOT" :-) But that is not the holy grail. At times, SQL Server was able to do a checkpoint process and shutdown gracefully but at other instances, due to to a shutdown and subsequent start-up and recovery phase, corruption or AVs (Access Violations) could have resulted not to mention that the recovery process could be a long one depending upon the amount of work. In order to remedy this situation, in SQL Server 2005, one has a Dedicated Admin Connection option. This option (when configured) allows the developer/DBA to connect to the instance and issue T-SQL commands to troubleshoot the issue - maybe killing the offending process as a last resort.

ET Versus SELECT (Or, Who Really Cares Anyway)
Brett Kaiser
EDIT: As Tara points out: Vyas did this test quite some time ago: http://vyaskn.tripod.com/differences_between_set_and_select.htm Either I never read it, or I forgot I read it. Well hopefully I pulled some different points together differently here than Vyas did, and at the very least, I hope I made my feeling clear about a program that has to loop over 2 million times. Thanks for the heads up Tara...

Mastering Enterprise BI: Time Intelligence Pt. I
William Pearson
As I stated in my article Introduction to SQL Server 2000 Analysis Services: Handling Time Dimensions, it is a rare thing to encounter an instance of an OLAP cube that does not require a Time dimension. Throughout years of business intelligence consulting, I have only witnessed this scenario a handful of times within a production environment. Although there often seems to be no shortage of people to argue any side of any statement, few of us would disagree that the measurement of activity over time - and, hence, the Time dimension that supports this capability - is important to both analysis and operational management in general.

Beginning SQL Server Reporting Services Part 4
Steve Joubert
This is the last installment of a four part article on SQL Server Reporting Services:

SQL Stored Procedure to Log Updates, Independent of Database Structure
Keren Ramot
How many DBAs need a solution to track those changes made for multiple systems? Auditing is becoming more and more prevalent in all systems and having a good solution can really make your DBA job interesting. New author Keren Ramot brings us his technique that works indepedent of the database structure.

Using BACKUP and RESTORE in SQL Server -- Full Backups
graz
This article covers the basics of full backup backups and restores in SQL Server. The examples are from SQL Server 2005 however it applies to SQL Server 2000 and SQL Server 2005. This is a very basic article covering full database backups, database restores and the simple and full recovery models.

Module 1 notes for 2780 - Maintaining a SQL Server 2005 Installation
Chris Randall
The purpose of this post is to share additional comments and links to external references for Microsoft Course 2780. I'm teaching it this week and wanted to capture some of my tangential references as I mention them to the group.

Module 2 notes for 2780 - Maintaining a SQL Server 2000 Server Installation
Chris Randall
On to the next module of course 2780. Module 2 is entitled "Managing Databases and Files", and discusses the physical implementation of databases.

T-SQL vs CLR: SQL Server 2005 group multiplication
Mladen Prajdic
Ever missed a Prod(columnName) function that works like a sum but it multiplies the column values?

Multiple-Valued Parameters
Peter DeBetta
So I was doing some research on which is the best way to pass multiple-valued parameters into a stored procedure or user-defined function when I found some interesting results. I had always used a string-based user-defined function to parse a delimited list of values and I knew I could use XML to do the same thing, yet I had never compared the two side-by-side to see which is a better choice.

Modifying execution context in SQL Server 2005
Tim Chapman
Execution context is the identity for which SQL Server permits actions to occur by a user. For example, typically when you log in to SQL Server, the login account is checked for certain permissions. Some of these permissions include the ability to log in to the server, the ability for the account to access the database, and the ability to perform actions in that database.

Make sure your next application can get to the data it needs with connection strings
Edmond Woychowsky
Too often the coding of connection strings has been something application developers have avoided. This brief tutorial answers the question of exactly what it is developers need to code in order to get access to data using connection strings.

XPSMTP.DLL - SQL Server SMTP Mail XP
Brian Moran
XPSMTP provides a SMTP based SQL Mail solution for sending MIME based email over SMTP, implemented as an Extended Stored Procedure.

[В начало]

ФОРУМ SQL.RU

Самые популярные темы недели

Вышел русский SQL Server 2005!!!
Как правильно разрулить concurrency
Размещение базы данных на физически разных серверах
порядок записей при экспорте
Знак вопроса в имени процедуры...
Рекурсивный запрос, СТЕ и прочая фигня :(
Переезд на Win x64
Как сделать ограничение на значения в таблице?
как перехватить и подправить SQL-код(это возможно? или нет)
восстановить базу 1С кто может помочь? (+)
Защита базы MS SQL
Не отрабатывает BULK INSERT
от новичка: КАК СДЕЛАТЬ чобы хранимка ВОЗВРАШАЛА КОЛ-ВО вставленных ЗАПИСЕЙ?
Ошибка SQL. 08S01. Общая ошибка сети.
2005 cross join + where тормозит по сравнению с join
Эх, заменить бы Query Analyzer..... (мечты)
Табличная переменная или n-запросов ?
Разговор на кухне / Зависания MS SQL
Возможно ли хранить значения поля в сжатом виде?
Может ли самовольно SQL Server поднять последний бэкап при отключении питания сервера

[В начало]

Вопросы остались без ответа

SQL Server 2005 SE и EE (Russian version) сертифицированы ФСТЭК
Миграция SQL Serve 2000, 2005 в другой домен
CONTAINSTABLE повторы при результатах поиска.
Переименование полей и PIVOT
Открыта регистрация на первую встречу MCP клуба в Нижнем Новгороде
Лучшие презентации с Платформы 2007
Прервать выполнение package SSIS
Получить description ошибки компонента Derive Column в Error Output
Вопрос
MS SQL 2000 Dev. Ed. без сети
Конфликт записи. Помогите!!!
Как пользоваться xp_smtpsend?
Дешифрация триггера
MS SSIS. Создание своих DataFlow компонентов. Нужен совет.
Отслеживание модификации метаданных в MSSQL2k.
помогите пожалуйста найти книгу,
Кто-нибудь делал репликацию на КПК?

[В начало]

#345<<  #346  >>#347
Rambler's Top100 Рейтинг@Mail.ru  Administrator: Обратная связь 
Copyright: SQL.Ru 2000-2013