MS SQL Server

  Все выпуски  

MS SQL Server - дело тонкое...


Информационный Канал Subscribe.Ru

#265<<  #266

СОДЕРЖАНИЕ

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

СТАТЬИ

Секционированные таблицы и индексы SQL Server 2005 (продолжение)

По материалам статьи Kimberly L. Tripp: SQL Server 2005. Partitioned Tables and Indexes
Перевод Алексея Сафонова

Секционированные Таблицы в SQL Server 2005

В то время как усовершенствования SQL Server 7.0 и SQL Server 2000 значительно улучшили производительность секционированных представлений, они не упрощали их администрирования, разработки или развертывания. Все таблицы, на основе которых строилось секционированное представление, создавались и управлялись по отдельности. Разработка приложений становилась проще за счет того, что разработчику уже не приходилось обращаться непосредственно к базовым таблицам, однако администрирование было затруднено, поскольку приходилось управлять каждой отдельной таблицей, входящей в состав секционированного представления, и его ограничениями целостности. Из-за сложностей управления, разделение таблиц зачастую использовалось только тогда, когда данные нужно было "заархивировать" или загрузить. Операции добавления/удаления из доступной только на чтение таблицы (read-only) были слишком дорогостоящими - они занимали время, место в журнале транзакций, и часто создавали блокировки.
Кроме того, поскольку предшествующие стратегии секционирования требовали, чтобы разработчик создавал индивидуальные таблицы и индексы и затем объединял их посредством представления, оптимизатору запросов требовалось проверить достоверность и определить планы исполнения для каждой секции (поскольку индексы могли измениться). Поэтому время оптимизации запроса в SQL Server 2000 зачастую линейно возрастает с увеличением количества секций, входящих в представление, чего не происходит в SQL Server 2005, где каждая секция по определению имеет одни и те же индексы.
К примеру, разберем случай, когда текущий месяц OLTP-данных (Online Transaction Processing), должен быть перемещен в конце месяца в OLAP-таблицу. Самая последняя таблица (предназначенная для запросов read-only) - это одиночная таблица с одним кластерным и двумя некластерными индексами; массовая загрузка (bulk load) 1GB данных (в уже проиндексированную и действующую таблицу) создает блокировки с текущими пользователями помимо того, что таблица и/или индексы становятся фрагментированным и/или блокированными. Кроме того, процесс загрузки займет существенное время, поскольку таблица и индексы должны обслуживаться по мере поступления каждой строки. Есть способы, позволяющие ускорить bulk load, однако, они могут непосредственно затронуть всех остальных пользователей, таким образом, принося в жертву возможность параллельной работы ради скорости исполнения. Если бы эти данные добавлялись в недавно созданную (пустую) таблицу, то вначале могла бы произойти загрузка данных (в т.ч. параллельная загрузка), а затем построение индексов (возможно, также параллельное). Зачастую вы смогли бы достигать 10-ти кратного (или еще большего) преимущества от использования данного подхода. Фактически, загружая в неиндексированную таблицу (heap - кучу), Вы можете воспользоваться преимуществом многопроцессорной системы, загружая параллельно многочисленные файлы данных или многочисленные "фрагменты" одного и того же файла (заданные начальными и конечными строками). В любом из выпусков SQL Server секционирование позволяет Вам управлять таблицами на более высоком уровне, не обязывая Вас хранить все данные в одном месте - с сильно фрагментированными индексами и отсутствием реального управления любым аспектом поведения на более высоком уровне. Функциональная стратегия секционирования могла быть достигнута в предыдущих выпусках, путем динамического создания и удаления таблиц и модифицирования UNION-представлений. Однако в SQL Server 2005 решение более изящно: Вы можете просто "включить" ("switch in") недавно-наполненную секцию(и), как дополнительную секцию к существующей схеме секционирования, либо "выключить" ("switch out") любую старую секцию(и). Процесс "включения/выключения" секций занимает незначительное время, и может быть даже ускорен за счет применения параллельной загрузки данных (bulk loading) и параллельного создания индексов. Что еще более важно, секция управляется из-за пределов таблицы, таким образом, во время добавления новой секции на действующую таблицу не оказывается никакого воздействия. В результате, добавление секции происходит за считанные секунды.

Еще лучше обстоят дела в случае, если данные необходимо удалить. Если база данных нуждается только в "sliding window" ("скользящее окно") наборе данных, то, когда новые данные будут готовы к переселению (например, в текущий месяц), тогда самые старые данные (например, данные того же месяца за предыдущий год) смогут быть удалены. В этом случае, Вы, вероятно, добьетесь улучшения производительности от использования секционирования на несколько порядков. Поскольку это может показаться неправдоподобным, давайте рассмотрим имеющиеся тут отличия.
Когда все данные находится в одной единственной таблице, удаление 1GB данных (самых старых данных) требует построчной манипуляции данными и связанными с ними индексами. Процесс удаления данных приводит к существенной log-активности и не позволяет усекать журнал транзакций до конца удаления (помните, что удаление - это отдельная auto-commit транзакция; тем не менее, Вы можете управлять размером транзакции, выполняя множественное удаление в одной транзакции там, где только возможно), а также требуется [потенциально очень] больший журнал транзакций. Чтобы удалить такое же количество данных, удаляя определенную секцию из секционированной таблицы, все, что надо сделать - это "выключить" секцию (что является операцией над метаданными), и затем удалить или усечь автономную таблицу.

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

На Рисунке 2 представлена файловая группа, состоящая из трех файлов. В ней располагаются две таблицы: Orders и OrderDetails. Когда данные таблиц размещаются в файловой группе, SQL Server пропорционально заполняет файлы файловой группы, захватывая в них необходимое дисковое пространство для своих объектов экстентами (кусками по 64 Kb, что равно 8 страницам данных по 8 Kb). В момент создания таблиц Orders и OrderDetails файловая группа будет пуста. Когда приходит новый заказ, в таблице Orders создается соответствующая запись, и по одной записи в таблице OrderDetails для каждого заказанного товара. SQL Server выделяет один экстент для таблицы Orders в File1, и затем еще один экстент для таблицы OrderDetails в File2. По всей вероятности, таблица OrderDetails будет расти быстрее, чем таблица Orders, и поэтому следующие несколько экстентов будут выделены для нее: следующий экстент для таблицы OrderDetails будет располагаться в файле File3. На приведенном ниже рисунке продемонстрировано размещение экстентов данных таблиц Orders и OrderDetails в файловой группе.

Рисунок 2. Пропорциональное заполнение файлов

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

В SQL Server 2005 секционированная таблица может быть спроектирована (используя "функции" и "схемы") таким образом, чтобы строки, имеющие одинаковый ключ секционирования, размещались бы в строго указанном месте. Функция секционирования определяет границы секций и то, в какую секцию должно быть занесено первое значение. В случае LEFT-функции, первое значение будет являться верхней границей в первой секции. В случае RIGHT-функции, первое значение будет являться нижней границей во второй секции. Мы еще рассмотрим подробно особенности функций секционирования дальше в этой статье. Как только функция определена, может быть создана схема секционирования для того, чтобы определить физическое расположение секций в базе данных. Если несколько таблиц используют одну и ту же функцию (но не обязательно одну и ту же схему), строки, имеющие один и тот же ключ секционирования, будут располагаться на диске вместе. Этот принцип называется выравниванием. Выравнивая строки нескольких таблиц по ключу секционирования, SQL Server может (если оптимизатор запросов предпочтет) работать только с необходимыми группами данных (в каждой из таблиц). Для того чтобы выровняться, две секционированные таблицы или два индекса должны иметь некоторое соответствие между их соответствующими секциями. Они должны использовать "эквивалентные" функции секционирования и быть связаны по столбцам секционирования. Две функции секционирования могут использоваться для выравнивания данных, если:

  • обе функции секций используют одинаковое количество аргументов и секций.

  • ключ секционирования, используемый в каждой функции, имеет одинаковый тип (включая длину, точность и масштаб (если допускается), и collation (если допускается)).

  • граничные значения эквивалентны (включая критерии границы LEFT/RIGHT).

Внимание! Даже если две функции секционирования рассчитаны на выравнивание данных, ваши таблицы могут остаться не выровненными из-за не выровненных индексов, если они не секционированы по тем же столбцам, что и таблицы.

Локализация (Collocation) - более строгая форма выравнивания, когда два выровненных объекта объединены с предикатом equi-объединения (inner), где equi-объединение производится по столбцу секционирования. Это становится важным в контексте запроса, подзапроса или другой подобной конструкции, где могут встретиться предикаты equi-объединения. Локализация эффективна, поскольку запросы, объединяющие таблицы по столбцам секционирования, выполняются тогда значительно быстрее. Возьмем, например, таблицы Orders и OrderDetails, описанные выше. Вместо того чтобы заполнять файлы пропорционально, Вы можете создать схему секционирования, которая разнесет БД по трем файловым группам. Вы определяете таблицы Orders и OrderDetails таким образом, чтобы они использовали одну и ту же схему. Связанные данные (по ключу секционирования) будут помещены в один и тот же файла, таким образом, изолируя необходимые для объединения данные. Когда связанные строки из нескольких таблиц секционированы по одному и тому же принципу, SQL Server может объединять секции, не имея необходимости рыться во всей таблице или нескольких секциях (если к таблицам применялись разных функций секционирования) для сопоставления строк. В этом случае, объекты не просто выровнены, они, как говорится, являются выровненным хранилищем, поскольку связанные данные располагаются в одних и тех же файлах.

Следующий рисунок демонстрирует, как два объекта могут использовать одну и ту же схему секционирования, когда все строки данных с одинаковым ключом секционирования окажутся в одной и той же файловой группе. Когда связанные данные выровнены, SQL Server 2005 может эффективно работать с большими наборами данных параллельно. Все данные о продажах за январь (как для Orders, так и для OrderDetails) будут располагаться в первой файловой группе, данные за февраль - во второй файловой группе и т.д.

Рисунок 3. Таблицы выровненных хранилищ

SQL Server поддерживает секционирование, основанное на диапазонах. Таблицы, так же как и индексы могут использовать одну и ту же схему для лучшего выравнивания. Хорошее проектирование способно значительно улучшить производительность системы, но что, если использование данных все время меняется? Что, если потребуется дополнительная секция? Простота администрирования при добавлении и удалении секций, а также управления секциями извне секционированной таблицы была главной целью при разработке SQL Server 2005.
SQL Server 2005 упростил секционирование для администрирования, разработки и развертывания, а также для понимания. Вот некоторые из усовершенствований в производительности и управляемости:

  • Упрощается разработка и реализация больших таблиц, которые должны быть разделены для улучшения производительности.

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

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

  • Архивирование и/или удаление части секционированной таблицы минимально воздействует на оставшуюся часть таблицы.

  • Поддерживается "переключение" секций в/из секционированной таблицы.

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

  • Улучшается производительность всех секций.

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

[В начало]

Определения и терминология

Чтобы создавать секции в SQL Server 2005, Вам необходимо познакомиться с несколькими новыми понятиями, терминами и синтаксисом. В предыдущих выпусках SQL Server таблица была всегда физическим и логическим понятием, теперь в SQL Server 2005 для Секционированных Таблиц и Индексов у вас есть на выбор несколько вариантов того, как и где хранить таблицу. В SQL Server 2005, таблицы и индексы могут быть созданы с точно таким же синтаксисом, как и в предыдущих релизах - как простая табличная структура, помещенная в DEFAULT filegroup или определенную пользователем файловую группу (user-defined filegroup). Кроме того, в SQL Server 2005 таблица и индексы также могут быть основаны на схеме секционирования. Схема секционирования отобразит объект на одну или возможно несколько файловых групп. Для определения того, какие данные где размещать, схема секционирования использует функцию секционирования. Функция секционирования определяет алгоритм, используемый для маршрутизации строк, а схема связывает секции с их соответствующим физическим местоположением (т.е. файловой группой). Другими словами, таблица по-прежнему является логическим понятием, но её физическое расположение на диске может радикально отличаться от более ранних выпусков SQL Server; таблица может иметь схему.

[В начало]

Диапазонные секции

Диапазонные секции - это табличные секции, описанные определенными и настраиваемыми диапазонами данных. Границы диапазонных секций выбираются разработчиком, и могут быть изменены, если изменится модель использования данных. Как правило, эти диапазоны основываются на дате или на упорядоченных группировках данных.

Основное применение диапазонных секций - архивирование данных, поддержка принятия решений (когда зачастую необходимы только определенные диапазоны данных, например, только заданный месяц или квартал), и объединение OLTP и DSS (Decision Support System - система поддержки принятия решений), где использование данных меняется в течение всего жизненного цикла записи базы данных. Самое большое преимущество новой технологии (особенно для архивирования и обслуживания) состоит в способности манипулировать крайне специфичными диапазонами данных. Диапазонные секции архивируют старые данные и загружают новые чрезвычайно быстро. Секции диапазона лучше всего подходят для ситуации, когда доступ к данным осуществляется для поддержки принятия решений и основывается на больших диапазонах данных. В этом случае Вы заботитесь о том, где конкретно расположены данные, так чтобы обращение велось только к подходящим секциям. Когда появляются новые бизнес - данные, Вы естественно захотите добавлять их - легко и быстро.
Создание диапазонных секций несколько усложнено, поскольку вам потребуется определить граничные условия для каждой секции. Еще вы должны будете создать схему, отображающую каждую секцию на файловую(ые) группу(ы). Тем не менее, они часто имеют совместимый шаблон, так что, будучи однажды определены, они, вероятно, будут легки в программной поддержке (см. рис. 4).

Рисунок 4: Диапазонная секционированная таблица - 12 Секций.

[В начало]

Определение ключа секционирования

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

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

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

[В начало]

Использование статистики оптимизатором запросов Microsoft SQL Server 2005

По материалам статьи Eric N. Hanso: Statistics Used by the Query Optimizer in Microsoft SQL Server 2005

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

Статистика в SQL Server 2005

Microsoft SQL Server 2005 собирает статистику для отдельных столбцов или для набора столбцов. Статистика используется оптимизатором запросов для оценки селективности выражений, определяя, таким образом, объём промежуточных и конечных выборок. Хорошие статистические данные позволяют оптимизатору точно оценивать стоимость разных планов исполнения запроса, и выбирать наиболее хороший план. Вся информация об одном объекте статистики хранится в нескольких столбцах одной записи таблицы sysindexes, и в большом бинарном объекте статистики statblob, хранящемся в одной из внутренних таблиц. Кроме того, информация о статистике может быть найдена в новых представлениях метаданных sys.stats и sys.indexes.

[В начало]

Обзор механизмов сбора статистики

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

  • implicitly create and update statistics - фоновое создание и обновление статистики с заданной по умолчанию частотой обновления (в командах SELECT, INSERT, DELETE и UPDATE, использование столбца в условии WHERE или в JOIN приводит к созданию или обновлению статистики, если это необходимо, и при условии, что включено автоматическое обновление).

  • manually create and update statistics - ручное управление статистикой, с заданной частотой обновления и удаления (CREATE STATISTICS, UPDATE STATISTICS, DROP STATISTICS, CREATE INDEX, DROP INDEX).

  • manually create statistics in bulk - ручное создание статистики для всех столбцов во всех таблицах базы данных (sp_createstats).

  • manually update all existing statistics - ручное обновление статистики во всей базе данных (sp_updatestats).

  • list statistics objects - просмотр существующих объектов статистики таблицы или базы данных (sp_helpstats, представления каталога sys.stats, sys.stats_columns)

  • display descriptive information about statistics objects - просмотр описаний объектов статистики (DBCC SHOW_STATISTICS)

  • enable and disable automatic creation and update of statistics - включение/выключение автоматического создания и обновления статистики для всей базы данных или для определенной таблицы или объекта статистики (опции ALTER DATABASE: AUTO_CREATE_STATISTICS и AUTO_UPDATE_STATISTICS; sp_autostats; и опции NORECOMPUTE: CREATE STATISTICS и UPDATE STATISTICS)

  • enable and disable asynchronous automatic update of statistics - включение/выключение автоматического, асинхронного обновления статистики (ALTER DATABASE, опция AUTO_UPDATE_STATISTICS_ASYNC)

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

[В начало]

Новшества в статистике SQL Server 2005

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

  • String summary statistics: частота распределения подстрок при анализе символьных полей. Помогает оптимизатору лучше оценивать селективность условий с оператором LIKE.

  • Asynchronous auto update statistics: асинхронное, автоматическое обновление статистики, в операторе ALTER DATABASE опция AUTO_UPDATE_STATISTICS_ASYNC появилась в SQL Server 2005 и отключена по умолчанию. Когда опция задействуется, SQL Server 2005 автоматически обновляет статистику в фоновом режиме. При этом запрос, который привёл к обновлению статистики, ничего не блокирует, и используется уже накопленная статистика. Всё это позволяет обеспечить большую предсказуемость времени отклика запроса для некоторых типов рабочей нагрузки.

  • Computed column statistics: статистика по вычисляемым полям может собираться вручную или автоматически (это было частично реализовано в SQL Server 2000, но было не документировано).

  • Large object support: поддержка больших объектов, таких как столбцы типов: ntext, text и image, а так же новых типов данных: nvarchar(max), varchar(max) и varbinary(max), которые теперь также могут быть определены как столбцы, по которым собирается статистика.

  • Improved statistics loading framework: улучшенная статистика загруженных структуру позволяет оптимизатору лучше, чем в SQL Server 2000, получать статистику внутренних механизмов, позволяя охватить все относящиеся к статистике аспекты, за счёт чего повышается качество результата и соответственно оптимизации и производительности.

  • Increased ability to automatically create statistics on computed columns: за счёт появления возможности автоматического создания статистики по вычисляемым полям, выполняемого в SQL Server 2005 при необходимости и при условии, что запрос содержит эквивалент выражения вычисляемого поля, также можно получить существенный выигрыш в качестве такой статистики.

  • Minimum sample size: минимальный размер выборки установлен в 8 мегабайт при исчислении данных, или он приравнивается к размеру таблицы, если она меньше этого размера.

  • Increased limit on number of statistics: увеличено предельное число статистик, т.е. число объектов статистики, столбцов для одной таблицы, теперь оно равно 2000, и ещё 249 индексных статистик могут быть добавлены, делая общее число объектов статистических данных на таблицу равным 2249.

  • Enhanced DBCC SHOW_STATISTICS output: Расширение возможностей DBCC SHOW_STATISTICS позволяет теперь отображать имена объектов статистики, что позволяет избегать двусмысленности.

  • Statistics auto update is now based on column modification counters: автоматическое обновление статистики теперь основано на счётчике column modification counters. В SQL Server 2000, обновление статистики определялось по номеру изменений строки. Теперь, изменения отслеживаются на уровне столбца, и автоматическое обновление статистики можно предотвратить для тех столбцов, для которых не было зафиксировано достаточно изменений.

  • Statistics on internal tables: статистика по внутренним таблицам собирается для таблиц, перечисленных в sys.internal_tables, включая XML и полнотекстовые индексы, очереди брокера сервисов и запросы к таблицам оповещений.

  • Single rowset output for DBCC SHOW_STATISTICS: единый отчёт по набору строк для DBCC SHOW_STATISTICS предоставляет возможность вывести единый заголовок, вектор плотности и гистограмму для набора строк. Это позволяет упростить разработку автоматов обработки результатов исполнения DBCC SHOW_STATISTICS.

  • Statistics on up-to 32 columns: с 16 до 32 было увеличено число столбцов в объекте статистики.

  • Statistics on partitioned tables: статистика по секциям таблиц теперь поддерживается и для секционированных таблиц, появившихся в SQL Server 2005. Гистограммы поддерживаются потаблично (не посекционно).

  • Parallel statistics gathering for fullscan: для статистики, собранной во время полного сканирования, создание одного объекта статистики может распараллеливаться как для секционированных, так и для обычных таблиц.

  • Improved recompiles and statistics creation in case of missing statistics: стали лучше учитываться такие моменты, как перекомпиляция и создание статистики в случае её отсутствия, в режиме автоматического создания или при неудачах сбора статистики. При последующем применении плана исполнения, созданного без статистики, статистика создаётся автоматически, запрос исполняется, и план перекомпилируется. Состояние отсутствия статистики не хранится. Для получения дополнительной информации, обратитесь к статье: Batch Compilation, Recompilation, and Plan Caching Issues in SQL Server 2005.

  • Improved recompilation logic and statistics update for empty tables: улучшена логика рекомпиляции и обновления статистики для пустых таблиц. Изменение от 0 до > 0 строк в таблице приводит к рекомпиляции запроса и обновлению статистики. Для получения дополнительной информации, обратитесь к статье: Batch Compilation, Recompilation, and Plan Caching Issues in SQL Server 2005.

  • Clearer and more consistent display of histograms: стали более понятными и менее противоречивыми показания гистограмм. Внесены улучшения в DBCC SHOW_STATISTICS, из-за которых гистограммы теперь всегда предварительно масштабируются, а уже потом сохраняются в каталогах.

  • Inferred date correlation constraints: добавлены ограничения дедуктивной корреляции дат, с которыми, через опцию базы данных DATE_CORRELATION_OPTIMIZATION, можно заставить SQL Server учитывать информацию о корреляции полей типа datetime между парами таблиц, связанных внешним ключом. Эта информация используется для того, чтобы иметь возможность определять для небольшого числа запросов подразумеваемые для них предикаты. Эта информация не используется непосредственно для оценки селективности или оценочной стоимости для оптимизатора, так что это не является статистикой в строгом смысле, но это она очень близка к статистике, являясь вспомогательной информацией, обычно помогающей получать лучший план запроса.

  • sp_updatestats: в SQL Server 2005 эта процедура обновляет только те статистические данные, которые требуют обновления, основываясь при этом на информации из rowmodctr в системном представлении sys.sysindexes, устраняя, таким образом, ненужные обновления для не изменяемых элементов. Для баз данных, у которых уровень совместимости установлен в 90 и выше, sp_updatestats использует для UPDATE STATISTICS установки соответствующие автоматическому режиму для любых индексов или статистик.

Также в новой версии есть и некоторые другие, менее значительные изменения в поведении механизмов сбора статистики. В частности, поле statblob в sys.sysindexes теперь всегда устанавливается в NULL, а сам statblob хранится в скрытой, внутренней таблице каталога.

[В начало]

Определения

В этой главе определяются термины, применяемые при описании статистики SQL Server 2005:

  • statblob: статистический Binary Large Object (BLOB), т.е. большой, бинарный статистический объект. Этот объект хранится во внутреннем представлении каталога sys.sysobjvalues.

  • String Summary: резюме строки - это такая форма статистики, которая описывает частоту распределения подстрок в поле записи. Используется для оценки селективности предикатов LIKE. Хранится в statblob для поля записи.

  • sysindexes: системное представление каталога sys.sysindexes, которое содержит информацию о таблицах и индексах.

  • Predicate: предикат - это условие, которое оценивается как истина или ложь. Предикаты используются в предложении WHERE или в JOIN запросов к базе данных.

  • Selectivity: селективность - это доля строк в получаемом предикатом наборе данных, которые удовлетворяют условию этого предиката. Также встречаются более сложные определения селективности, необходимые для оценки числа строк, вовлечённых в объединения, DISTINCT и другие операторы. Например, SQL Server 2005 оценивает селективность предиката "Sales.SalesOrderHeader.OrderID = 43659" в базе данных AdventureWorks как 1/31465 = 0.00003178.

  • Cardinality estimate: оценка числа элементов, позволяет определить объём результирующего набора. Например, если таблица T имеет 100000 строк, а запрос содержит предикат отбора: T.a = 10, и гистограмма показывает селективность T.a = 10 - 10 %, то оценка количества элементов в той доли строк T, которую нужно обработать запросом будет: 10 % * 100000, и равна 10000 строк.

  • LOB: большой объект, обычно имеет типы: image, text, ntext, varchar(max), nvarchar(max), varbinary(max).

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

[В начало]

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

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

Версионная эпидемия Visual Studio 2005
Поль Тюрро
C-sharp: Этот год обещает стать очень интересным для разработчиков программного обеспечения в связи с ожидающимся в начале ноября выходом Visual Studio 2005. На днях я посетовал на участь разработчиков ПО для Windows. Как уже отмечалось в статье "It's All..

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

Обмен данными между хранимыми процедурами с помощью временных таблиц. Преимущества и недостатки
Oleg Aksenov
MSSQLServer: Зачем это нужно. Простой пример: есть процедура, возвращающая набор данных по списку идентификаторов с дополнительными атрибутами (столбцами). Процедура одна (очень удобно), а вот список может формироваться по-разному...

О Windows Server 2003 SP1
Поль Тюрро
Выпуск Windows Server 2003 Service Pack 1 (SP1) во многих отношениях не менее значим для Windows 2003, чем выпуск Windows XP SP2 для XP...

