Способы решения проблем блокировок, вызванных укрупнение блокировок в SQL Server

Переводы статьи Переводы статьи
Код статьи: 323630 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

Укрупнение блокировки — это процесс преобразования многих детализированное блокировки (например, блокировки строк или страниц) в блокировки таблиц. Microsoft SQL Сервер динамически определяет условия проведения укрупнения блокировок. При этой возможности решение, SQL Server учитывает число блокировок, удерживаемых на определенном просмотре число блокировок, удерживаемых транзакцией целиком и памяти, который используется для блокировки в системе в целом. Как правило приводит происходит укрупнение блокировок SQL Server по умолчанию только в тех точках, где его повышения производительности или когда необходимо уменьшить Чрезмерное блокировки памяти до более разумного уровня. Тем не менее некоторые макеты приложения или запрос может быть выдано укрупнение блокировок во время, когда он не желаем и расширенными таблицы блокировок может блокироваться другие пользователи. В данной статье Описывает, как определить, вызывает укрупнение блокировки и способ чтобы разбираться с нежелательными укрупнение.

Дополнительная информация

Как определить, связана ли укрупнение блокировки

Укрупнение блокировки не вызывает большинство блокирующих проблем. Для определить, будет ли укрупнение блокировки происходит вокруг время когда вы возникают препятствия, запустить трассировку SQL Profiler, которая включает в себя Укрупнение блокировок: событие. Если вы не видите любой Укрупнение блокировок: события, укрупнение блокировки не происходит на сервере и Данная статья не применяется в зависимости от ситуации.

Если укрупнение блокировки происходит, проверьте, что блокировка таблицы расширенными блокирует другие пользователи.

Для получения дополнительных сведений о том, как идентифицировать head всплывающих окон и каким образом для идентификации блокировки ресурса удерживаемые head всплывающих окон, блокирует другой серверного процесса (SPID), идентификаторы щелкните следующий номер статьи базы знаний Майкрософт:
224453Понимание и устранения проблемы блокировки 2000 или SQL Server 7.0
В случае блокировки, блокировка других пользователей отличное от блокировки ВКЛАДКИ (на уровне таблицы) с режимом блокировки S (общая), или X (монопольная), укрупнение блокировки не проблема. В частности, если блокировка ВКЛАДКИ — Это блокировка с намерением (например, режим блокировки IS, IU или IX) не результат укрупнения блокировок. Если ваш блокирующих проблем не вызваны укрупнение блокировки, содержатся в статье Q224453 действия по устранению неполадок.

Как предотвратить распространение блокировки

