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

СОДЕРЖАНИЕ

1.СОВЕТЫ
1.1.Блокировки в SQL Server
2.ССЫЛКИ НА СТАТЬИ
2.1.Статьи на русском языке
2.2.Англоязычные статьи
3.ФОРУМ SQL.RU
3.1.Самые популярные темы недели
3.2.Вопросы остались без ответа
4.ПОЛЕЗНОСТИ
4.1.SQL для профессионалов. Программирование

СОВЕТЫ

Блокировки в SQL Server

По материалам статьи Andres Taylor Advanced SQL Server Locking
Перевод Виталия Степаненко

Я думал, что знаю SQL Server достаточно хорошо. Я использую этот продукт уже больше 6 лет, и мне нравится знать об используемых мною инструментах все.

Когда я преподавал на курсах программирования SQL Server, я заметил, что в материалах Microsoft представлена таблица совместимости блокировок. Та же таблица была представлена и в MSDN.

Рассматривая эту таблицу, я удивился - неужели здесь нет блокировки Intent Update? Это привело меня к исследованию блокировок. Эта статья и есть результат этого исследования. Я написал эту статью для определенного читателя - для того, кто понимает уровни изоляции, блокировки намерения, мертвые блокировки и уровни блокировок. Если вы недостаточно уверенно разбираетесь в этих областях, вам нужно сначала ознакомиться с ними перед чтением этой статьи.

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

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

Update блокировки

Я уверен, что вы слышали о мертвых блокировках, когда системный процесс Х блокирует ресурс А и ждет, чтобы заблокировать ресурс B, в то время как системный процесс Y блокирует процесс B и ждет освобождения процесса А. Если не слышали, то поищите дополнительную информацию об этом в MSDN.

Итак, представьте, что типов мертвых блокировок больше. Рассмотрим следующую ситуацию: системный процесс Х имеет shared блокировку на ресурсе А, и системный процесс Y тоже. Это не проблема, так как две shared блокировки совместимы друг с другом. Теперь процесс Х хочет превратить shared блокировку в эксклюзивную блокировку, чтобы обновить ресурс. Для этого процесс Х должен подождать, пока процесс Y снимет shared блокировку, и пока процесс Х ждет, процесс Y решает сделать то же самое, т.е. превратить свою блокировку в эксклюзивную блокировку. Процесс Х ждет процесс Y, а процесс Y ждет процесс Х. Это и есть мертвая блокировка. Такие блокировки называются мертвые блокировки конвертации (conversion deadlocks).

Это довольно обычная ситуация, и чтобы ее избежать, были введены update блокировки. Update блокировки позволяют соединению читать ресурс, но в то же время показывают свое намерение блокировать его позже, чтобы изменить ресурс. Проблема с update блокировками заключается в том, что SQL Server заранее не знает, хочет ли транзакция превратить shared блокировку в эксклюзивную блокировку, если только это не одиночная команда SQL, как команда UPDATE, которая должна сначала прочитать таблицу, прежде чем обновлять ее.

Чтобы использовать update блокировки в команде SELECT, вы должны явно определить, что вы хотите, чтобы SQL Server использовал их, и это можно сделать при помощи хинта блокировки UPDLOCK.

Мне нравится иллюстрировать то, о чем я говорю, примерами кода. В окне QA я запускаю следующий пакет:

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

Если другое соединение попытается наложить другую update блокировку на ту же строку, то эта блокировка будет отложена, пока не будет снята первая блокировка - две update блокировки одного ресурса несовместимы.

Результат SP_LOCK с нужными строками и столбцами показан ниже:

Как и ожидалось, ключ, который мы блокируем, OrderId, заблокирован update блокировкой. Странное значение в столбце Resource (89003da47679) - это хэшированное значение нашего ключа, 10633. SQL Server использует у себя хэш таблицу как таблицу блокировки, и это то, что мы видим здесь.

Страница, содержащая эту строку, как и ожидалось, заблокирована с помощью Intent Update блокировки. Значение столбца Resource (1:242) показывает, что страница размещена в первом файле базы данных и ее номер - 242 в этом файле. И, наконец, хотя и не ожидалось, SQL Server накладывает IX блокировку на уровень таблицы. SQL Server никогда не использует U/IU блокировки на уровне таблицы, так что мы увидим только X/IX блокировки на этом уровне.

Когда вы выполняете обновление с выражением where, SQL Server должен прочитать таблицу и/или индексы, чтобы определить, какие строки требуют изменения. Перед тем, как он прочитает всю информацию из таблицы/индекса, SQL Server блокирует объект, к которому требуется доступ. Т.к. SQL Server знает, что вы выполняете обновление, то он выберет update блокировку, а не shared блокировку. Это нужно для избежания возникновения мертвой блокировки, о которой я говорил ранее - о мертвой блокировке конвертации.

Когда SQL Server нашел строку или строки для обновления, то он превращает update блокировку строки в эксклюзивную блокировку на RID, если таблица является кучей, или на KEY, если таблица имеет кластерный индекс. Это значит, что обычно вы не видите update блокировок, когда выполняете команду UPDATE - они почти сразу превращаются в эксклюзивные блокировки.

Но, конечно, есть некоторые исключения из этого правила. Если SQL использует индекс для поиска строк, то он блокирует страницы и ключи индекса при помощи update блокировок. Если обновление не изменяет никаких столбцов, содержащихся в индексе, то update блокировки не превратятся в эксклюзивные блокировки. Приведу пример:

Region - это таблица-куча с уникальным некластерным первичным ключом по столбцу RegionId. Чтобы заполнить этот запрос, SQL Server просматривает индекс по RegionId и блокирует страницы и ключи индекса при помощи update блокировок. Наконец, он найдет строку, требующую изменения. Т.к. команда обновления не изменяет RegionId, то ей не нужно накладывать эксклюзивную блокировку на индекс. Результат из SP_LOCK показан ниже:

Мы видим IX блокировку на таблице и X блокировку на RID обновляемой строки. KEY блокировка наложена на индекс по RegionId. Это понятно по столбцу Indid. Как видно, у нас все еще сохраняется update блокировка на индексе. Это один из немногих случаев, когда вы можете непосредственно увидеть update блокировку.

И, чтобы закончить, у нас есть две страничные блокировки - одна на странице индекса (1:306) и одна на таблице-куче (1:300). Откуда я это знаю? Посмотрите на столбец Indid. Id индекса, равный 0, всегда обозначает таблицу-кучу.

Уровни блокировок

SQL Server имеет несколько типов блокировок, но он также выбирает и разные уровни блокировок.

Если вы запускали SP_LOCK хотя бы раз или смотрели текущее состояние Enterprise Manager, то вы точно видели по крайней мере 4 или 5 разных типов блокировок. Я быстро пройду по каждому из них.

Database (DB): Это блокировка сессии - т.е. она не относится ни к какой транзакции, а только к пользователю, подключенному к определенной базе данных. Это нужно, чтобы предотвратить удаление базы данных, когда к ней подключены один или более пользователей. Заметьте, что SQL Server знает, что базы данных master и tempdb не могут быть удалены, и не накладывает DB блокировку на эти базы данных.

Table (TAB): Это самая грубая логическая блокировка, которую может использовать SQL Server. Часто вы обнаруживаете intent блокировки на этом уровне. (Не помните точно, что такое intent блокировки? Читайте дальше.)

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

Page (PAG): Когда SQL Server требуется заблокировать одновременно множество строк, а свободные слоты блокировок заканчиваются, то он может использовать страничные блокировки. Чаще всего вы будете видеть intent блокировки на этом уровне. До SQL Server версии 6.5 включительно это была самая лучшая блокировка.

Key (KEY): Лучший уровень блокировки, возможный в SQL Server, вместе с RID блокировкой. KEY блокировки используются в индексах, а RID блокировки - в таблицах-кучах. Изучая в настоящее время поведение блокировок в SQL Server, я обнаружил, что SQL Server в большинстве случаев ценит конкурентность выше, чем скорость. Высокая конкурентность означает, что множество пользователей может работать одновременно. По возможности это достигается путем небольших блокировок, чтобы не блокировать без необходимости данные, нужные другим пользователям. С другой стороны, высокая скорость может быть достигнута при помощи больших блокировок, что быстрее, чем накладывание множества маленьких блокировок.

SQL Server 2000 может также поднимать уровень ваших блокировок, если он заметит, что вы блокируете все больше и больше строк. В этом случае SQL Server применяет табличную блокировку и удаляет все индивидуальные блокировки на страницах, ключах и RID. Заметьте - поднятие уровня блокировки приводит к установлению табличных блокировок. SQL Server не повышает уровень RID/KEY блокировок до страничных блокировок.

Когда же SQL Server поднимает уровень блокировок? Его не интересует, насколько большой процент таблицы заблокирован; единственная вещь, которая имеет значение - это общее количество блокировок в системе. Когда блокировки начинают использовать достаточно большой процент памяти, SQL Server 2000 пытается поднять уровень блокировок всех транзакций во всех соединениях. Также он пытается поднять уровень блокировок, если заканчиваются слоты блокировок. Вы можете сами это попробовать, уменьшив количество слотов блокировок, которые использует SQL Server, при помощи процедуры SP_CONFIGURE.

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

Хинты блокировки хорошо известны и хорошо документированы в BOL, так что я не буду повторять их здесь. Системная хранимая процедура SP_INDEXOPTION - это хороший путь для указания SQL Server использовать определенный размер блокировок.

Используя SP_INDEXOPTION, вы можете выключить блокировку уровня строки или уровня страницы. Это значит, что вам не нужны хинты блокировки - все блокировки таблицы/индекса будут иметь заданный вами размер. Хотя BOL и утверждает, что эта процедура используется для выбора уровня блокировки на индексах, она также может использоваться и для таблицы-кучи. Передавайте название таблицы в переменную @IndexNamePattern. Очень хороший и практически неизвестный способ.

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

Теперь, в другом окне, давайте проверим результат sp_lock. На моем компьютере я отследил 853 блокировки, относящиеся к соединению, на котором я запустил UPDATE. Таблица Orders в базе Northwind имеет 830 строк, так что я заблокировал каждую строку. Откатите транзакцию и попытайтесь снова применить update после создания индекса, как показано ниже.

Теперь результат SP_LOCK показывает всего 25 блокировок. Эта часть производительности часто не замечается. Даже если вы используете READ COMMITTED, уровень изоляции по умолчанию, то вы все равно увидите большую разницу - снижение количества блокировок со 136 до 24 после создания индекса.

Флаги трассировки блокировок

Существует несколько флагов трассировки блокировок, которые помогут настроить ваши блокировки и обнаружить проблемы с мертвыми блокировками.

Флаги трассировки используются, чтобы включать или выключать определенное поведение в SQL Server. Вы можете установить флаг трассировки, используя DBCC TRACEON, и если вы хотите, чтобы флаг трассировки включался при каждом запуске SQL Server, то вы можете определить его как стартовый параметр, используя '-T'.

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

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

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

ECID взят из master.dbo.sysprocesses. Он используется для различения блокировок, наложенных разными потоками. Режим - это режим блокировки, приведшей к мертвой блокировке, такой, как S, X или U.

Строка "6:885578193:2" означает: база данных с Id 6, объект с Id 885578193, и индекс с Id 2. Число в скобках - это хэшированное значение, используемое, чтобы определить блокировку. Вы можете увидеть это в столбце rsc_text таблицы master.dbo.syslockinfo. К сожалению, это односторонний хэш, что значит, что вы не можете найти заблокированную строку только при помощи хэшированного значения. Spid - это, конечно, системный процесс, наложивший блокировку.

Чтобы прочитать результат, нужно сначала посмотреть на узлы 1 и 2, которые показывают вам блокировки, уже разрешенные и вовлеченные в мертвую блокировку. После этого вы увидите две блокировки в очереди ожидания, помеченные "Requested By:".

1205: Выводит информацию о работе менеджера блокировок. Каждый раз, когда активизируется поиск мертвых блокировок, этот флаг трассировки заставляет менеджера блокировок выводить информацию о поиске. Работает, только если установлен флаг трассировки 1204.

1211: Отключает все поднятия уровня блокировок. Этот флаг трассировки не дает менеджеру блокировок поднимать уровень блокировок, даже если заканчиваются слоты блокировок.

Блокировки столбцов

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

Блокировки столбцов часто считаются слишком медленными для практического использования, и SQL Server не является исключением. Но т.к. блокировка строки не означает автоматически, что индекс таблицы заблокирован, то вы всегда можете использовать данные страниц индекса, чтобы работать с заблокированными данными. Опять же, я объясню это, используя таблицу Region базы данных Northwind.