XML Web-службы в Microsoft SQL Server 2005
Алексей Ширшов
MSSQLServer: Компания Microsoft делает все, чтобы превратить SQL Server в полноценный сервер приложений, который на сегодня не может считаться таковым без поддержки XML Web-служб. Можно сказать, что подобная поддержка присутствовала в SQL Server 2000...

Радикальное изменение планов Microsoft относительно Reporting Services
Брайан Моран
MSSQLServer: На прошедшем в Орландо (шт. Флорида) мероприятии Microsoft TechEd представители Microsoft сообщили о радикальном изменении планов, касающихся лицензирования SQL Server Reporting Services и Report Builder...

SQL Server 2005: как вызвать веб-сервис
Кейт Браун
MSSQLServer: В сегодняшнем посте Кейт пояснил причину: SQL Server накладывает серьёзные ограничения на загрузку сборок из файловой системы. Это и логично: если уж сборки хранятся ВНУТРИ базы данных, то включать в рассмотрение какие-то посторонние сборки из...

Оптимизация - ваш злейший враг
Dr. Joseph M. Newcomer
Достаточно квалифицированный программист вряд ли напишет очень неэффективный код. По крайней мере, неосознанно. Оптимизация - это то, чем вы занимаетесь, когда текущая производительность вас не устраивает. Иногда оптимизировать легко...

Проблемы 4го сервиспака..
Ivan's Blog
MSSQLServer: При установке вышеупомянутой версии возникает несколько проблем, известной ошибки с AWE я не буду касаться, она уже обсуждена где только можно, а вот остальные две проблемы пожалуй описать стоит…...

Многоликий класс CultureInfo - .NET-приложения станут дружелюбнее к пользователю
Майкл Каплан
C-sharp: Класс CultureInfo - один из наиболее широко используемых в Microsoft .NET Framework. Объекты этого типа применяются при загрузке ресурсов, форматировании, синтаксическом разборе, изменении регистра букв, сортировке и других преобразованиях, выполн...

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

Measure Expressions
Chris Webb's BI Blog
I know this blog has been rather light on useful content (as opposed to links) recently, and I'm sorry - it's not that I'm not learning anything new, I am, but much of it is going into my chapters for MDX Solutions 2E rather than on here. I'll try to get round to blogging about stuff like the HAVING clause in MDX and the MemberValue() function sometime soon if I can do so without giving away all the juicy information that you'll want to buy the book for, and if Mosha (or even BOL) don't beat me to it...

An Introduction to the Service Broker
Srinivas Sampath
One of the more interesting new features in SQL Server 2005 is the Service Broker. It's not something to help you manage your financial future, nor is it some new program that handles all the instances and their accounts. It's a message queue and SQL Server MVP Srinivas Sampath brings us a look at this new feature with some code to get you going

2005 Feature: Can we finally stop logging in as SA?
The SQL Doctor is In
Yesterday I mentioned that I had an EXECUTE AS epiphany while eating at Subway. While I doubt either the oil or vinegar had anything to do with it, I will be back to eat there next Wednesday! Anyhow, what I realized is that I could finally stop logging in as a member of the sysadmin group on my server, and still have the ability to do system administration tasks. I could impersonate a user that had sysadmin rights when I wanted to do SA type stuff

Who runs my Sql Server Agent job steps?
Davide Mauri's blog?
To know under which security context your job step will be run, go ahead and read the following

SSIS: What runs the packages?
Jamie Thomson's Blog
I saw the following question asked recently. "Why do you say that there is no SSIS server? What runs the packages?"

CubePort: Essbase to Analysis Services conversion wizard
Mosha Pasumansky
Last week ExoLogic annonced general availablility of the CubePort product. CubePort is a wizard driven application which migrates Essbase cubes to Analysis Services cubes. Previously CubePort was available only with assistance from the consultant, but with the current version improvements it can be run directly by the customers. CubePort is pretty sophisticated application, it migrates most aspects of Essbase application - outlines, loadrules, report scripts, security (users/groups/filters), substitution variables, complex member formulas and more. The picture below shows the conceptual architecture of the CubePort, with more details available at http://www.exologic.com/products.htm. Now moving away from Essbase to Analysis Services became easier then ever !

Sample Code from DM Programmability Webcast
DMTeam
This tip contains the code and some queries from the MSDN Webcast on Data Mining Programmability. By request, here is the code from my webcast on June 30, 2005. The webcast will be available at http://www.microsoft.com/events/series/sqlserverbi.mspx The model used is included with the downloaded data validation sample in the samples section of this site. Due to IP reasons, we are unable to redistribute the source data for the model

Programatically accessing ADO.NET 2.0 performance counters
Angel Saenz-Badillos
I have found that many times using Perfmon with the new ADO.NET counters is not ideal, a much better approach may be to get the performance counter information directly through code. There is only one minor complication, to make it easy to differentiate between instances with the same name we have formatted instance names as “()”.

Using Sql Server 2005 Snapshot isolation level with ado.net 2.0
Angel Saenz-Badillos
Sql Server 2005 now supports non-blocking read operations with the Snapshot isolation level. What does this mean for ADO.NET 2.0?

ADO.NET 2.0 Asynchronous Command Execution (ASYNC) FAQ
Angel Saenz-Badillos
ADO.NET 2.0 Asynchronous Command Execution (ASYNC) FAQ (DISCLAIMER: Based on Whidbey beta1 and subject to change)

ADO.NET 2.0 Multiple Active Resut Sets per connection in Sql Server 2005 (MARS) FAQ
Angel Saenz-Badillos
ADO.NET 2.0 Multiple Active Resut Sets per connection in Sql Server 2005 (MARS) FAQ

Sql Server 2005 User Defined Types and the "File or assembly name not found" exception
Angel Saenz-Badillos
"File or assembly name ‘’, Version=1.2.0.0, Culture=neutral, PublicKeyToken=389619d4c1235f8a', or one of its dependencies, was not found." If you have started using Sql Server 2005 User Defined Types it is likely that you have run into the exception above. Why is this happening? The short answer is that Fusion has not been able to find your UDT on the client

ADO.NET new for 2.0, Clearing the pool on Server recycle
Angel Saenz-Badillos
This blog talks about behavior in the SqlClient and the Oracle managed provider exclusively

ADO.NET 2.0 The connection pool and distributed transactions
Angel Saenz-Badillos
I am a big fan of pop quiz style blogs like the ones you can find here: http://blogs.msdn.com/brada/ . I am not really sure that there are enough people looking at this blog to make this fun but I am going to give it a try. I will incorporate the answer in the blog at a latter time for reference