Простейшим и наиболее безопасным способом предотвратить распространение блокировки является коротких транзакций и таким образом сократить размеры блокировки ресурсоемких запросов что не выходили Пороги укрупнения блокировок. Существует несколько способов для получения этой цели, многие из которых перечислены:
  • Разбейте крупные пакетные операции в нескольких небольших операции. Например предположим, что выполнен следующий запрос, чтобы удалить несколько сотен тысяч старых записей в таблицу аудита, а затем найти его вызвала укрупнение блокировки, блокировка других пользователей:
    DELETE FROM LogMessages WHERE LogDate < '2/1/2002'						
    Путем удаления этих записей сотен одновременно, вы можете значительно Уменьшите число блокировок, которые накапливаются на транзакцию и предотвратить блокировку распространение. Например:
    SET ROWCOUNT 500
    delete_more:
         DELETE FROM LogMessages WHERE LogDate < '2/1/2002'
    IF @@ROWCOUNT > 0 GOTO delete_more
    SET ROWCOUNT 0
  • Уменьшить объем запросов блокировки, сделав запрос как максимально эффективной. Сканирование больших объемов или большое количество просмотров закладки могут увеличить вероятность укрупнение блокировок; Кроме того оно повышает вероятность того взаимоблокировки и обычно негативно влияет на параллелизма и производительности. После обнаружения запроса, вызывает укрупнение блокировки, старайтесь Создание новых индексов или для добавления столбцов в уже существующий индекс удаляемого индекса или Просмотр таблиц и для повышения эффективности индекс поиска. Рассмотрите возможность вставки запрос в окно запроса Query Analyzer анализ автоматического индекса на нем. Для этого на Запрос меню, нажмите кнопку Мастер настройки индексов в SQL Server 2000 или нажмите кнопку Выполнение анализа индекса в SQL Server 7.0.

    Задача этой оптимизации – сделать возврат выполняет поиск индекса минимальное количество строк, чтобы свести к минимуму затраты на Закладка (повысить избирательность индекса для конкретной просмотров запрос). Если SQL Server оценивает, что поиск закладок логический оператор может Возвращает число строк, он может использовать упреждающей ВЫБОРКИ выполнять поиск закладок. Если SQL Сервер с помощью упреждающей ВЫБОРКИ для закладки, его необходимо увеличить уровень изоляции транзакции части запроса для повторяющегося чтения для часть запроса. Это означает, что может выглядеть SELECT инструкции на уровне изоляции read committed могут приобретать несколько тысяч ключ блокировки (как кластеризованного индекса и одним некластеризованным индексом), которые могут вызвать такой запрос может превосходить Пороги укрупнения блокировок. Это особенно Важно, если обнаружится, что расширенными блокировки является разделяемую блокировку таблицы, которая, Тем не менее не видны обычно на уровне изоляции read committed по умолчанию. Если Закладка подстановок С упреждающей ВЫБОРКИ предложение вызывает укрупнение, рассмотрите возможность Добавление дополнительных столбцов некластеризованного индекса, отображаемый в указателе Поиск или сканирование индекса логического оператора под логический поиск закладок оператор в плане запроса. Можно создать индекс покрытия ( Индекс, который содержит все столбцы в таблицы, которые использовались в запросе), или в Хотя бы индекс содержит столбцы, которые использовались для объединения условий или в Это предложение WHERE, если включая все элементы в списке выбрать столбец нецелесообразным.

    Соединение вложенных циклов также может использовать упреждающей ВЫБОРКИ, и это приводит к точно так же блокировки.

    Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
    260652Вложенный цикл соединения, использующего «ЗАКЛАДКА ПОДСТАНОВКИ...Возможно WITH PREFETCH" удерживает блокировки больше
  • Укрупнение блокировки не может возникнуть, если различные SPID в настоящее время удерживает блокировку несовместимые таблицы. Укрупнение блокировок всегда Просмотрщики Блокировка таблицы, но никогда не блокировки страниц. Кроме того Если укрупнение блокировок попытка завершается неудачей, так как другой SPID содержит несовместимые блокировки ВКЛАДКИ, запрос Это попытка укрупнения не блокируется во время ожидания блокировки ВКЛАДКИ. Вместо этого он продолжает блокировки на уровне исходного, более детализированные (строки, ключа, или страницы), периодически вносить дополнительные укрупнения попыток. Таким образом один метод, чтобы предотвратить распространение блокировки для конкретной таблицы, получения и до Блокируйте данные на другое подключение, не совместим с расширенными Тип блокировки. Блокировку IX (намерением монопольного доступа) на уровне таблицы не блокирует все строк или страниц, но по-прежнему не совместим с расширенными S (коллективная) или x (монопольный) На ВКЛАДКЕ блокировки. Например предположим, что необходимо запустить пакетное задание Изменяет большое количество строк в MyTable таблицы и что вызвало блокировки, возникает из-за блокировки распространение. Если это задание всегда завершается в менее чем за час, можно создать Задание языка Transact-SQL, содержащий следующий код и календарный план нового задания для запуска нескольких минут до времени начала пакетного задания:
    BEGIN TRAN
    SELECT * FROM mytable (UPDLOCK, HOLDLOCK) WHERE 1=0
    WAITFOR DELAY '1:00:00'
    COMMIT TRAN				
    Этот запрос получает и удерживает блокировку IX MyTable один час, который предотвращает укрупнение блокировки таблицы во время Это время. Этот пакет не изменять любые данные или блокировать другие запросы (если только не другой запрос вызывает блокировку таблицы с подсказкой TABLOCK или, если администратор отключил блокировки строки или страницы с помощью sp_indexoption Хранимая процедура).
Кроме того можно отключить укрупнение блокировки при включении трассировки флаг 1211. Однако этот флаг трассировки отключает все укрупнения блокировки глобально в экземпляр SQL Server. Укрупнение блокировок служит полезным цели в SQL Сервер, повышая эффективность запросов, которые в противном случае замедлен по издержки запросы и освобождения блокировок несколько тысяч. Блокировка Распространение также помогает свести к минимуму необходимого количества памяти для отслеживания блокировок. Память, SQL Server может динамически выделять для структур блокировки конечных, поэтому при отключении укрупнение блокировки и блокировки памяти растет большой достаточно, пытается выделить дополнительные блокировки для любого запроса, может произойти сбой и возникает следующая ошибка:

Ошибка: 1204, уровень серьезности: 19 Состояние: 1
SQL Server не удалось получить БЛОКИРОВКУ ресурса на данный момент. Повторить инструкция, при наличии активных пользователей уменьшится или попросите системы администратору, чтобы проверить конфигурацию блокировки и памяти SQL Server.
Примечание При возникновении ошибки «1204», он прекращает обработку Текущий оператор и вызывает откат активной транзакции. Откат сам может блокировать пользователей или привести к времени восстановления базы данных long, если перезапуск службы SQL Server.

С помощью подсказки блокировки, такие как ROWLOCK изменяет только план первоначальной блокировок. Подсказки блокировок предотвращает укрупнение блокировок.

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

Чтобы добавить параметр загрузки сервера, щелкните правой кнопкой мыши Выберите сервер в SQL Enterprise Manager Свойства, а затем на Общие Щелкните Параметры запуска, а затем добавьте следующий параметр (так, как показано):
-T1211
Необходимо пройти для нового параметра запуска службы SQL Server в силу. Если вы запустите следующий запрос в Query Analyzer флага трассировки вступает в силу немедленно.
DBCC TRACEON (1211, -1)				
Тем не менее если не добавить -T1211 параметр запуска, эффект TRACEON команда, теряются при циклах службы SQL Server. Включение флаг трассировки запрещает любые будущие укрупнение, но это не изменяет любой укрупнения блокировок, которые уже произошли в активном транзакции.

Свойства

Код статьи: 323630 - Последний отзыв: 8 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Ключевые слова: 
kbsqlsetup kbinfo kbmt KB323630 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:323630

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com