Таблица Region - это таблица-куча с двумя столбцами, RegionDescription и RegionId. Уникальный некластерный индекс существует на столбце RegionId.

Сейчас мы изменим значение RegionDescription у одной из строк при помощи простой команды update, как показано ниже:

Чтобы выполнить этот запрос, SQL Server не может использовать индекс - индекс не покрывает столбец RegionDescription. Поэтому SQL Server использует полное сканирование таблицы, чтобы найти строку, требующую изменения. Когда он находит эту строку, он превращает update блокировку этой строки в эксклюзивную блокировку. Чтобы убедиться в этом, запустите SP_LOCK в другом окне Query Analyzer. Вы должны увидеть эксклюзивную RID блокировку на соответствующем объекте. В том же окне, в котором вы запустили SP_LOCK, вы можете выполнить следующий select:

Если только вы не указали READPAST или не установили уровень изоляции транзакции как read uncommitted, то вы будете ждать, пока первое соединение не снимет блокировку.

Это ожидаемый результат. Но вот где неожиданность:

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

Как видите, SQL Server выбрал сканирование индекса, чтобы получить нужные данные для выполнения запроса. И т.к. вы запросили информацию, которая может быть предоставлена чтением индекса, то SQL Server'у не нужно читать данные из таблицы-кучи. Этот тип запроса называется покрывающим запросом.

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

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

Расширенная таблица совместимости блокировок

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

Заключение

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

Краткая биография

Andres Taylor пытается уделять одинаковое внимание его любимым занятиям: изучению SQL Server, Бразильскому Джиу-Джитсу и его красивой жене Мими. Он сдал 20 экзаменов MCP, является MCT и работает в Dotway в качестве консультанта по .NET/SQL Server.

[В начало]

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

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

Особенности национальной корпоративной автоматизации
Михаил Румянцев
Большинство крупных внедрений ИТ-решений сопровождается мощным «пиаром» - громкими заявлениями о том, как здорово все получилось, какие конкурентные преимущества обрел заказчик проекта и как отныне легко и непринужденно он сможет повышать эффективность своего бизнеса за счет использования информационных технологий. Зачастую эти заявления не несут в себе никаких несоответствующих действительности фактов. Другое дело, что всей правды в них, как правило, тоже нет. Тем не менее, мощная PR-поддержка крупных корпоративных проектов стала неотъемлемой их частью, и сегодня практически все крупные поставщики ИТ-решений не мыслят развитие своего бизнеса без использования PR-технологий. Однако в данном материале речь пойдет вовсе не о PR-составляющей большинства корпоративных внедрений. Просто «пиар» был выбран в качестве одного из образцов, которые настолько укоренились в сознании, когда речь идет о более или менее крупном проекте, что без него само внедрение уже трудно себе представить...
CASE-средства: в борьбе со сложностью мира
Юлия Гараева, Иван Пономарев
Порою кажется, Что все вокруг устроено несложно: солнце светит, лампочки мигают, зарплату выдают вовремя. Но только захочешь сделать что-нибудь “полезное для общества”, приглядишься повнимательнее, и сразу все становится ой как не просто — на пути встают комплексные объекты и системы: жилищно-коммунальное хозяйство, экономический кризис, вертикаль власти, топология, логистика территориально распределенных сетей, уголовно-процессуальный кодекс, методология планирования ресурсов с учетом производственных ограничений…...

[В начало]

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

Microsoft addresses multicore processor licensing
Martin LaMonica
Taking a stand on what has become a contentious issue, Microsoft on Tuesday said it will count new multicore processors as single units when they debut next year
Support Tools Available For Stress Testing & Performance Analysis
Read80Trace is a command line utility for processing trace files generated by SQL Server 2000. As output, it generates RML files and/or a database populated with normalized data that can be useful for analyzing the performance of the system. Read80Trace requires that the destination database also run SQL Server 2000 or later
The Simplest SQL Notification Application: Stock Quotes
Shyam Pather
This chapter by Shyam Pather introduces you to the basics of SQL-NS and shows you how coding in this environment works. In this chapter, you'll see your first SQL-NS application. Think of this chapter as a tour: My intent is simply to show you around the various facilities that the platform offers so that you get a feel for the application model and the process of coding to it
URL Access to Reporting Services
Narasimha Rao AV
This article is a sequel to Reporting Services in Yukon. My earlier article explains the architecture of reporting services, designing reports using Yukon Business intelligence management studio and deploying them to report server. This article concentrates on URL access to report server and managing reports programmatically
YUKON Beta 2 - XML Features
Narasimha Rao AV
SQL server 2000 provided quite a few xml related features but Yukon comes with whole lot of new features as xml native storage, query, iteration, XML DML, indexing xml columns, validating with schemas and etc
Snapshot Isolation
Narasimha Rao AV
This article explains different isolation levels in SQL Server and also dwells into one of the new features, Snapshot isolation, provided by Yukon. It defines Snapshot isolation with examples, and also lists down few facts that can come across as surprise while working with snapshot isolation
Scripting Traces for Performance Monitoring on SQL Server
Andrew Novick
The SQL Profiler is a great tool for monitoring and analyzing SQL Server Performance. I use it all the time to watch the detailed actions of a stored procedure, trigger or user-defined function (UDF) that I am developing. It can also be used to monitor aggregate performance of an entire SQL Server instance, a single database, or to isolate performance problems. When you are interested in overall performance, using SQL Profiler over time, by that I mean every day, improves your knowledge of your system and its performance characteristics and provides the information you need to spot trends and changes of behavior
Minimizing Stored Procedure Recompilation Problems in SQL Server 2000
Andrew Novick
This article discusses the reasons that SQL Server 2000 decides to recompile a stored procedure and demonstrates techniques that can be used to minimize recompilation. If your system makes extensive use of stored procedures, minimizing recompilation can give you a nice boost in performance
Versioning
Andre Vigneau
The question is why do you want to know which version of Microsoft SQL Server you're running? In my case it is for compatibility purposes. Applications or scripts might not always be compatible with older versions of SQL Server. Also in the same way applications or scripts might not always be compatible with newer versions of SQL Server. I always have my applications check for compatibility first at startup before it's too late and some process or function does not complete properly or makes the application crash. It is so easy to have a message in place prompting the user to upgrade their application since the OS or SQL has been upgraded
MDX Essentials: Basic Set Functions: The EXTRACT() Function
William Pearson
In this lesson, we will introduce a function that operates upon a specified set, extracting the dimensions of that set as we dictate. As most references point out, by way of explanation, the EXTRACT() function works in a manner that is the opposite of the CROSSJOIN() function (for detailed information on the CROSSJOIN() function, see my Database Journal article MDX Essentials: Basic Set Functions: The CrossJoin() Function ). We will consider elementary uses of the EXTRACT() function in this article, and then explore more sophisticated uses in subsequent articles. As with other Basic Functions articles within this series, our objective is to build a foundation in the rudiments of the function, from which we can expand to more sophisticated exploitation in subsequent articles
Getting an environment variable value using T-SQL
Eli Leiba
There are times when passing parameters does not work. For example: when dealing with DTS packages or in cases when an external (non-SQL Server) platform activates a process inside a SQL Server environment
Comparing the Microsoft .NET Framework 1.1 Data Provider for Oracle and the Oracle Data Provider for .NET
Bill Hamilton
Get a comparison of the strengths of the two most common .NET data providers for Oracle, and be prepared to select the right one for your next development project. (54 printed pages)
Multiple Active Result Sets (MARS) in SQL Server 2005
Christian Kleinerman
All Microsoft SQL Server data access application programming interfaces (APIs) provide an abstraction to represent sessions and requests within those sessions. SQL Server 2000 and earlier restricted the programming model such that at any point in time there would be at most one pending request on a given session. SQL Server 2005 implements Multiple Active Result Sets (MARS), which removes this constraint. This document explains the design, architecture, and semantic changes in MARS and what considerations must be taken into account by applications to get the maximum benefit out of these improvements. (19 printed pages)
Resolving the Unknown: Building Custom XmlResolvers in the .NET Framework
Mark Fussell
This article by Mark Fussell gets under the hood of the XmlResolver class in System.Xml and describes how to create your own implementations of XmlResolvers that allow you to retrieve XML documents from alternative data sources, such as embedded assembly resources or from a database using custom define schemes. (25 printed pages)
Working with Image Objects in InfoPath 2003 and SQL Server 2000
Anup Kafle
You can use features in Microsoft Office InfoPath 2003 Service Pack (SP) 1 to work more efficiently with image objects and other data. Learn how to use BLOB data types to work with data stored in a Microsoft SQL Server 2000 database from an InfoPath form. InfoPath 2003 provides a robust and rich interface to store and access data in SQL Server databases. Learn about best practices for integrating SQL Server databases and InfoPath form data, with an illustrative example. (7 printed pages)
Dr. Tom's Workshop: Performance Through Persistence
Tom Moreau
T-SQL allows you to solve the same problem many different ways. Sometimes, alternatives aren't that obvious but can give you a satisfying, pleasant surprise. Read on as Dr. Tom Moreau checks out some possibilities for a solution–and discovers some additional gems along the way
Getting Started with Reporting Services
Rick Dobson
Reporting Services is an enterprise system that integrates Visual Studio .NET 2003 and SQL Server 2000 to facilitate the authoring, publishing, management, and user access to data-based reports. It's a free add-on to SQL Server 2000 from Microsoft, and an upgraded version is likely to become an integral component of SQL Server 2005. Rick Dobson provides an overview of Reporting Services and shows how to get started authoring reports with it. The Reporting Services Books Online is well done, and it provides a thorough overview of the product. This article complements the built-in documentation by highlighting the integral role Visual Studio .NET plays in authoring reports with Reporting Services
SQL Server 2005 Gets BI Infusion
Stephen Swoyer
Microsoft Corp. capped the Professional Association for SQL Server (PASS) community summit last month with a bevy of SQL Server-related news, including details about changes to major BI services in the forthcoming SQL Server 2005 database, the announcement of new reporting packs for its SQL Server Reporting Services offering, and a decision about how it plans to use the ActiveViews technology it acquired earlier this year
Data Management - The Quest for Quality
Accenture
This three-part white paper will explore the major aspects of the data management challenge. Part One will look at the hidden costs of poor data quality, in terms of both dollars and missed opportunities. Part Two will offer perspectives on the regulatory imperatives that are driving a new awareness of reference data management. And Part Three will discuss proven solutions for improving reference data management. The goals of this paper are to shed new light on a topic that is too often ignored, as well as to stimulate debate and action both within individual firms and throughout the industry
Oracle, open source putting the squeeze on SQL Server
Robert Westervelt
Microsoft developers working on the next version of SQL Server are beginning to feel the squeeze from competitive pressures, as they race to release the next version of the DBMS
SQL 2000 User Defined Function Primer
Neil Boyle
Many programming languages have supported User Defined Functions for years, but they are new to SQL Server 2000. In this article we will look at some of the ways functions can be used within SQL Server 2000
Optimizing Microsoft SQL Server Analysis Services: MDX Optimization Techniques: Caching and Additional Techniques
William E. Pearson, III
This is the eighth article of the series, Optimizing MSSQL Server Analysis Services. The primary focus of this series is the introduction of optimization tools and concepts for MSSQL Server Analysis Services (“MSAS”). The series is designed to provide hands-on application of the fundamentals of MSAS optimization from multiple perspectives
Searching the FileSystem
Chris Cathers
I am in a unique situation where I work. I ware two hats. Of course, I’m the local DBA doing everything SQL, from administration to development. But, I also ware the MCSE hat. As such, I often get asked many various things from my CIO. Everything from “Can you fix the email and give me reports on usage” to more recently, “Can you tell me how to best clear up the Home Drives folder, which is full?”
Work with XML Data Type in SQL Server 2005 from ADO.NET 2.0
Thiru Thangarathinam
One of the excellent features of the next release of SQL Server, known as SQL Server 2005, is its deep XML integration with the SQL Server database engine. This integration goes well beyond the simple relational-to-XML mapping layer that SQL Server 2000 provided. SQL Server 2005 will feature a native XML data type that will allow you to store native XML data in SQL Server itself
Controlling SQL Server Settings
Andre Vigneau
Haven't you dreamt about a way to prevent the change of some parameters by some people that still have system administrators privilege and that can seriously put in danger your SQL Server and applications running on them. I know I have this nightmare
SQL Server 2000 Security - Part 14 - Conclusion - Pre- and Post- Installation Recommendations
Marcin Policht
It is time to gather remaining pieces of information dealing to the SQL Server 2000 Security, concluding at the same time our series dedicated to this subject. We will review them in the context of pre- and post- SQL Server 2000 installation tasks. Some of the topics discussed here are related to the issues presented earlier, which should give you a complete picture of all issues that you need to be aware of in order to securely configure and administer your database environment
Automate with SQL Mail
Steven Warren
As a database administrator, I like automation. When it comes to my backups, I like to automate as much as possible. SQL Mail gives me the ability to know when my backups are successful and when they fail
Monitor Blocking in SQL Server 2000 - Part 1
Muthusamy Anantha Kumar
Part of Database Administrator's job is to monitor blocking in SQL Server. By taking advantage of the Microsoft Knowledge Base article 271509, we can monitor the blocking and capture the SQL statements that are involved in the blocking to a file. This can be accomplished by updating the procedure from KB Article 271509 in such a way that it writes the output directly to a file
15 Seconds : Business Intelligence with Microsoft SQL Server Reporting Services - Part 1
Adnan Masood
Business Intelligence is a thriving discipline in the marvelous era of computing we live in. It's the process of analyzing and exploring the information, trends and patterns hidden in data. BI escalates the business roadmap and facilitates business users to deliver better strategic solutions. This process helps enterprise decision makers by providing data models, statistical analysis, forecasting for comprehensive data analysis
Learning Guide: SQL
Sara Cushman
The acronym SQL stands for Structured Query Language. Some people claim that this is a bad name, because
Web Development with Visual Web Developer 2005 Express Edition and SQL Server 2005 Express Edition, Part 1
Dan Burman
Part 1 of a three-part series on creating Web applications with Visual Web Developer 2005 Express Edition and SQL Server Express covers setting up a project and creating a SQL Server Express database, and explores the use of the ASP.NET Web Site Administration tool to set up roles, users, and providers. It also covers utilizing security controls such as Login, LoginStatus, LoginView, CreateUserWizard, PasswordRecovery, and ChangePassword. (16 printed pages)
Web Development with Visual Web Developer 2005 Express Edition and SQL Server 2005 Express Edition, Part 2
Dan Burman
Part 2 on creating Web applications with Visual Web Developer 2005 Express Edition and SQL Server 2005 Express Edition covers database basics, SQL Server Express features, setting up Data Explorer to view SQL Server Express databases, and working with data sources. It also addresses building an n-tier architecture using data components. (17 printed pages)
Web Development with Visual Web Developer 2005 Express Edition and SQL Server 2005 Express Edition, Part 3
Dan Burman
This article is the third in a 3-part series on creating Web applications with Visual Web Developer 2005 Express Edition and SQL Server 2005 Express Edition. It will cover creating master pages and content pages, utilizing navigation controls like SiteMapDataSource, TreeView, and SiteMapPath, and using the ObjectDataSource component to bridge data component and Web interface. It will also address working with GridView and DetailsView controls. (25 printed pages)
Managing a Music Collection Using Visual Basic Express and SQL Server Express
Brian A. Randell
Learn how to get started with database-driven development using Visual Basic 2005 Express Edition and SQL Server Express. (38 pages)
Manipulating And Using DateTime Data
Robert Marda
Sooner or later someone will ask you to include dates and/or times in a query or two. Sometime after you start using dates and/or times you will notice that data stored with the datetime data type doesn’t always react the way you expect in a query and that storing the date and time in non datetime data types creates other problems. In this article I plan to go over some of the things I have encountered when using dates and times
Build SQL CLR Objects With .NET
Doug Thews
Build SQL CLR Objects With .NET Learn how to develop SQL procedures and user-defined functions (UDFs) in .NET 2.0 and SQL Server 2005. One of the most anticipated features in SQL Server 2005 (code-named Yukon) and Visual Studio .NET 2005 (code-named Whidbey) is the capability to develop stored procedures, user-defined functions (UDFs), and user-defined data types in .NET 2.0. SQL Server 2005 now supports developing UDFs, user-defined procedures (UDPs), user-defined triggers, and user-defined data types in any .NET 2.0 Common Language Runtime (CLR)-compliant language
Getting Started With SQL Server Tools
Buck Woody
Learn when to use graphical or command-line tools to manage SQL Server. I love woodworking. There's something satisfying about working in solitude on an artistic expression with a craft that is tangible and useful. I've found many IT professionals pursue hobbies that contrast with flipping bits and bytes in a group setting, where what we did today we do again tomorrow
Microsoft Great Plains – SQL Querying Trivia
Andrew Karasev
This is beginner level SQL scripting article for DB Administrator, Programmer, IT Specialist. Our and Microsoft Business Solutions goal here is to educate database administrator, programmer, software developer to enable them support Microsoft Great Plains for their companies. In our opinion self support is the goal of Microsoft to facilitate implementation of its products: Great Plains, Navision, Solomon, Microsoft CRM. You can do it for your company, being aware on simple data repair techniques and appealing to Microsoft Business Solutions Techknowledge database. This will allow you to avoid expensive consultants visits onsite. You only need the help from professional when you plan on complex customization, interface or integration, then you can appeal to somebody who specializes in these tasks and can do inexpensive nation-wide remote support for you
Let's look at simple data repair techniques
Using Microsoft .NET and C# with Oracle 9i
Michael Swannson
Oracle provides a software tool called ODP.NET that allows connectivity between the .NET languages and an Oracle database. This interface is a set of tools that allow the creation of .NET objects that connect directly to Oracle databases. Learn the basics of connecting to and performing simple queries to an Oracle database

[В начало]

ФОРУМ SQL.RU

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

Ваше мнение об упражнениях SELECT на http://sql.ipps.ru
Tool Вы знаете что твориться на ваших 10-30+ серверах ?
Суррогатные или естественные
Репликация мочит PK на подписчике!!!?
DTS поменять SQL Statement в
Методы авторизации в больших системах
Шаманство при Paralellism в процедурах.
Как обратиться к базам на linked server?
1 Update или много. Что эффективнее?
Taблицы HISTORY.
Помогите составить запрос
Книга по Reporting Service
Народ помогите с бякапом, плиз!!!
Помогите с sp_helprotect
OR-condition via SQL-condition?
Минимальные права на профайлер
Оптимизация производительности
Предоставление прав для админов
Полный ПЭ
Существование файла в сети или на сетевом диске

[В начало]

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

Выборка диапазона данных (запрос из PHP скрипта)
Mssql запрос из php скрипта
SNMP + SqlServer 2000
Глюки с DTS
Оптимизация ДТС
free MS SQL Database comparer
Удаленная установка Client Tools
Большие объемы данных в ADP project. Ошибки при отображении в форме.
Помогите выбрать ноутбук б/у
Документация по MS SQL Server 2000?
Неперегонятся бд из Paradox7 в sql2000
Непонятная ошибка VSS 6004
DTS. Вызов хранимой процедуры на каждом шаге Transform Data Task

[В начало]

ПОЛЕЗНОСТИ

SQL для профессионалов. Программирование

Джо Селко

2004 г., Мягкая обложка, 442 стр., ISBN 5-85582-219-2, издательство "Лори"

Книга "SQL для профессионалов" стала первым изданием, посвященным исключительно сложным технологиям SQL, освоение которых способно сделать читателя экспертом в этой области. В нынешнем обновленном издании автор книги Джо Селко в увлекательной и захватывающей форме описывает лучшие решения старых и новых проблем SQL, стараясь облегчить усвоение этого материала для читателя. Логический и теоретико-множественный анализ призван заменить традиционный процедурный подход к решению проблем, он позволяет сделать важный шаг, отделяющий профессионала языка SQL от всех остальных специалистов в этой области. Вы узнаете, как лучше всего работать с агрегатными функциями, NULL-значениями, структурами массивов. Особое внимание в книге уделяется стандарту SQL-92 и не зависящим от конкретных продуктов технологиям, позволяющим оптимизировать производительность и обеспечить функциональность, не зависящую от СУБД, с которой вы в данный момент работаете. Если вы всерьез настроены извлечь все возможное из SQL, то книга "SQL для профессионалов" потому необходима, что только в ней:
- Cамая современная информация, вводящая вас в реальный мир программирования SQL.
- Стандарт SQL-89 и SQL-92.
- Различные недокументированные приемы, позволяющие решить проблемы производительности систем.
- Технологии, совместимые с любым продуктом в любой среде SQL.
- Советы автора и других признанных авторитетов в области стандарта SQL.

[В начало]

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