|
Программирование >> Реализация баз данных
Принципы работы блокировок Блокировка - это с помощью которого программы показывают зависимость пользователя от ресурса. Программы другим пользователям выполнять над ресурсами операции, которые негативно влияют на зависимость пользователя, владеющего блокировкой, от этого ресурса. Блокировки управляются внутрисистемными механизмами, они устанавливаются и снимаются в зависимости от действий пользователя. С помощью ровок SQL Server 2000 реализует пессимистическое управление параллельным выполнением при работе множества пользователей, одновременно модифи-иируюших БД. По умолчанию SQL Server управляет <-п- п:ц;.ит\<и и блокировками для каждого соединения отдельно. Например, если приложение открывает два соединения с SQL Server, то блокировка, установленная одним соединением, не может быть использована другим. Пи одному из соединений не удастся установит!, блокировку, конфликтующую с блокировками, удерживаемыми другими соединениями. Это правило не действует лишь на связанные соединения. Блокировки применяются в БД на разных уровнях. Их устанавливают для строк, страниц, ключей, диапазонов ключей, индексов, таблиц или баз данных. SQL Server динамически определяет уровень блокировки для каждого оператора t-SQL. Уровень, на котором задается блокировка, может варьироваться для разных объектов в пределах одного запроса. Например, в одной очень маленькой таблице блокировка устанавливается на уровне таблицы, тогда как в другой, большей таблице она задается для отдельных строк. Пользователям не нужно определять уровень блокировки, администраторы также не жны заниматься его настройкой. Каждый экземпляр SQL Server гарантирует, что блокировки, действующие на одном уровне, не нарушат блокировок, установленных на другом уровне. Существуют несколько видов блокировок: разделяемые, обновления, монопольные, предварительные и блокировки схемы. Вид блокировки показывает уровень зависимости соединения от заблокированного объекта. SQL Server контролирует взаимодействие ало-кировок разных видов. Например, не удастся установить монопольную блокировку ресурса, если другие соединения удерживают для него разделяемые блокировки. Блокировки удерживаются на заданном уровне ровно столько, сколько необходимо для защиты ресурса. Если соединение пытается установить блокировку, конфликтующую с блокировкой, удерживаемой другим соединением, ему не удастся это сделать, пока не произойдет одно из следующих событий: освободится конфликтная блокировка; истечет тайм-аут соединения. По умолчанию тайм-аут для соединения не задан, но некоторые приложения устанавливают его, чтобы не ожидать неопределенно долго. Если несколько соединений блокируются в ожидании конфликтной блокировки на одном и том же ресурсе, то освобожденная предыдущим соединением блокировка предоставляется по принципу пришел - первым обслужен . В SQL Server предусмотрен алгоритм для обнаружения взаимоблокировок двух соединений. Если экземпляр SQL Server обнаружил взаимоблокировку, то одна из транзакций будет что позволит продолжить выполнение другой. SQL Server динамически повышает или снижает уровень блокировок и меняет их тип. H:im-4(Mep, если операция обновления установила много блокировок на строках, заблокировав, таким образом, значительную часть таблицы, блокировка повышается до уровня таблицы. При установке блокировки таблицы блокировки строк снимаются. SQL Server 2000 редко приходится повышать уровень блокировки, обычно Query Optimizer сразу выбирает нужный уровень во время компиляции плана исполнения. Архитеюура распределенных транзакций Распределенными называются транзакции, в которых задействованы ресурсы из двух и более источников. SQL Server 2000 поддерживает распределенные транзакции, при исполнении которых обновляются несколько )( Server и других источников данных. Приложения используют SQL Server 2000 в распределенной транзакции нескольким способами: если приложение исполняет распределенный запрос в составе локальной транзакции, локальная транзакция становится распределенной; при исполнении оператора BEGIN DISTRIBUTED TRANSACTION; если при исполнении локальной транзакции включен (ON) параметр REMOTE PROC TRANSACTIONS, то при вызове удаленной хранимой процедуры локальная транзакция становится распределенной; приложения, использующие компонент доступа Microsoft OLE DB для SQL Server или драйвер SQL Server ODBC, могут методами OLE DB или функциями ODBC подключать соединение SQL Server к распределенной транзакции, начатой приложением. Упражнение!. Доступ к журналу транзакций и его модификация В этом упражнении отрите свойства БД BookShopDB и измените размер журнала транзакций. Затем вы уменьшите размер физического файла журнала с помощью оператора -SQL. Чтобы выполнить это упражнение, необходц- мо зарегистрироваться в качестве на компьютере под ем Windows 2000 Server. ► Просмотр свойств БД BookShopDB h изменение размера журнала транзакции 1. Откройте Enterprise Manager. Раскройте консоль, чтобы увидеть БД BookShopDB. 3. Щелкните правой кнопкой узел BookShopDB и затем шелкните Properties. Появится диалоговое окно BookShopDB Properties. 4. Щелкните вкладку Transaction Log. Обратите внимание, что для журнала транзакций выделен 1 Мб, а инкремент автоматического роста равен 10%. В поле Space Allocated строки поменяйте значение 1 на 3. Щелкните ОК. Теперь для журнала транзакций 3 Мб. 7. Оставьте Enterprise Manager открытым, он понадобится позже. Как сократить размер журнала транзакций Откройте Query Analyzer и подключитесь к локальному серверу. На панели Editor в окне Query введите код USE BookShopDB овес SHRINKFILE (BookSnopPB Lcg, 1) Этот оператор сокращает размер файл pDB Log в БД BookShopDB с 3 до 1 Мб, Занитие 1 Архитектура транзакций и блокировок 353 3. Исполните оператор Transact-SQL. Информация о файле журнала выводится на вкладке Grids панели Results. 4. Закройте Query Analyzer. ► Просмотр свойств hopDB и журнала гранзакаий 1. В Enterprise Manager щелкните правой кнопкой узел BookShopDB и выберите Properties. Появится диалоговое окно BookShopDB Properties. 2. Щелкните вкладку Transaction Log. Обратите внимание, для журнала шаюий снова выделен 1 Мб. 3. Закройте Enterprise Manager. Резюме В SQL Server предусмотрен ряд архитектурных компонентов, поддерживающих транзакции: журнал транзакций, управление параллельным выполнением, блокировки и поддержка распределенных запросов. В каждой БД SQL Server имеется журнал mKu.nii, регистрирующий все транзакции и сделанные ими модификации БД. Журнал с реестром транзакций и сделанных ими модификаций поддерживает три вида операций: восстановление отдельных транзакций, восстановление всех незавершенных транзакций при запуске SQL Server и восстановление БД путем повтора действий вплоть до момента рии. Подобно другим реляционным БД, SQL Server использует журнал с упреждающей записью, при этом он гарантирует, что ни одна модификация БД не будет записана на диск раньше связанных с ней записей журнала. Логически журнал транзакций SQL Server функционирует как последовательный набор записей журнала. Физический размер файла журнала сокращается при исполнении оператора DBC DAT.ABASF. оператора DBCC SHRINKDATABASE, ссылающегося на файл журнала, или во время операции автоматического сокращения размера. SQL Server защищает выполненные одним от негативного воздействия со стороны модификаций, сделанных другими. С помощью блокировок SQL Server 2000 реализует пессимистическое управле-параллельным выполнением время работы множества модифицирующих БД одновременно. Блокировки SQL Server устанавливаются на различных уровнях. Распределенные - это транзакции, в которых задействованы ресурсы двух или более источников. SQL Server 2000 поддерживает распределенные транзакции: пользователи могут создавать транзакции, при исполнении которых несколько БД Server и других источников данных.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |