ИСПРАВИТЬ: Производительности проблемы возникают, когда увеличение активности блокировки базы данных в SQL Server

ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.

Эта статья на английском языке: 2926217
Внимание
По умолчанию это исправление включает в себя Пакет обновления 1 для SQL Server 2014 и необходимо добавить все флаги трассировки, чтобы активировать его. Чтобы включить исправление после установки накопительного обновления в разделе «решение», необходимо запустить Microsoft SQL Server путем добавления флага трассировки 1236 параметры запуска.
Проблема
Предполагается запустить другой экземпляр SQL Server 2012, 2014 Microsoft SQL Server, SQL Server 2008 или SQL Server 2008 R2 на компьютере, который содержит много процессоров. Когда число блокировок (тип ресурса = база данных) для конкретной базы данных превышает определенный порог, возникают следующие проблемы производительности:
  • Повышенные значения возникают LOCK_HASH счетчик spinlock.

    Примечание Сведения о том, как контролировать этот spinlock в разделе «Дополнительные сведения».
  • Запросы или операции, которые требуют блокировки баз данных слишком долго для завершения. Например можно заметить следующие задержки выполнения:
    • Имена входа SQL Server
    • Запросы к связанным серверам
    • sp_reset_connection
    • Проводки
Примечание Найдите в списке блокировки (тип ресурса = база данных) этой базы данных, обратитесь к разделу «Дополнительная информация». Пороговое значение зависит от среды.
Решение

Накопительное обновление информации

Сначала проблема была исправлена в следующем накопительном обновлении SQL Server.

13 накопительного обновления для SQL Server 2008 R2 с пакетом обновления 2

Накопительное обновление для SQL Server 2008 с пакетом обновления 3 17

Накопительное обновление 1 для SQL Server 2014 г

Накопительное обновление 9 для SQL Server 2012 с пакетом обновления 1

О накопительных пакетах обновления для SQL Server

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

Сведения об исправлении

Существует исправление от корпорации Майкрософт. Однако данное исправление предназначено для устранения только проблемы, описанной в этой статье. Применяйте данное исправление только в тех системах, которые имеют данную проблему.

Если исправление доступно для загрузки, имеется раздел «Исправление загрузки доступно» в верхней части этой статьи базы знаний. Если этого раздела нет, отправьте запрос в службу технической поддержки и поддержки для получения исправления.

Примечание Если возникают дополнительные проблемы или необходимо устранить неполадки, возможно создать отдельный запрос на обслуживание. Затраты на обычные службы поддержки будет применяться к Дополнительные вопросы и проблемы, которые не соответствуют требованиям конкретного исправления. Для получения полного списка телефонов поддержки и обслуживания клиентов корпорации Майкрософт, или для создания отдельного запроса на обслуживание, посетите следующий веб-сайт Майкрософт: Примечание В форме «Доступна загрузка исправления» отображаются языки, для которых доступно исправление. Если нужный язык не отображается, это потому, что исправление для данного языка отсутствует.

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

На компьютере с 16 и более процессоров только объекты таблиц используют схему секционирования блокировок. Тем не менее не секционируются блокировки базы данных. Таким образом чем больше количество блокировок, тем больше времени занимает SQL Server получить блокировку базы данных. Большинство приложений, проблемы, вызванные этой структуре не возникают. Но как только число превышает определенный порог, дополнительной работы и времени требуется получить блокировку. Хотя стоимость только микросекунд для каждой дополнительной блокировки, общее время может быстро увеличиваться из-за сегментов хэш блокировки защищены с помощью спин-блокировки. Это вызывает дополнительные циклы ЦП и ожидает дополнительных работников для получения блокировки.

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

Для наблюдения за LOCK_HASH spinlock, можно использовать следующий запрос.
SET NOCOUNT ONCREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,[spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)DECLARE @counter int = 1WHILE @counter < 100      BEGIN            INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH'            WAITFOR DELAY '00:00:05'            SET @counter +=1      ENDSELECT * FROM #spinlock_stats ORDER BY [CaptureTime]DROP TABLE #spinlock_stats
Дополнительные сведения о диагностике и устранении конфликтов spinlock на SQL Server перейдите в следующий документ:

Примечание Несмотря на то, что этот документ предназначен для SQL Server 2008 R2, информация по-прежнему применяется к SQL Server 2012.
Ссылки
Дополнительные сведения о флагах трассировки в SQL Server 2012 перейдите на следующий веб-узел TechNet:


Дополнительные сведения о том, как найти число блокировок базы данных пользователя в базе данных используйте следующий запрос для вычисления этого значения:
select  Resource_database_id, resource_type, request_mode, request_status,  count (*) 'LockCount' from sys.dm_tran_locks group by  Resource_database_id, resource_type, request_mode, request_status


Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 2926217 — последний просмотр: 07/29/2015 14:20:00 — редакция: 6.0

Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Express, Microsoft SQL Server 2012 Web, Microsoft SQL Server 2012 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2008 Service Pack 3, Microsoft SQL Server 2008 R2 Service Pack 2

  • kbqfe kbfix kbsurveynew kbexpertiseadvanced kbautohotfix kbhotfixserver kbmt KB2926217 KbMtru
Отзывы и предложения