ado.net 2.0 changes in latest community drop
Angel Saenz-Badillos
Well, it has been a long time since my last blog and it is going to be a while before I get going again. Whenever this happens you can count on me being either insanely behind or on vacation

Ado.net 2.0 Mars Session Pooling. (aka stuff you don't need to know.)
Angel Saenz-Badillos
Mars session pooling. Well, it has been a long time since my last blog and I am finding it very hard to get this one started. You start thinking that you need to have something really good to start up the train again or you might as well not bother. I am afraid that session pooling does not fall under the “really good” category. It is transparent to users and nothing bad happens if session pooling does not work. I could argue that it is important to know how this feature works so as to maximize MARS performance scenarios (this is true) but as I mentioned in a previous blog I am NOT a big fan of using MARS for performance, it is possible but too painful for the gains you will find IMO

ADO.NET 2.0 and System.Transactions, downlevel functions and nested scopes
Angel Saenz-Badillos
As with most of my blog posts this started as a customer question, the core of the problem was that he was not sure how he was expected to use TransactionScopes in methods that call other methods or "downlevel" functions as he named them

XML Data type in ADO.Net v2.0 - Part I
Sushil's WebLog
After a long hiatus, let me start with how the new XML data type in SQL Server 2005 is exposed via ADO.Net 2.0. I will discuss this new data type in following parts

XML Data type in ADO.Net v2.0 - Part II
Sushil's WebLog
In this section we will look at ways ADO.Net v2.0 (Code named 'Whidbey') allows us to insert/delete/update Xml data values in a table containing Xml column in SQL Server 2005 (Code named 'Yukon'). With earlier versions of the .Net Framework (1.0 and 1.1) the System.Data.SqlClient namespace will consume and emit XML as String values.Because of this, it should not be a surprise that they would behave the same way with Whidbey. This was made so as to not break customers using this new datatype of the Server with older versions of the framework. Note: The examples below use the Customer table defined in the Part I of the blog

Enumerating SQL Servers
Sushil's WebLog
Continuing with the discussion on enumeration, I will go over ways to enumerate active SQL servers on the network in this blog. Pre-Whidbey, to get list of active servers on the network, we could have done Inter-Op calls to server enumeration APIs in OleDb. If we wanted to write only managed code,we could have broad-casted a carefully crafted UDP packet to the network on port 1434 and waited for response from active SQL Servers and then list them

Notification Support in SqlClient Managed Provider
Sushil's WebLog
After a brief hiatus, let me start with blogging the new Notification support in SqlClient MP that is introduced in Whidbey. There are scenarios in which an application would store a cache of data obtain from a DB Server and then re-query from the same cache to save round-trips to the server (for better performance). Typically, the app would want some mechanism to be notified when this very cache was changed by some one. In short, this feature allows you to monitor a specified result-set (collection on table rows, as defined by your select statement.) and then notify you when something is changed in the monitored result-set

Guerrilla SQL Server 2005 class
Sushil's WebLog
I happened to go to one of the class from a mentoring company. It was presented by Bob Beauchemin-Niels Berglund-Dan Sullivan. Boy! they were great!

Getting Notifications to Work
Sushil's WebLog
With good things said about Notification in my previous blog, I will like to take a step further to walk you through some common issues in setting up this feature. We would need to undestand how notifications internally work to track some of these issues. Lets start with the SqlDependency object. When we create a SqlDependency object we are creating a listener on the client to track notifications sent by the server. There are two types of protocol options that SqlDependency supports – HTTP and TCP when creating a listener. The HTTP listener uses the HTTP.SYS functionality to create a listener. By default when no protocol option is specified, we try to create an HttpListener; if that for some reason fails, we create a TCPListener. When a change occurs, the server then dispatches notification messages via a .Net Procedure to the client listener. Now, let’s go over some common issues

Storing and Retrieving Images from SQL Server using Microsoft .NET
kzmm
Storing and retrieving images from SQL Server using Microsoft .NET

New Recommendations for Comparing Strings in .NET 2.0
Paul Ballard
Microsoft has released an article that outlines new guidelines for working with strings in .NET applications based on internationalization and how it affects even the simplest string comparisons. The document includes a DO and DON'T section as well as a description of the problem being solved by using culture based comparisons

All Mod Cons (Multilingual Reports with AS2005)
Direct Reports
Based on feedback from a couple of folks, I've decided to make my post titles a bit more descriptive. I'll still use the name of one of the albums in my music collection as the primary title but will also include a description of the actual content of the post (happy, Jason?)

"A data source instance has not been supplied for the data source" exception w/ Report Viewer Control
Russell Christopher's Semi-Useful BI Musings
I'm using the webform Report Viewer control and I want to render a report locally on SQL Server Reporting Services 2005, CTP15.

What Data Do You Encrypt?
Don Kiely's Technical Blatherings
I've been spending a lot of time lately on encryption in SQL Server 2005. It's very cool to have encryption available natively in the server, with a range of algorithms and the support added to T-SQL

Microsoft LogParser 2.2 together with Microsoft Excel 2003 makes a killer tool :)
Valery's blog
Today we’ve stumbled over a strange problem with Windows SBS server 2003 suddenly started refusing users’ login saying that “No license was available for user 'user_name'…”. It was quite strange since we were sure that it should not be a problem with licenses anytime soon. So I’ve tried to investigate the reasons of that problem. And this investigation leaded me to greater appreciation of LogParser tool and Microsoft Office 2003 XML integration

How to use Trusted Connection when SQL server and web Server are on two separate machines
Alex Chang's WebLog
Recently, in our consideration to make the production server environment more secure, one of the things we looked into was securing the database connection information between the web server and SQL server. I received much help from attending DevDays 2004 and also from doing some research on the Internet on this matter. There are some options when it comes to securing the connection string between a database server and a web server. I'll just list a few here

Push FTP with SQL Server
Steve Jones
DTS is an incredible package for moving data in the SQL Server world. One feature that is missing, however, is the ability to send files using FTP to a remote server. This article looks at a technique for sending files via FTP

SQL Pivot and Cross Tab
Don Schlichting
This article will explore various SQL methods for producing pivot style reports

SSIS Nugget: Execute SQL Task - Full Result Set - Store in a variable
Jamie Thomson's Blog
Here is the first in what will hopefully be a long series of postings in what I have colloquially called my SSIS Nuggets series

SSIS Nuggets (and the perils of commuting)
Jamie Thomson's Blog
I hate commuting. There's no two ways of saying it, I despise it. Every day I face the 70 minute grind of trekking into London on a packed commuter cattle-wagon and the same back again. And I'm one of the lucky ones, I get on the train when there are still seats free. I pity the massed hoardes that have to attempt to squeeze on at Clapham Junction in the mock mosh pit that always ensues

TSQL Exception Handling and Deadlocks
TSQLNet Weblog - Cihangir Biyikoglu
You probably hear about exception handling in TSQL already but here is a neat use of the feature: TSQL exception handling is very close to the top when it comes to popularity of the new TSQL features. The ability to handle exceptions without having to put an IF @@ERROR!=0 is extremely valuable for ease of coding. There is one pattern, however, that I really found extremely helpful with the new TRY … CATCH: the ability to handle deadlocks and implement a retry logic on the server side.

Ranking Functions, TOP and Aggregates
TSQLNet Weblog - Cihangir Biyikoglu
This is something I came across a few times within the last few weeks so thought I’d share the findings

Block-Buster: SQL 2005 and Blocking/Deadlocking
TSQLNet Weblog - Cihangir Biyikoglu
If you'd like some help in going to sleep at night, try thinking about how concurrency is controlled behind the scenes in SQL Server. No guarantees however: you may wake up in the middle of the night having nightmares about blocking and deadlocking. Seriously though, the real nightmare would be the opposite... uncontrolled concurrency = sheer chaos

Data Integration
TSQLNet Weblog - Cihangir Biyikoglu
I like this term: it describes the main objective well... and as a matter of fact, this is a very popular problem many are trying to solve. I recently spent a week in NY and had a chance to talk to a few partners and customers in the financial vertical. Almost everyone have this need either because of compliance (SOX for example) or for getting a single high level view of business and just for simply consolidating things like customer data stuck in application silos … The problem is data is either in one of the various platforms (SQL Server, Oracle, DB2, Informix, Sybase etc.) or in one of the many representations (xml, comma delimited files, binary representations – images, movies etc.)…

Data Integration - Part II - UDTs and OPENROWSET to parse custom file formats
TSQLNet Weblog - Cihangir Biyikoglu
SQLCLR is the Swiss Army knife with 1000s of foldable parts. You cannot beat the ability to plug right in and reuse good set of framework functions from the DBMS. If your DBA is one of those that say; “no way. I am not letting C# into my database”, this is what I’d tell him… I am sure one day someone insane enough will to try to write the entire framework using sql but until then we need SQLCLR

Globilization in SQL Server
Dinesh Asanka
SQL Server can support many different languages through Unicode. Author Dinesh Asanka brings us a basic article on how the server supports different languages

SQL Server 2005 Service Broker Stuff in June CTP
managed data
As Bob is doing, whenever a new build is released I tend to check out various stuff to see if it works as before. This however jumped up and bit me the other day

SQlClrProject - Visual studio Project Type for SQL Server 2005
managed data
I have the pleasure to introduce the SqlClrProject project type

Unification of System.Data.SqlClient and System.Data.SqlServer
Pablo Castro
Many of us would like to have a space to write about the stuff we do, publish open issues for debate, and in general have a handy, informal point of contact with our developer community. Most of us don’t have the time to actually sign up for a blog and actually keep it interesting (folks such as Angel and Sushil actually do it…don’t know how they find the time :). So we came up with this “Data Access Team Blog” which lets us have a blog without signing up any one of us to maintain it full time

Primer to ConnectionStringBuilder in ADO.Net v2.0
Sushil Chordia
We had got good amount of feedback from developers in 1.0 and 1.1 versions for need to have a Connection-String Builder. Consider that you want to develop an application that needs to dynamically build a connection string depending on the Data Source Name, User ID and Password values given by the user; then open the connection based on this values and do data access

API Changes between CTP
Pablo Castro
We’ve been seeing several comments on email and blogs lately about changes in the APIs between CTP (Community Tech Preview) releases. I understand the frustration that these changes could cause, so I wanted to jump in and comment on the topic

Using ADO.NET inside SQL Server 2005 with SQLCLR
Pablo Castro
SQL Server 2005 enables the creation of procedures, functions, etc. using managed code. Since you can use managed code, sooner or later you’ll want to access some data in the same or a different server, and for that you’ll most likely use ADO.NET

Introducing SQL Native Client
Acey J. Bunch
By now you may have heard of a new data access technology called “SQL Native Client” that will ship with SQL Server 2005. But before we go much further in discussing it, let’s be clear about what we mean by “new”. It is new in that this data access library did not exist prior to SQL Server 2005, but rest assured that it is not some radical new design for accessing data!

Does ADO.NET update batching really do something?
Pablo Castro
I’ve gotten this same question several times in the last few weeks, so I thought it would be a good idea to put together some details on the topic. Update batching is a new ADO.NET 2.0 feature that, when enabled, introduces an optimization to the process of executing a DataAdapter.Update call (which basically takes the changes from a DataTable and pushes them into a database using the INSERT/UPDATE/DELETE commands)

The end of the MDAC Redistributable
Brad Rhodes
Microsoft Data Access Components version 2.8 sp1 is the last stand alone redistributable of MDAC that Microsoft will ship

Exceptions in ADO.Net 2.0
Siraj Lala
I’d like to briefly talk about some of the work we have done in ADO.NET 2.0, for improvement of Errors and Exception usage. In ADO.NET 1.1, several error messages were generic and didn’t have enough detail to make them actionable. An example of this is the infamous “General network error” that could occur in variety of cases. In ADO.NET 2.0, we now surface the exceptions that we get when making calls to the lower network layer (SNIX – the network transport layer used by SqlClient). These exceptions are encapsulated in the exception thrown by SqlClient, with additional information at the API level

Extended Syntax for EncryptBy* and DecryptBy* T-SQL Functions
Don Kiely's Technical Blatherings
I was just reading this post on Laurentiu Cristofor's blog with an encryption sample: Simple demo for how to encrypt and decrypt a table column in SQL Server 2005

Database Geek of the Week - Bill Bach
Douglas Reilly
As I have admitted before, I am a reformed Btrieve developer. Actually, I was a Btrieve geek. I wrote articles in Dr. Dobb’s about Btrieve file internals, I was the Inside Btrieve columnist for the Btrieve Developer’s Journal, and I made a reasonably good living selling a couple of Btrieve utilities as shareware. As recently as six months ago, I sold another copy of one of the DOS-based Btrieve utilities

SSIS Nugget: The script component and regular expressions
Jamie Thomson's Blog
Another quick nugget here to demonstrate Regular Expressions. For those that don't know, regular expressions are a nifty way of matching incoming textual values to a required format. Probably best that I don't try and explain it any more. Read on...

Upgrading Typed DataSets in Visual Studio 2005
Shawn Wildermuth
Typed DataSets are a common feature in .NET development projects. With the release this year of Visual Studio 2005 and the .NET Framework 2.0, how will your Typed DataSet projects fare in the upgrade process?

WMI behavior change for June's version of SQL Server 2005
Blog Entries
Building with beta products always holds it own unique challenges, but then again, that’s what makes it fun for a lot of us. Solving problems not seen before is a pretty cool. I was reminded of that idea recently when I was trying to use our WMI demo with the latest CTP from June, IDW15. My demo which had worked for the last several months now kept failing after the alert had fired. It was failing at the point of creating the job. Below is the error message

The identity crisis in replication columns
Hilary Cotter
This article discusses three common problems DBAs are likely to encounter when replication columns have the identity property, which is defined as an attribute of int, smallint, bigint, decimal, numeric or tinyint columns that will auto-increment their value when data is inserted. These problems are humorously referred to as the identity crisis

Gotcha! SQL Aggregate Functions and NULL
Michael Coles
Working with NULL functions can be tricky in T-SQL and SQL Server 2000. If you add in aggregates, you need to be sure you understand what the behavior will be or you might report incorrect values to a user. Michael Coles has written a new article that talks about how NULL affects your results

Should you use a DataReader or DataSet?
Douglas Reilly
In the beginning, there was the recordset, a central feature of classic ADO. Like a Swiss army knife, it wasn’t the perfect tool for every job, but given the correct configuration, it could do whatever you needed it to do

MDX Essentials: String / Numeric Functions: The CoalesceEmpty() Function
William Pearson
As we discussed in my MDX Essentials article Database Journal and elsewhere, the multi-layered architecture that is Microsoft business intelligence offers us a great deal of similar opportunities for creative customization and optimization, in a wide range of scenarios, if we consider "layered intelligence" from an integrated perspective

SQL Server 2005 Tidbit: GO <number>
The SQL Doctor is In
In management studio, in the June CTP you can add a number to the GO command to execute the batch multiple times. For example

DTS to SSIS functionality differences and mappings
Ashvini Sharma
This came up at a webcast a couple of weeks back and I couldn't find this anywhere. Jim, our King of Migration/Upgrades/Pipeline components, is about to start blogging any minute now, and will have a lot more information on these. In the meantime, I had to get a high level version done for WWPC, so here's the detailed version as well

Direct dependencies on a column...
SQL Server Engine Tips
I came across a question recently about discovering the constraints that are dependent on a column like CHECK constraint, defaults and so on. In trying to solve that problem, I came across few interesting solutions that uses some new relational features and the catalog views available in SQL Server 2005. I will share those here. There is a wealth of information exposed via the catalog views in SQL Server 2005 and be sure to check that out in the Books Online

Quiz: Comparisons in XQuery vs T-SQL
John Gallardo's Weblog
I have the following two statements. What is the difference? What would you expect the results to be? Are you surprised by what you get?

Simple demo for how to encrypt and decrypt a table column in SQL Server 2005
Laurentiu Cristofor's blog
For my first post, I decided to make available a very simple demo I wrote recently to demonstrate how data can be encrypted in SQL Server 2005. You can paste the following script in SSMS and execute it line by line while following the comments. The script was written and tested on build 1256.73

SQL Server 2005 helpful catalogs: crypt_properties and key_encryptions
Laurentiu Cristofor's blog
A while ago, I answered a question about how to find out what keys are encrypted by a certificate. Since then, I compiled a list of useful queries that can be used to find out the encryptions and signatures made with a cryptographic entity. Before listing them, a brief description is required for the two catalogs that are used by these queries

SQL Server 2005: column encryption demo part 2
Laurentiu Cristofor's blog
I modified the last column encryption demo by protecting the encryption key with a certificate instead of using a password. The advantage to this approach is that a password is no longer needed when opening the key. The advantage of the password approach was the additional protection coming from the fact that only the user who knew the password could use the key. In this version of the demo, any db_owner can use the key

SQL Server 2005: procedure signing demo
Laurentiu Cristofor's blog
The ability to sign procedures is my favorite cryptographic feature in SQL Server 2005

[В начало]

ФОРУМ SQL.RU

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

Кто на чем пишет клиентов под SQL Server?
Помогите с DTS советом!
Прошу голосовать за SQL.RU в конкурсе Интернить 2005
SQL Server Health and History Tool (SQLH2) Reports
Оптимизация запроса (создание индекса)
Еще раз о конфигурации RAID. Как поделить 6 дисков?
SP4 - делитесь опытом
Процессы блокируют сами себя, что делать
И снова ADSI & LDAP. Помогите...
Востановление БД Хелп!
По каким столбцам связываются таблицы Deleted и Inserted
Прокомментируйте - ошибка при многопольз. работе возможна?
координатор транзакций чего-то хочет а чего не пойму
Репликация ... или это вообще реально???
Неправильно работает UPDATE в триггере. Без триггера - правильно
фак по SQL Server 2005 Developer Edition
откуда это может взяться, если...
Люди как dbf затянуть в базу MS SQl Server
set nocount on замедляет работу
Непонятки с импортом из DBF в MSSQL

[В начало]

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

SQL Mail, ошибка 22022
independent_agent какие правила при Transaction replication
Microsoft to release SQL Server 2005 the week of November 7, 2005
функция возвращающая список заапдейтеннх столбцов в триггере

[В начало]


Вопросы, предложения, коментарии, замечания, критику и т.п. оставляйте Виталию Степаненко и Александру Гладченко в форуме: Обсуждение рассылки

СЕМИНАРЫ  КОНФЕРЕНЦИИ

МИНИФОРМА
ПОДПИСКИ



ПУБЛИКАЦИИ  АРХИВ


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.winsoft.sqlhelpyouself
Отписаться
Вспомнить пароль

В избранное