|
Программирование >> Реализация баз данных
В следующем примера MOBJlei уровень изоляции IZABLE (упорядочение). Это исключает попадание фантомны); строк в таблицу Authors при исполнении параллельных транзакций: USE Pubs DBCC USEROPTIONS примечание При необходимости уровень изоляции для отдельных операторов SELECT удается изменить щью указаний блокирования на уровне ИЦЫ. которое не влияет на другие операторы сеанса. Следует использовать его изменения режима блокирования по умолчанию только при необходимости. Для определения текущего уровня изоляции транзакций служит оператор DBCC USEROPTIONS. Реализация указаний блокирования на уровне таблицы Для операторов SELECT, INSERT, L PDATE и DELETE разрешается задавать ряд указаний блокирования (locking hints) на уровне таблицы, определяющих в SQI Server 2000 тип используемой блокировки. Указания блокирования на уровне таблицы служат для тонкой настройки типов блокировок, необходимых для объекта. Указания блокирования подменяют текущий уровень изоляции шакциТч сеанса. Примечание Оптимизатор запросов SQL Server определяет правильные настройки автоматически. Следует использовать указание блокирования на уровне для изменения режима блокирования, заданного по умолчанию. Запрет изменения уровня блокирования может отрицательно сказаться на параллельном выполнении. В следующей таблица удится списание указаний блокирования. Указание Назначение HOLDLOCK Удерживает разделяемую блокировку до завершение мкции, препятствуя ее высвобождению после прекращения использования блокируемого объекта (таблицы, строки или страницы данных). HOLDLOCK - эквивалент SERIALIZABLE Запрещает блокировок и не учитывает монопольные блокировки. Если этот параметр активен, можно читать неподтвержденные транзак11,., и набор ппц, для которых выполнен откат во .. i : операции чтения. грязное чтение. Это условие относится только к оператору PAGLOCK Блокировка страницы может быть использована там, где используется одиночная таблица Семантика блокирования аналогична уровню изоляции READ COMMITTED. SQL работает на этом уровне изоляции по умолчанию Пропускает строки. Это указание заставляет пропускать строки, другими что обычно отражается на результирующем наборе. Позволяет избежать ожидания освобождения другими транзакциями блокировок на строках. READPAST действует только для работающих на уровне изоляции READ- COMMITED. Применяется только к оператору SELECT Указание Назначение READLN-COMM1TTED REPEATAB-LEREAD ROWLOCK SERIAL1ZABLE TAB LOCK TABLOCKX UPDLOCK XLOCK Эквивалент NOLOCK Семантика блокирования аналогична уровню изоляции REPEATABLE READ Использует блокировки на уровне строк вместо более грубгх блокировок уровня страницы и таблицы Семантика блокирования аналогична уровню изоляции SERIALIZABLE. Эквивалент HOLDLOCK Использует блокировку таблиц вместо более тонких уровня строк и страниц. SQL Server удерживает эту блокировку до завершения оператора. Однако, если одновременно задано указание HOLDLOCK, блокировка удерживается до завершения Использует монопольную блокировку таблицы. Эта блокировка запрещает другим транзакциям чтение и обновление таблицы и удерживается до завершения оператора или транзакции Используются вместо разделяемых блокировок при чтении таблицы, удерживается до завершения оператора или транзакции. UPDLOCK имеет преимущество, позволяя читать данные (не блокируя другие операции чтения) и обновлять их позже, гарантируя неизменность данных с момента последнего чтения Монопольная блокировка, которая удерживается до завершения транзакции для всех данных, обрабатываемых оператором. Эту блокировку задают с помощью указаний PAGLOCK или TABLOCK, в этом случае монопольная блокировка устанавливается на уровне В следующем примере установлен ртвенъ изоляции SERiALIZABl ,Е. а также используется указание блокировки на уровне таблицы с оператором SELECT: USE Pubs SET TRANSACTION ISOLATION LEVEL SERIALIZABLE GO BEGIN TRANSACTION SELECT Au lnarrie EROM Authors WITH (NOLOCK) Блокировки диапазона 1 чей. обычно применяемые для упорядочения транзакций, как правило, не используют при исполнении оператора SELECT. Настройка блокирования для индекса В большинстве случаев стратегия динамического блокирования SQL Server 2000 автоматически выбирает наилучший уровень блокирования для запросов. Иногда, когда типичные особенности leния к данным хорошо известны и согласованы, стоит ограничить набор уровней блокировки, доступных для индексов. Например, приложение БД использует таблицу соответствия, которая еженедельно обновляется в пакетном режиме, Наиболее эффективная стратегия блокирования в этом случае - отключить блокирование страниц и строк, но разрешить получение обшей блокировки (S) на таблице при параллельных операциях чтения, в результата го сокраша-
Например, если известно, чт конкуренции является ица, иногда выгодно отменить блокировки на уровне страниц, разрешив только блокировки на уровне строк. В другом случае, если для доступа к или индексу таблица постоянно сканируется, стоит запретить блокировки на уровне страниц и строк, разрешив лишь блокировки на уровне таблицы. Важно! Оптимизатор запросов Server определяет верный уровень блокировки автоматически, поэтому не следует менять выбранные им параметры. Запрет блокирования на некотором уровне может негативно сказаться на параллельном выполнении для таблицы или индекса. Например, если для больной таблицы, к которой часто обращается множество разрешить только блокирование на уровне таблицы, то может сни- зиться производительность. Пользователям придется ожидать освобождения блокировки уровня прежде чем они смогут получить доступ к таблице. Упражнение 3. Настройка свойств транзакции В этом упражнении вы настроите тайм-ауты, уровни изоляции и указания блокирования для транзакции с операторов Transact-SQL. Чтобы выполнить это упражнение, необходимо зарегистрироваться в качестве администратора на компьютере под управлением Windows 2000 Server. Настройка тайм-аута сеанса с помошью Transact-SQL Откройте Query и к локальному серверу. 2. На панели Editor в окне Query следующий код Transact-SQL: SELECT ® iiLOCK TIMEOUT Этот оператор запрашивает значение параметра для текущего сеанса. 3. Выполните оператор Transact-SQL. На вкладке Grids панели Results появляется значение Оно возвращается, если для этого сеанса не было задано параметра Во время еженедельного пакетного обновления процесс обновления может получать монопольную млроЕ.ку (X) и после этого обновлять таблицу ноликом. Уровень блокирования для индексов можно установить с помощью системной хранимой процедуры sp indexoption. Для вывода текущих параметров блокирования для данного индекса предназначена функция INDEXPROPERTY. Можно запретить для данного индекса блокировки на уровне страниц и строк или их комбинации, как видно из шей таблицы.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |