|
Программирование >> Программирование баз данных
Блокировки схемы Блокировки схемы подразделяются на два описанных ниже типа. Блокировки модификации схемы (Schema Modification lock - Sch-M) применяются для обеспечения возможности внесения изменений в схему объекта базы данных. До тех пор пока на объекте установлена блокировка Sch-M, к нему не будут применяться какие-либо запросы или операторы CREATE, ALTER и DROP, относящиеся к другим транзакциям. Блокировки стабильности схемы (Schema Stability lock - Sch-S) весьма напоминают разделяемые блокировки; их единственное назначение состоит в том, чтобы предотвратить создание блокировки Sch-M, поскольку на рассматриваемом объекте уже установлены блокировки, предназначенные для выполнения других запросов (или операторов CREATE, ALTER и DROP). Блокировки этого типа совместимы с блокировками всех других типов. Блокировки массового обновления Блокировки массового обновления (Bulk Update- BU) представляют собой одну из разновидностей блокировок таблицы, если не считать одного (но очень важного) различия. Блокировки массового обновления допускают параллельную загрузку данных; это означает, что при их использовании таблица блокируется по отношению к любым прочим обычным операциям (выполняемым с помощью операторов T-SQL), но в то же время обеспечивается возможность выполнения многочисленных операций BULK INSERT или операций Ьср. Совместимость блокировок Сведения о совместимости режимов блокировки ресурсов приведены в табл. 12.3 (блокировки показаны в порадке возрастания приоритета). Существующие блокировки упорядочены по столбцам, а запрашиваемые блокировки по строкам. Таблица 12.3. Совместимость режимов блокировки ресурсов IS S и IX SIX X Намеченная разделяемая блокировка (Intent Shared - IS) Да Да Да Да Да нет Разделяемая блокировка (Shared - S) Да Да Да нет нет Нет Блокировка обновления (Update - U) Да Да Нет Нет Нет Нет Намеченная исключительная блокировка (Intent Exclusive -IX) Да Нет нет Да Нет Нет Разделяемая блокировка с намеченной исключительной Да Нет Нет Нет Нет Нет (Shared with Intent Exclusive - SIX) Исключительная блокировка (Exclusive - X) Нет Нет Нет Нет Нет Нет Кроме того, необходимо учитывать описанные ниже условия применения блокировок. Блокировки Sch-S совместимы со всеми режимами блокировки, кроме Sch-M. Блокировки Sch-M несовместимы со всеми прочими режимами блокировки. Блокировки Ви совместимы только с блокировками стабР171ьности схемы (Sch-S) и другими блокировками массового обновления. Определение конкретного типа блокировки с помощью подсказок оптимизатору Иногда возникает необходимость в большем контроле над тем, каким образом осуществляется блокировка данных в ходе вьшолнения запроса или, возможно, даже всей транзакции. Этой цели можно достичь с использованием так называемых подсказок оптимизатору. Подсказки оптимизатору предоставляют возможность явно указать СУБД SQL Server, что должна быть выполнена эскалация блокировки до определенного уровня. Текст подсказки оптимизатору должен находиться непосредственно после имени таблицы (в операторе SQL), на которую распространяется действие подсказки. Описание подсказок оптимизатору приведено в табл. 12.4. Таблица 12.4. Основные подсказки оптимизатору Подсказка Описание serializable/ Послб того как устанавливавтся блокировка одним из операторов в тран-holdlock закции, эта блокировка не освобождается до завершения транзакции (выполняемого с помощью оператора rollback или commit). Исключается также возможность выполнения операторов вставки, если вставляемые строки соответствуют критериям в конструкции vmERE запроса, в котором установлена блокировка (поэтому предпосылки появления фантомов отсутствуют). Это - самый высокий уровень изоляции, который гарантирует абсолютную согласованность данных readuncommitted/ Предотвращает возможность получения каких-либо блокировок (даже nolock разделяемых блокировок), а наличие других блокировок не учитывается. Этот вариант приводит к достижению наиболее высокого быстродействия, но может стать причиной чтения незафиксированных данных, а также целого ряда других проблем readcommitted Этот режим блокировки применяется по умолчанию. В нем учитывается наличие всех установленных ранее блокировок, но сам способ установки блокировок зависит от значения опции базы данных read coMMiTTED snapshot. Если применение опции read coMMiTTED snapshot разрешено, то в режиме readcommitted блокировки не устанавливаются, а вместо этого используется схема поддержки версий строк для определения того, не произошло ли возникновение каких-либо конфликтов. Как правило, этот режим применяется на практике вполне успешно, поэтому чаще всего должна использоваться опция readcommitted, поскольку она позволяет обеспечить обратную совместимость и вместе с тем добиться наиболее высокой производительности readcommittedlock Применение этой опции связано с определенными нюансами. В большинстве ситуаций можно рассчитывать на то, что опция readcommittedlock действует в основном так же, как и readcommitted (и действительно, она по своему функционированию полностью совпадает с опцией readcommitted из предыдущих версий SQL Server). В частности, учитывается наличие всех ранее установленных блокировок, но все установленные блокировки освобождаются сразу же, как только рассматриваемый объект становится не нужным. Создаваемый при этом уровень изоляции совпадает с уровнем изоляции read committed Подсказка Описание repeatableread После того кэк устэнавливается блокировка одним из операторов в транзакции, эта блокировка не освобождается до завершения транзакции (выполняемого с помощью оператора rollback или commit). Но возможность вставки новых данных не исключается readpast rowlock paglock tablock tablockx updlock xlock В этом режиме вместо ожидания освобождения некоторой блокировки происходит пропуск всех заблокированных строк. При этом пропускаются только заблокированные строки (и все еще происходит ожидание освобождения блокировок страниц, экстентов и таблиц); кроме того, этот режим может использоваться только с оператором select В этом режиме принудительно устанавливается начальный уровень блокировки, соответствующий уровню строки, даже если бы оптимизатор при отсутствии этой подсказки выбрал менее детализированную стратегию блокировки. Тем не менее возможность эскалации блокировки с переходом к менее детализированным уровням не исключается, если количество блокировок достигает порогового значения количества блокировок, установленного в системе В этом режиме используются только блокировки на уровне страницы, независимо от того, что оптимизатор в ином случае мог выбрать другой вариант. Необходимость в применении данного режима может быть обусловлена двумя причинами: иногда известно, что блокировка страницы является более целесообразной, чем блокировка строки, поскольку в большей степени способствует экономии ресурсов, а в других обстоятельствах желательно уменьшить конкуренцию между операциями доступа к базе данных, которая может возникнуть в том случае, если оптимизатор выберет режим блокировки на уровне таблицы В этом режиме принудительно устанавливается полная блокировка таблицы, без учета того, что диспетчер блокировок мог бы выбрать другой вариант блокировки. Применение этого режима позволяет действительно ускорить полный просмотр таблицы в тех случаях, если в этом возникает необходимость, но приводит к возникновению значительных проблем, связанных с конкуренцией за ресурсы в том случае, если другим пользователям также требуется внести изменения в данные таблицы Этот режим аналогичен режиму tablock, но в нем создаются исключительные блокировки, характеризующиеся тем, что для всех других пользователей исключается возможность доступа к таблице на все время выполнения оператора или транзакции, в зависимости от того, как задано значение transaction isolation level В этом режиме используется блокировка обновления, а не разделяемая блокировка. Хотя этот режим применяется слишком редко, он весьма способствует предотвращению взаимоблокировок, несмотря на то, что все еще позволяет другим пользователям получать разделяемые блокировки, поскольку исключает возможность внесения каких-либо изменений в данные (создания других блокировок обновления) до тех пор, пока не будет завершено выполнение текущего оператора или транзакции (чаще всего в результате выборки и обновления требуемых строк) Режим xlock был разработан на основе tablockx и введен в версии SQL Server 2000. Преимущество этого режима состоит в том, что он позволяет определить исключительную блокировку независимо от того, какую степень детализации блокировки было решено определить (если задача принятия этого решения было возложена на систему)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |