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

 

Содержание номера за Март 2007 год

 

Очередное продолжение?

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

Если вы, подобно многим пользователям, были удивлены появлением SQL Server 2005 Compact Edition Release Candidate 1 (RC1), позволю себе немного прояснить ситуацию и рассказать, что на самом деле это SQL Server Everywhere Edition под другим именем.

Надо отметить, что новое название SQL Server Com­pact Edition только усложняет жизнь, так как SQL Ser­ver 2000 Windows CE Edition (SQL Server CE), SQL Server 2005 Mobile Edition, SQL Server 2005 Everywhere Edition и SQL Server 2005 Compact Edition — это по сути один и тот же продукт. Вся эта неразбериха весьма затрудняет понимание, что для чего предназначено. В своей последней ипостаси SQL Server 2005 Everywhere Edition был самым туманным из­за того, что его имя перекликается с именем продукта от SybaseSQL Anywhere — для разработки мобильных приложений баз данных. Неудивительно, что независимые разработчики и партнеры постоянно путались между SQL Server Everywhere и SQL Anywhere, поэтому Microsoft переименовала свою «легкую» СУБД в SQL Server 2005 Compact Edition.

Особенностью SQL Server 2005 Compact Edition я считаю то, что это однопользовательская СУБД. При этом ее предшественницы, SQL Server CE и SQL Server 2005 Mo­bile Edition, могут навести на мысль, что это СУБД для мобильных устройств. А вот и нет. Выпуск RC1 может работать как на мобильных устройствах, так и на «нормальной» Windows. Важно также знать, что новая редакция совершенно непохожа на SQL Server 2005 Ex­press Edition. Так, SQL Server 2005 Compact Edition — однопользовательская СУБД, которая исполняется как приложение (не сервис) и использует обрезанную версию ядра обработки данных SQL Server. Для обеспечения совместимости между устройствами СУБД использует только 5 Мб памяти и может работать с БД размером до 4 Гб. Тогда как SQL Server 2005 Express Edition — многопользовательская система, которая задействует полноценное ядро обработки данных и исполняется как служба ОС.

В результате может возникнуть ощущение, что единственное обновление SQL Server 2005 Compact Edi­tion — ее имя. Это не совсем так. По сравнению с SQL Server 2005 Everywhere Edition в дополнение к Windows Mobile и Windows XP поддерживается Win­dows 2000. Добавлено некоторое количество мелких изменений, включая повышение производительности на настольных компьютерах, поддержку Vista, поддержку DataDirectory для объекта SqlCeConnection, интеграцию с Visual Studio и поддержку SQL Server Compact Edition в SQL Server Management Studio при выходе SQL Server 2005 Service Pack 2 (SP2). Подобно SQL Server 2005 Everywhere Edition, Compact Edition локализована на 20 языках. Важно отметить, что она по­прежнему не поддерживает хранимые процедуры. Свободно скачать SQL Server 2005 Compact Edition можно с http://www.microsoft.com/downloads/details.aspx?FamilyId=85E0C3CE­3FA1­453A­8CEAF6CA20946C3&displaylang=en (размер файла — 1,7 Мб).

Будем надеяться, что выход SQL Server 2005 Com­pact Edition ознаменует окончание чехарды переименований. По крайней мере, я на это надеюсь. Подробнее о SQL Server 2005 Compact Edition — на странице http://www.microsoft.com/sql/editions/compact/default.mspx.

Разверните ваши собственные диаграммы баз данных в SQL Server 2005

Джон Пол Кук (John Paul Cook)

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

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

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

Значения по умолчанию в ограничениях и связанные значения по умолчанию

Рон Тэлмейдж (Ron Talmage)

Только не надо ворчать. Не в стиле Рона Тэлмейджа переиначивать системную документацию, и находка этого месяца — не исключение. Но кто бы мог подумать, что значения по умолчанию в ограничениях или связанные значения по умолчанию могут содержать какие-то «секреты»? Заинтересовались? Читайте дальше.

Недавно я просматривал базу данных и наткнулся на несколько значений по умолчанию, связанных с полями. Поскольку я искал что­либо, нарушающее качество базы, то отметил их как нечто, подлежащее «чистке». Что же они собой представляют, как можно их обнаружить и избавиться от них? И, прежде всего, почему их следует избегать?

Встроенные секционированные таблицы и индексы

Ицик Бен Ган (Itzik Ben Gan)

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

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

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

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

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

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

Использование функции CHECKSUM для отслеживания изменений

Александр Вернер (Alexander Werner)

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

Функция CHECKSUM возвращает целое число, сгенерированное на основе значений из записи. Когда функции в качестве параметра передается список полей, например CHECKSUM (Поле1, Поле2, ... ПолеN), то она возвращает величину, сгенерированную по значениям из N выбранных полей. CHECKSUM(*) использует все поля записи.

Я обнаружил, что эта функция полезна при обновлении многомерных таблиц в хранилищах данных во время импортирования данных из различных систем­источников..

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

Hosted by uCoz